56 lines
2 KiB
Python
56 lines
2 KiB
Python
|
|
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",
|
||
|
|
],
|
||
|
|
)
|
||
|
|
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 == []
|