first
This commit is contained in:
119
backend/tests/test_entities.py
Normal file
119
backend/tests/test_entities.py
Normal file
@@ -0,0 +1,119 @@
|
||||
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
|
||||
Reference in New Issue
Block a user