From 79cead793ccea4d65c0d7c17987f3ce04235bd2d Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Mon, 2 Feb 2026 21:37:39 +0000 Subject: [PATCH] Add CLI and integration tests --- tests/integration/test_full_audit.py | 136 +++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 tests/integration/test_full_audit.py diff --git a/tests/integration/test_full_audit.py b/tests/integration/test_full_audit.py new file mode 100644 index 0000000..69e6a7b --- /dev/null +++ b/tests/integration/test_full_audit.py @@ -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()