"""u1 — VerificationResult dataclass surface (IMP-16-U1). Locks the Phase Z verification utility module anchor and the VerificationResult shape so downstream units (u2~u10) can rely on it without importing src.content_verifier. """ from __future__ import annotations import ast import importlib import pytest def test_module_importable_without_content_verifier(): mod = importlib.import_module("src.phase_z2_verification_utils") tree = ast.parse(open(mod.__file__, encoding="utf-8").read()) for node in ast.walk(tree): if isinstance(node, ast.Import): for alias in node.names: assert "content_verifier" not in alias.name, ( "Phase Z verification utility must not import " "src.content_verifier" ) elif isinstance(node, ast.ImportFrom): assert node.module is None or "content_verifier" not in node.module, ( "Phase Z verification utility must not import " "src.content_verifier" ) def test_verification_result_defaults(): from src.phase_z2_verification_utils import VerificationResult r = VerificationResult(passed=True, area_name="zone_test") assert r.passed is True assert r.area_name == "zone_test" assert r.checks == {} assert r.score == 0.0 assert r.errors == [] assert r.warnings == [] def test_verification_result_independent_default_collections(): from src.phase_z2_verification_utils import VerificationResult a = VerificationResult(passed=False, area_name="a") b = VerificationResult(passed=False, area_name="b") a.checks["x"] = True a.errors.append("e") a.warnings.append("w") assert b.checks == {} and b.errors == [] and b.warnings == [] def test_verification_result_required_fields(): from src.phase_z2_verification_utils import VerificationResult with pytest.raises(TypeError): VerificationResult() # type: ignore[call-arg]