from __future__ import annotations from pathlib import Path from testing import quality_gate def test_run_profile_aggregates_internal_and_pytest_results(tmp_path: Path, monkeypatch): build_dir = tmp_path / "build" unit_test = tmp_path / "test_sample.py" unit_test.write_text("def test_ok():\n assert True\n", encoding="utf-8") contract = { "profiles": {"local": ["docs", "smell", "hygiene", "unit", "coverage"]}, "pytest_suites": { "unit": { "description": "Unit suite", "paths": [str(unit_test.relative_to(tmp_path))], "junit": "build/junit-unit.xml", "coverage_xml": "build/coverage-unit.xml", "coverage_sources": [], } }, "manual_scripts": [{"path": "manual.py", "description": "Manual"}], } monkeypatch.setattr(quality_gate, "run_docs_check", lambda *_: []) monkeypatch.setattr(quality_gate, "run_hygiene_check", lambda *_: []) monkeypatch.setattr(quality_gate, "run_coverage_check", lambda *_: []) calls = [] def fake_run(command, cwd, check): calls.append((command, cwd, check)) if "--junitxml=" in " ".join(command): (build_dir / "junit-unit.xml").write_text( '', encoding="utf-8", ) (build_dir / "coverage-unit.xml").write_text("", encoding="utf-8") return type("Completed", (), {"returncode": 0})() monkeypatch.setattr(quality_gate.subprocess, "run", fake_run) summary = quality_gate.run_profile(contract, tmp_path, "local", build_dir) assert summary["status"] == "ok" assert [result["name"] for result in summary["results"]] == [ "docs", "smell", "hygiene", "unit", "coverage", ] assert calls[0][0][:3] == [quality_gate.sys.executable, "-m", "ruff"] assert any(result.get("junit") == "build/junit-unit.xml" for result in summary["results"]) def test_main_writes_summary_file(tmp_path: Path, monkeypatch): summary = {"status": "ok", "profile": "local", "results": [], "manual_scripts": []} monkeypatch.chdir(tmp_path) monkeypatch.setattr(quality_gate, "load_contract", lambda: {"profiles": {"local": []}, "pytest_suites": {}}) monkeypatch.setattr(quality_gate, "run_profile", lambda *args, **kwargs: summary) rc = quality_gate.main(["--profile", "local", "--build-dir", "build"]) assert rc == 0 assert (tmp_path / "build" / "quality-gate-summary.json").exists()