Add dashboard control and learning editor
This commit is contained in:
@@ -2,20 +2,80 @@ from __future__ import annotations
|
||||
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
from app.main import app, stores
|
||||
import app.main as main
|
||||
from app.core.event_core import EventCore
|
||||
from app.core.models import EntityState, RuntimeState
|
||||
from app.core.stores import FutureStores
|
||||
|
||||
|
||||
def test_health_and_backup_roundtrip(tmp_path, monkeypatch) -> None: # type: ignore[no-untyped-def]
|
||||
monkeypatch.setenv("SILLYHOME_FUTURE_STORE", str(tmp_path))
|
||||
client = TestClient(app)
|
||||
test_stores = FutureStores(tmp_path)
|
||||
monkeypatch.setattr(main, "stores", test_stores)
|
||||
monkeypatch.setattr(main, "event_core", EventCore(test_stores))
|
||||
client = TestClient(main.app)
|
||||
|
||||
health = client.get("/health")
|
||||
backup = client.get("/v2/backup/export")
|
||||
restore = client.post("/v2/backup/restore", json=backup.json())
|
||||
|
||||
assert stores is not None
|
||||
assert health.status_code == 200
|
||||
assert health.json()["version"] == "2.0.0-alpha.7"
|
||||
assert health.json()["version"] == "2.0.0-alpha.8"
|
||||
assert backup.status_code == 200
|
||||
assert restore.status_code == 200
|
||||
assert restore.json() == {"status": "restored"}
|
||||
|
||||
|
||||
def test_dashboard_control_and_learning_endpoints(tmp_path, monkeypatch) -> None: # type: ignore[no-untyped-def]
|
||||
test_stores = FutureStores(tmp_path)
|
||||
test_stores.save_runtime(
|
||||
RuntimeState(
|
||||
entities={
|
||||
"light.storage": EntityState(
|
||||
entity_id="light.storage",
|
||||
domain="light",
|
||||
state="off",
|
||||
),
|
||||
"binary_sensor.storage_door": EntityState(
|
||||
entity_id="binary_sensor.storage_door",
|
||||
domain="binary_sensor",
|
||||
state="off",
|
||||
),
|
||||
}
|
||||
)
|
||||
)
|
||||
monkeypatch.setattr(main, "stores", test_stores)
|
||||
monkeypatch.setattr(main, "event_core", EventCore(test_stores))
|
||||
client = TestClient(main.app)
|
||||
|
||||
entities = client.get("/v2/entities?domain=light,binary_sensor")
|
||||
control = client.post(
|
||||
"/v2/control/light.storage/stage",
|
||||
json={
|
||||
"stage": "dry_run",
|
||||
"min_confidence": 0.75,
|
||||
"manual_block": False,
|
||||
"cooldown_seconds": 120,
|
||||
},
|
||||
)
|
||||
learning = client.post(
|
||||
"/v2/learning/light.storage/patterns",
|
||||
json={
|
||||
"trigger_entity_id": "binary_sensor.storage_door",
|
||||
"trigger_state": "on",
|
||||
"target_state": "on",
|
||||
"confidence": 0.91,
|
||||
},
|
||||
)
|
||||
dashboard = client.get("/v2/dashboard")
|
||||
|
||||
assert entities.status_code == 200
|
||||
assert [item["entity_id"] for item in entities.json()] == [
|
||||
"binary_sensor.storage_door",
|
||||
"light.storage",
|
||||
]
|
||||
assert control.status_code == 200
|
||||
assert control.json()["stage"] == "dry_run"
|
||||
assert learning.status_code == 200
|
||||
assert learning.json()["patterns"][0]["trigger_entity_id"] == "binary_sensor.storage_door"
|
||||
assert dashboard.status_code == 200
|
||||
assert dashboard.json()["actuator_count"] == 1
|
||||
|
||||
Reference in New Issue
Block a user