"""Tests for Assertion subclasses.""" from __future__ import annotations from pqc_content_provenance import ( AIGeneratedAssertion, TrainingAssertion, UsageAssertion, ) def test_ai_generated_assertion_roundtrip() -> None: a = AIGeneratedAssertion( model_name="Llama-3-8B-Instruct", model_version="1.0", model_did="did:pqaid:abc", generator_type="text", human_edited=True, generation_params={"temperature": 0.7, "top_p": 0.9, "seed": 42}, ) d = a.to_dict() assert d["label"] == "c2pa.ai_generated" restored = AIGeneratedAssertion.from_dict(d) assert restored.model_name == a.model_name assert restored.human_edited is True assert restored.generation_params == a.generation_params def test_training_assertion_includes_license_list() -> None: t = TrainingAssertion( dataset_name="common-crawl-2024", dataset_root_hash="f" * 64, pii_filtered=True, copyright_cleared=True, licenses=["cc-by-4.0", "apache-2.0", "mit"], ) d = t.to_dict() assert d["label"] == "c2pa.training" assert d["licenses"] == ["cc-by-4.0", "apache-2.0", "mit"] restored = TrainingAssertion.from_dict(d) assert restored.licenses == t.licenses assert restored.copyright_cleared is True def test_usage_assertion_defaults() -> None: u = UsageAssertion() assert u.license == "all-rights-reserved" assert u.commercial_use is False assert u.attribution_required is True assert u.attribution_text == "" assert u.jurisdictions == [] assert u.expiry == "" d = u.to_dict() assert d["label"] == "c2pa.usage" def test_assertion_hash_changes_with_field() -> None: a = AIGeneratedAssertion(model_name="Llama-3-8B-Instruct", model_version="1.0") b = AIGeneratedAssertion(model_name="Llama-3-8B-Instruct", model_version="2.0") assert a.hash() != b.hash() # Same data -> same hash c = AIGeneratedAssertion(model_name="Llama-3-8B-Instruct", model_version="1.0") assert a.hash() == c.hash() def test_usage_assertion_roundtrip_preserves_jurisdictions() -> None: u = UsageAssertion( license="cc-by-nc-4.0", commercial_use=False, attribution_required=True, attribution_text="Generated by Llama-3", jurisdictions=["US", "EU", "UK"], expiry="2030-01-01T00:00:00Z", ) restored = UsageAssertion.from_dict(u.to_dict()) assert restored.jurisdictions == ["US", "EU", "UK"] assert restored.expiry == "2030-01-01T00:00:00Z"