from datetime import datetime from sqlmodel import Session from app.models import EntityCache, EntityFlag def _seed_entities(session: Session): entities = [ EntityCache( entity_id="light.salon", domain="light", friendly_name="Lumière Salon", state="on", is_available=True, fetched_at=datetime.utcnow(), ), EntityCache( entity_id="sensor.temperature", domain="sensor", friendly_name="Température", state="22.5", device_class="temperature", unit_of_measurement="°C", is_available=True, fetched_at=datetime.utcnow(), ), EntityCache( entity_id="switch.garage", domain="switch", friendly_name="Garage", state="off", is_available=True, fetched_at=datetime.utcnow(), ), EntityCache( entity_id="sensor.humidity", domain="sensor", friendly_name="Humidité", state="unavailable", is_available=False, fetched_at=datetime.utcnow(), ), ] for e in entities: session.add(e) session.commit() def test_list_entities_empty(client): resp = client.get("/api/entities") assert resp.status_code == 200 data = resp.json() assert data["items"] == [] assert data["total"] == 0 def test_list_entities_with_data(client, session): _seed_entities(session) resp = client.get("/api/entities") assert resp.status_code == 200 data = resp.json() assert data["total"] == 4 assert len(data["items"]) == 4 def test_list_entities_filter_domain(client, session): _seed_entities(session) resp = client.get("/api/entities?domain=sensor") assert resp.status_code == 200 data = resp.json() assert data["total"] == 2 assert all(e["domain"] == "sensor" for e in data["items"]) def test_list_entities_filter_multi_domain(client, session): _seed_entities(session) resp = client.get("/api/entities?domain=light,switch") data = resp.json() assert data["total"] == 2 def test_list_entities_search(client, session): _seed_entities(session) resp = client.get("/api/entities?search=salon") data = resp.json() assert data["total"] == 1 assert data["items"][0]["entity_id"] == "light.salon" def test_list_entities_filter_available(client, session): _seed_entities(session) resp = client.get("/api/entities?available=false") data = resp.json() assert data["total"] == 1 assert data["items"][0]["entity_id"] == "sensor.humidity" def test_list_entities_pagination(client, session): _seed_entities(session) resp = client.get("/api/entities?page=1&per_page=2") data = resp.json() assert len(data["items"]) == 2 assert data["total"] == 4 assert data["pages"] == 2 def test_get_entity_detail(client, session): _seed_entities(session) resp = client.get("/api/entities/light.salon") assert resp.status_code == 200 data = resp.json() assert data["entity_id"] == "light.salon" assert data["favorite"] is False def test_get_entity_not_found(client): resp = client.get("/api/entities/nonexistent.entity") assert resp.status_code == 404