FUE-T04: add Meter.uuid (stable HA identity anchor) + backfill migration
This commit is contained in:
@@ -381,6 +381,43 @@ class TestDeclareMeter:
|
||||
assert fetched.commodity == "gas"
|
||||
assert fetched.note == "Rotameter serial XYZ"
|
||||
|
||||
def test_declare_meter_generates_uuid(self, session: Session):
|
||||
"""declare_meter must auto-generate a non-empty uuid via ORM default."""
|
||||
import re
|
||||
UUID4_RE = re.compile(
|
||||
r"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
|
||||
re.IGNORECASE,
|
||||
)
|
||||
|
||||
m = declare_meter(
|
||||
session,
|
||||
label="Meter with UUID",
|
||||
started_at=_T0,
|
||||
reason="initial",
|
||||
)
|
||||
session.commit()
|
||||
|
||||
fetched = session.get(Meter, m.id)
|
||||
assert fetched is not None
|
||||
assert fetched.uuid is not None, "uuid must not be None after declare_meter"
|
||||
assert fetched.uuid != "", "uuid must not be empty"
|
||||
assert UUID4_RE.match(fetched.uuid), (
|
||||
f"uuid {fetched.uuid!r} does not look like a valid UUID v4"
|
||||
)
|
||||
|
||||
def test_declare_meter_each_gets_distinct_uuid(self, session: Session):
|
||||
"""Each declared meter must receive a distinct UUID (not duplicated)."""
|
||||
m1 = declare_meter(session, label="M1", started_at=_T0, reason="initial")
|
||||
session.commit()
|
||||
|
||||
t1 = _T0 + timedelta(days=10)
|
||||
m2 = declare_meter(session, label="M2", started_at=t1, reason="meter_swap")
|
||||
session.commit()
|
||||
|
||||
assert m1.uuid != m2.uuid, (
|
||||
f"Two declared meters must have distinct UUIDs; both got {m1.uuid!r}"
|
||||
)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 5. Different commodities are independent
|
||||
|
||||
Reference in New Issue
Block a user