142 lines
5.6 KiB
Python
142 lines
5.6 KiB
Python
from pathlib import Path
|
|
|
|
|
|
def test_backend_uses_patched_starlette_and_explicit_httpx2_test_client() -> None:
|
|
pyproject = Path(__file__).resolve().parents[1] / "pyproject.toml"
|
|
content = pyproject.read_text(encoding="utf-8")
|
|
|
|
assert '"starlette>=1.3.1,<2.0.0"' in content
|
|
assert '"httpx2>=2.0.0"' in content
|
|
|
|
|
|
def test_readiness_gate_treats_deprecation_warnings_as_errors() -> None:
|
|
script = Path(__file__).resolve().parents[2] / "scripts" / "run_readiness_check.sh"
|
|
content = script.read_text(encoding="utf-8")
|
|
|
|
assert "-W error::DeprecationWarning" in content
|
|
|
|
|
|
def test_readiness_gate_runs_contract_smoke() -> None:
|
|
script = Path(__file__).resolve().parents[2] / "scripts" / "run_readiness_check.sh"
|
|
content = script.read_text(encoding="utf-8")
|
|
|
|
assert "scripts/smoke_contracts.py" in content
|
|
|
|
|
|
def test_readiness_gate_checks_demo_export_workflow_script_syntax() -> None:
|
|
script = Path(__file__).resolve().parents[2] / "scripts" / "run_readiness_check.sh"
|
|
content = script.read_text(encoding="utf-8")
|
|
|
|
assert "bash -n scripts/verify_demo_export_workflow.sh" in content
|
|
assert "bash -n scripts/verify_workbench_default_state.sh" in content
|
|
|
|
|
|
def test_readiness_gate_runs_golden_qa_benchmark() -> None:
|
|
script = Path(__file__).resolve().parents[2] / "scripts" / "run_readiness_check.sh"
|
|
content = script.read_text(encoding="utf-8")
|
|
|
|
assert "scripts/run_golden_qa_benchmark.py --json" in content
|
|
assert "bash -n scripts/verify_golden_qa_benchmark.sh" in content
|
|
|
|
|
|
def test_readiness_gate_compiles_demo_cleanup_script() -> None:
|
|
script = Path(__file__).resolve().parents[2] / "scripts" / "run_readiness_check.sh"
|
|
content = script.read_text(encoding="utf-8")
|
|
|
|
assert "-m py_compile scripts/cleanup_demo_artifacts.py" in content
|
|
assert "-m py_compile backend/scripts/cleanup_demo_artifacts.py" in content
|
|
|
|
|
|
def test_readiness_gate_checks_demo_cleanup_dry_run_script_syntax() -> None:
|
|
script = Path(__file__).resolve().parents[2] / "scripts" / "run_readiness_check.sh"
|
|
content = script.read_text(encoding="utf-8")
|
|
|
|
assert "bash -n scripts/verify_demo_cleanup_dry_run.sh" in content
|
|
|
|
|
|
def test_demo_cleanup_dry_run_script_is_dry_run_only() -> None:
|
|
script = Path(__file__).resolve().parents[2] / "scripts" / "verify_demo_cleanup_dry_run.sh"
|
|
content = script.read_text(encoding="utf-8")
|
|
|
|
assert "--apply" not in content
|
|
assert "deleted_export_count=0" in content
|
|
assert "dry_run=true" in content
|
|
assert "candidate_exports" in content
|
|
assert "CLEANUP_MODE" in content
|
|
assert "project_report_html" in content
|
|
|
|
|
|
def test_readiness_gate_checks_workbench_screenshot_capture_syntax() -> None:
|
|
script = Path(__file__).resolve().parents[2] / "scripts" / "run_readiness_check.sh"
|
|
content = script.read_text(encoding="utf-8")
|
|
|
|
assert "bash -n scripts/capture_workbench_screenshots.sh" in content
|
|
|
|
|
|
def test_workbench_screenshot_capture_is_artifact_based_and_non_mutating() -> None:
|
|
script = Path(__file__).resolve().parents[2] / "scripts" / "capture_workbench_screenshots.sh"
|
|
content = script.read_text(encoding="utf-8")
|
|
|
|
assert "artifacts/screenshots" in content
|
|
assert "/api/v1/demo/workflow" in content
|
|
assert "['overview', 'Overview']" in content
|
|
assert "['system', 'System']" in content
|
|
assert "workspace-nav-${workspaceKey}" in content
|
|
assert "manifest.json" in content
|
|
assert "page.screenshot" in content
|
|
assert "fullPage: false" in content
|
|
assert "Playwright is required" in content
|
|
assert "--apply" not in content
|
|
|
|
|
|
def test_readiness_gate_compiles_yolo_preflight_script() -> None:
|
|
script = Path(__file__).resolve().parents[2] / "scripts" / "run_readiness_check.sh"
|
|
content = script.read_text(encoding="utf-8")
|
|
|
|
assert "-m py_compile scripts/yolo_preflight.py" in content
|
|
assert "-m py_compile backend/scripts/yolo_preflight.py" in content
|
|
|
|
|
|
def test_demo_export_workflow_script_verifies_export_endpoints() -> None:
|
|
script = Path(__file__).resolve().parents[2] / "scripts" / "verify_demo_export_workflow.sh"
|
|
content = script.read_text(encoding="utf-8")
|
|
|
|
assert "/api/v1/demo/workflow" in content
|
|
assert "/areas" in content
|
|
assert "/datasets" in content
|
|
assert "/content" in content
|
|
assert "/vector/summary" in content
|
|
assert "GeoJSON Polygon/MultiPolygon geometry" in content
|
|
assert "precision" in content
|
|
assert "false_negative_count" in content
|
|
assert "fixtures/golden/expected_qa_metrics.json" in content
|
|
assert "QA/QC metric {key} drifted" in content
|
|
assert "Seeded QA/QC match count does not match golden baseline" in content
|
|
assert "/api/v1/exports/metadata" in content
|
|
assert "/api/v1/exports/report" in content
|
|
assert "/api/v1/exports/geojson" in content
|
|
assert "/download" in content
|
|
|
|
|
|
def test_workbench_default_state_script_verifies_populated_demo_start_state() -> None:
|
|
script = Path(__file__).resolve().parents[2] / "scripts" / "verify_workbench_default_state.sh"
|
|
content = script.read_text(encoding="utf-8")
|
|
|
|
assert "/api/v1/demo/workflow" in content
|
|
assert "GeoIntel Demo - Building QA" in content
|
|
assert "/areas" in content
|
|
assert "/datasets" in content
|
|
assert "/quality-checks" in content
|
|
assert "data.items" in content
|
|
assert "Demo AOI - Geel buildings" in content
|
|
assert "3/3 ready" in content
|
|
|
|
|
|
def test_pass_end_check_excludes_vendor_and_build_outputs() -> None:
|
|
script = Path(__file__).resolve().parents[2] / "scripts" / "codex_pass_end_check.sh"
|
|
content = script.read_text(encoding="utf-8")
|
|
|
|
assert "--exclude-dir=node_modules" in content
|
|
assert "--exclude-dir=dist" in content
|
|
assert "--exclude-dir=__pycache__" in content
|