Files
ha_explore/backend/tests/test_entities.py
2026-02-21 16:55:10 +01:00

120 lines
3.3 KiB
Python

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