Add CLI and integration tests
This commit is contained in:
136
tests/integration/test_full_audit.py
Normal file
136
tests/integration/test_full_audit.py
Normal file
@@ -0,0 +1,136 @@
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
import tempfile
|
||||
import json
|
||||
|
||||
|
||||
class TestFullAudit:
|
||||
def test_audit_single_js_project(self):
|
||||
from depaudit.cli import audit
|
||||
from click.testing import CliRunner
|
||||
|
||||
runner = CliRunner()
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
pkg_file = Path(tmpdir) / "package.json"
|
||||
pkg_file.write_text(json.dumps({
|
||||
"name": "test-js-project",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"express": "^4.18.2",
|
||||
"lodash": "^4.17.21"
|
||||
},
|
||||
"devDependencies": {
|
||||
"jest": "^29.0.0"
|
||||
}
|
||||
}))
|
||||
|
||||
result = runner.invoke(audit, [str(tmpdir), "--format", "json"])
|
||||
|
||||
assert result.exit_code == 0
|
||||
|
||||
output = json.loads(result.output)
|
||||
assert "vulnerabilities" in output
|
||||
assert "outdated" in output
|
||||
assert "summary" in output
|
||||
|
||||
def test_audit_single_python_project(self):
|
||||
from depaudit.cli import audit
|
||||
from click.testing import CliRunner
|
||||
|
||||
runner = CliRunner()
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
req_file = Path(tmpdir) / "requirements.txt"
|
||||
req_file.write_text("""
|
||||
requests>=2.28.0
|
||||
flask>=2.0.0
|
||||
pytest>=7.0.0
|
||||
""")
|
||||
|
||||
result = runner.invoke(audit, [str(tmpdir), "--format", "json"])
|
||||
|
||||
assert result.exit_code == 0
|
||||
|
||||
output = json.loads(result.output)
|
||||
assert "vulnerabilities" in output or "outdated" in output
|
||||
|
||||
def test_audit_mixed_project(self):
|
||||
from depaudit.cli import audit
|
||||
from click.testing import CliRunner
|
||||
|
||||
runner = CliRunner()
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
pkg_file = Path(tmpdir) / "package.json"
|
||||
pkg_file.write_text(json.dumps({
|
||||
"name": "mixed-project",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {}
|
||||
}))
|
||||
|
||||
req_file = Path(tmpdir) / "requirements.txt"
|
||||
req_file.write_text("requests>=2.28.0\n")
|
||||
|
||||
go_mod = Path(tmpdir) / "go.mod"
|
||||
go_mod.write_text("""
|
||||
module github.com/test/mixed
|
||||
|
||||
go 1.20
|
||||
|
||||
require github.com/gin-gonic/gin v1.9.0
|
||||
""")
|
||||
|
||||
cargo_file = Path(tmpdir) / "Cargo.toml"
|
||||
cargo_file.write_text("""
|
||||
[package]
|
||||
name = "test"
|
||||
version = "0.1.0"
|
||||
|
||||
[dependencies]
|
||||
serde = "1.0"
|
||||
""")
|
||||
|
||||
result = runner.invoke(audit, [str(tmpdir), "--format", "json"])
|
||||
|
||||
assert result.exit_code == 0
|
||||
|
||||
output = json.loads(result.output)
|
||||
assert "scanned_count" in output
|
||||
assert output["scanned_count"] >= 3
|
||||
|
||||
|
||||
class TestCICDGeneration:
|
||||
def test_generate_github_workflow_file(self):
|
||||
from depaudit.cli import generate_cicd
|
||||
from click.testing import CliRunner
|
||||
|
||||
runner = CliRunner()
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
result = runner.invoke(generate_cicd, [
|
||||
"github",
|
||||
tmpdir,
|
||||
"--schedule", "0 0 * * 0"
|
||||
])
|
||||
|
||||
assert result.exit_code == 0
|
||||
|
||||
workflow_dir = Path(tmpdir) / ".github" / "workflows"
|
||||
if workflow_dir.exists():
|
||||
workflow_file = workflow_dir / "depaudit.yml"
|
||||
assert workflow_file.exists()
|
||||
|
||||
def test_generate_gitlab_ci_file(self):
|
||||
from depaudit.cli import generate_cicd
|
||||
from click.testing import CliRunner
|
||||
|
||||
runner = CliRunner()
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
result = runner.invoke(generate_cicd, ["gitlab", tmpdir])
|
||||
|
||||
assert result.exit_code == 0
|
||||
|
||||
gitlab_file = Path(tmpdir) / ".gitlab-ci.yml"
|
||||
assert gitlab_file.exists()
|
||||
Reference in New Issue
Block a user