|
|
@@ -256,44 +256,50 @@ def _api_sensor(coordinator):
|
|
|
return s
|
|
|
|
|
|
|
|
|
+_REAL_CHECKS = {
|
|
|
+ "caldav_connection": {"ok": True},
|
|
|
+ "calendar": {"ok": True},
|
|
|
+ "credentials": {
|
|
|
+ "airbnb": {"ok": True},
|
|
|
+ "booking": {"ok": False},
|
|
|
+ },
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
def test_api_health_ok():
|
|
|
- status = ApiStatusData(status="OK", services={"booking": "OK", "calendar": "OK"})
|
|
|
- coord = _coordinator(api_status=status)
|
|
|
- s = _api_sensor(coord)
|
|
|
- assert s.native_value == "OK"
|
|
|
+ status = ApiStatusData(status="ok", checks=_REAL_CHECKS)
|
|
|
+ assert _api_sensor(_coordinator(api_status=status)).native_value == "OK"
|
|
|
|
|
|
|
|
|
-def test_api_health_degraded_on_warn():
|
|
|
- status = ApiStatusData(status="Warn", services={"booking": "Warn", "calendar": "OK"})
|
|
|
- coord = _coordinator(api_status=status)
|
|
|
- s = _api_sensor(coord)
|
|
|
- assert s.native_value == "Degraded"
|
|
|
+def test_api_health_degraded_on_non_ok_status():
|
|
|
+ status = ApiStatusData(status="error", checks=_REAL_CHECKS)
|
|
|
+ assert _api_sensor(_coordinator(api_status=status)).native_value == "Degraded"
|
|
|
|
|
|
|
|
|
def test_api_health_none_when_no_status():
|
|
|
- coord = _coordinator(api_status=None)
|
|
|
- s = _api_sensor(coord)
|
|
|
- assert s.native_value is None
|
|
|
+ assert _api_sensor(_coordinator(api_status=None)).native_value is None
|
|
|
|
|
|
|
|
|
-def test_api_health_services_as_attributes():
|
|
|
- svc = {"booking": "OK", "calendar": "Warn"}
|
|
|
- status = ApiStatusData(status="Warn", services=svc)
|
|
|
- coord = _coordinator(api_status=status)
|
|
|
- s = _api_sensor(coord)
|
|
|
- assert s.extra_state_attributes == svc
|
|
|
+def test_api_health_attrs_flatten_checks():
|
|
|
+ from datetime import datetime
|
|
|
+ ts = datetime(2026, 6, 23, 8, 0, 0)
|
|
|
+ status = ApiStatusData(status="ok", checks=_REAL_CHECKS, stale=False, checked_at=ts)
|
|
|
+ attrs = _api_sensor(_coordinator(api_status=status)).extra_state_attributes
|
|
|
+ assert attrs["caldav_connection"] is True
|
|
|
+ assert attrs["calendar"] is True
|
|
|
+ assert attrs["airbnb"] is True
|
|
|
+ assert attrs["booking"] is False
|
|
|
+ assert attrs["stale"] is False
|
|
|
+ assert attrs["checked_at"] == ts.isoformat()
|
|
|
|
|
|
|
|
|
-def test_api_health_no_attrs_when_services_empty():
|
|
|
- status = ApiStatusData(status="OK", services={})
|
|
|
- coord = _coordinator(api_status=status)
|
|
|
- s = _api_sensor(coord)
|
|
|
- assert s.extra_state_attributes is None
|
|
|
+def test_api_health_attrs_present_with_empty_checks():
|
|
|
+ status = ApiStatusData(status="ok", checks={}, stale=True)
|
|
|
+ attrs = _api_sensor(_coordinator(api_status=status)).extra_state_attributes
|
|
|
+ assert attrs == {"stale": True, "checked_at": None}
|
|
|
|
|
|
|
|
|
def test_api_health_no_attrs_when_no_status():
|
|
|
- coord = _coordinator(api_status=None)
|
|
|
- s = _api_sensor(coord)
|
|
|
- assert s.extra_state_attributes is None
|
|
|
+ assert _api_sensor(_coordinator(api_status=None)).extra_state_attributes is None
|
|
|
|
|
|
|