"""Tests for the provenance leaf rail (SHARD-WP-0007 T1).""" from datetime import datetime, timezone from shard_wiki.provenance import ( Liveness, OverlayState, ProvenanceEnvelope, SpanProvenanceDelta, Staleness, effective, ) def _base() -> ProvenanceEnvelope: return ProvenanceEnvelope( source_shard="shardA", liveness=Liveness.STATIC, staleness=Staleness.FRESH, source_rev="r1", observed_at=datetime(2026, 6, 15, tzinfo=timezone.utc), ) def test_no_delta_returns_base_identity(): base = _base() assert effective(base) is base assert effective(base, SpanProvenanceDelta()) is base def test_empty_delta_is_detected(): assert SpanProvenanceDelta().is_empty() assert not SpanProvenanceDelta(source_shard="other").is_empty() def test_single_field_override(): base = _base() eff = effective(base, SpanProvenanceDelta(source_shard="shardB")) assert eff.source_shard == "shardB" # Untouched fields inherit from the page envelope. assert eff.source_rev == "r1" assert eff.liveness is Liveness.STATIC # Base is unchanged (frozen, pure composition). assert base.source_shard == "shardA" def test_partial_delta_overrides_several_fields(): base = _base() eff = effective( base, SpanProvenanceDelta( staleness=Staleness.STALE, overlay_state=OverlayState.DRAFT, divergence=("shardB:Home",), ), ) assert eff.staleness is Staleness.STALE assert eff.overlay_state is OverlayState.DRAFT assert eff.divergence == ("shardB:Home",) assert eff.source_shard == "shardA" # inherited def test_divergence_empty_tuple_overrides_but_none_inherits(): base = ProvenanceEnvelope(source_shard="s", divergence=("x",)) # None → inherit the page's divergence. assert effective(base, SpanProvenanceDelta(divergence=None)).divergence == ("x",) # Explicit empty tuple → override (clear it). assert effective(base, SpanProvenanceDelta(divergence=())).divergence == () def test_envelope_is_hashable_and_value_equal(): assert _base() == _base() assert len({_base(), _base()}) == 1