from __future__ import annotations from app.ha.client import HaClient, HaClientSettings from app.ha.models import HaEntitySummary, HaState from app.ha.reader import HaReader class FakeHaClient(HaClient): def __init__(self) -> None: super().__init__(HaClientSettings(url="http://test", token="token")) def list_entities(self) -> list[dict[str, object]]: return [ { "entity_id": "sensor.temperature", "state": "21.5", "attributes": { "state_class": "measurement", "device_class": "temperature", "unit_of_measurement": "°C", }, }, { "entity_id": "light.living_room", "state": "on", "attributes": {}, }, ] def test_ha_reader_returns_summaries() -> None: reader = HaReader(FakeHaClient()) summaries = reader.read_entities() assert len(summaries) == 2 domains = {summary.domain for summary in summaries} assert domains == {"sensor", "light"} sensor = next(item for item in summaries if item.entity_id == "sensor.temperature") assert sensor.unit_of_measurement == "°C"