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()