FUE-T05: anchor energy-cost HA device identity to active meter (uuid id, label name, empty when none)
This commit is contained in:
@@ -205,27 +205,58 @@ def test_register_provider_direct_call():
|
||||
def test_build_catalog_empty_with_no_devices(expose_db):
|
||||
"""build_catalog with no enabled modbus devices must contain no modbus entities.
|
||||
|
||||
The energy_cost provider is always registered and always produces its 6 entities
|
||||
(4 original + 2 daily) regardless of device state, so the catalog will not be empty.
|
||||
This test checks that no *modbus* entities are present when there are no enabled
|
||||
modbus devices.
|
||||
FUE-T05: the energy_cost provider now requires an active electricity meter.
|
||||
Without one, it returns [] and the catalog contains no energy entities.
|
||||
With one, it produces 6 entities.
|
||||
|
||||
This test verifies both cases:
|
||||
1. No modbus devices → no modbus entities.
|
||||
2. No active meter → no energy entities (provider returns []).
|
||||
3. After inserting an active meter → 6 energy entities present.
|
||||
"""
|
||||
from app.integrations.expose import build_catalog
|
||||
|
||||
# Case: no modbus devices, no active meter → catalog is empty.
|
||||
with Session(expose_db) as session:
|
||||
catalog = build_catalog(session)
|
||||
|
||||
# The modbus provider finds no enabled devices → no modbus entities.
|
||||
# The energy_cost provider always produces 6 entities, so the catalog is non-empty.
|
||||
modbus_entities = [e for e in catalog if e.entity.key.startswith("modbus.")]
|
||||
assert modbus_entities == [], (
|
||||
"Expected no modbus entities when no modbus devices are enabled"
|
||||
)
|
||||
|
||||
# The 6 energy_cost entities should always be present (4 original + 2 daily).
|
||||
energy_keys = {e.entity.key for e in catalog if e.entity.key.startswith("energy.")}
|
||||
assert len(energy_keys) == 6, (
|
||||
f"Expected exactly 6 energy_cost entities (4 original + 2 daily), got {energy_keys!r}"
|
||||
# No active electricity meter → energy-cost provider returns [] → no energy entities.
|
||||
energy_keys_no_meter = {e.entity.key for e in catalog if e.entity.key.startswith("energy.")}
|
||||
assert len(energy_keys_no_meter) == 0, (
|
||||
f"Expected 0 energy_cost entities (no active meter), got {energy_keys_no_meter!r}"
|
||||
)
|
||||
|
||||
# Insert an active electricity meter → provider should now produce 6 entities.
|
||||
from datetime import datetime, timezone
|
||||
now = datetime.now(tz=timezone.utc)
|
||||
with Session(expose_db) as session:
|
||||
from app.models.energy import Meter
|
||||
m = Meter(
|
||||
label="Test Meter for catalog",
|
||||
commodity="electricity",
|
||||
started_at=now,
|
||||
ended_at=None,
|
||||
reason="initial",
|
||||
note=None,
|
||||
created_at=now,
|
||||
)
|
||||
session.add(m)
|
||||
session.commit()
|
||||
|
||||
with Session(expose_db) as session:
|
||||
catalog_with_meter = build_catalog(session)
|
||||
|
||||
energy_keys_with_meter = {
|
||||
e.entity.key for e in catalog_with_meter if e.entity.key.startswith("energy.")
|
||||
}
|
||||
assert len(energy_keys_with_meter) == 6, (
|
||||
f"Expected exactly 6 energy_cost entities (4 original + 2 daily) with active meter, "
|
||||
f"got {energy_keys_with_meter!r}"
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user