136 lines
3.8 KiB
Python
136 lines
3.8 KiB
Python
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()
|