import copy import pytest from conftest import golden_extension, load_json, FIXTURES_DIR from target_revenue import validation @pytest.mark.parametrize( "name", [ "development-license", "cost-plus-operations", "phase-sponsorship", "service-with-development-allocation", "product-ideation", "general-consulting", ], ) def test_canonical_stage0_extensions_are_conformant(name): validation.validate_extension_contract(golden_extension(name)) def test_non_conforming_extension_is_rejected(): extension = load_json(FIXTURES_DIR / "non_conforming_extension.json") with pytest.raises(validation.ConformanceError) as excinfo: validation.validate_extension_contract(extension) assert "Outstanding Target" in str(excinfo.value) def test_extension_missing_required_field_is_rejected(): extension = copy.deepcopy(golden_extension("development-license")) del extension["evidence"] with pytest.raises(validation.ConformanceError): validation.validate_extension_contract(extension) def test_extension_bad_status_is_rejected(): extension = copy.deepcopy(golden_extension("development-license")) extension["status"] = "endorsed" # not in {registered, canonical, deprecated} with pytest.raises(validation.ConformanceError): validation.validate_extension_contract(extension) def test_core_term_redefinition_heuristic_is_case_insensitive(): extension = copy.deepcopy(golden_extension("development-license")) extension["allocation"]["rule"] = "Development Credit means whatever the licensor prefers." errors = validation.check_extension_core_term_redefinition(extension) assert errors assert "Development Credit" in errors[0] def test_legitimate_rule_referencing_core_term_without_redefining_is_allowed(): extension = golden_extension("development-license") # References "Development Credit" as a target, not a redefinition. errors = validation.check_extension_core_term_redefinition(extension) assert errors == []