generated from coulomb/repo-seed
feat(provenance): layered ProvenanceEnvelope + effective() leaf (WP-0007 T1)
Dependency-free leaf rail: ProvenanceEnvelope + SpanProvenanceDelta + effective() (page envelope ⊕ span delta; zero-cost inheritance when uniform). Liveness/ Staleness/OverlayState enums. 6 tests green. (blueprint §7.3, §11) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
73
tests/test_provenance.py
Normal file
73
tests/test_provenance.py
Normal file
@@ -0,0 +1,73 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user