|
@@ -9,7 +9,6 @@ from pytest_homeassistant_custom_component.common import MockConfigEntry
|
|
|
from custom_components.room_cal_ha.backends import BackendAuthError, BackendConnectError
|
|
from custom_components.room_cal_ha.backends import BackendAuthError, BackendConnectError
|
|
|
from custom_components.room_cal_ha.const import (
|
|
from custom_components.room_cal_ha.const import (
|
|
|
CONF_API_BASE_URL,
|
|
CONF_API_BASE_URL,
|
|
|
- CONF_API_TOKEN,
|
|
|
|
|
CONF_CALDAV_URL,
|
|
CONF_CALDAV_URL,
|
|
|
CONF_CALENDAR_NAME,
|
|
CONF_CALENDAR_NAME,
|
|
|
CONF_SYNC_MODE,
|
|
CONF_SYNC_MODE,
|
|
@@ -21,7 +20,7 @@ from custom_components.room_cal_ha.const import (
|
|
|
SYNC_MODE_MANUAL,
|
|
SYNC_MODE_MANUAL,
|
|
|
)
|
|
)
|
|
|
from custom_components.room_cal_ha.coordinator import RoomCalCoordinator
|
|
from custom_components.room_cal_ha.coordinator import RoomCalCoordinator
|
|
|
-from custom_components.room_cal_ha.models import ApiStatusData, OverrideData, ReservationData
|
|
|
|
|
|
|
+from custom_components.room_cal_ha.models import OverrideData, ReservationData
|
|
|
|
|
|
|
|
|
|
|
|
|
SAMPLE = ReservationData(
|
|
SAMPLE = ReservationData(
|
|
@@ -65,7 +64,6 @@ async def test_manual_mode_serves_empty(coordinator: RoomCalCoordinator):
|
|
|
assert coordinator.data.next == ReservationData()
|
|
assert coordinator.data.next == ReservationData()
|
|
|
assert coordinator.data.current_last_refresh is None
|
|
assert coordinator.data.current_last_refresh is None
|
|
|
assert coordinator.data.next_last_refresh is None
|
|
assert coordinator.data.next_last_refresh is None
|
|
|
- assert coordinator.data.api_status is None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# ---------------------------------------------------------------------------
|
|
@@ -135,13 +133,7 @@ async def test_caldav_auth_error_triggers_reauth(hass: HomeAssistant):
|
|
|
# API mode
|
|
# API mode
|
|
|
# ---------------------------------------------------------------------------
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
-SAMPLE_STATUS = ApiStatusData(
|
|
|
|
|
- status="ok",
|
|
|
|
|
- checks={"caldav_connection": {"ok": True}, "calendar": {"ok": True}},
|
|
|
|
|
-)
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-async def test_api_fetch_writes_store_and_status(hass: HomeAssistant):
|
|
|
|
|
|
|
+async def test_api_fetch_writes_store(hass: HomeAssistant):
|
|
|
entry = _make_entry(hass, {CONF_SYNC_MODE: SYNC_MODE_API, CONF_API_BASE_URL: "https://api.example.com"})
|
|
entry = _make_entry(hass, {CONF_SYNC_MODE: SYNC_MODE_API, CONF_API_BASE_URL: "https://api.example.com"})
|
|
|
coord = RoomCalCoordinator(hass, entry)
|
|
coord = RoomCalCoordinator(hass, entry)
|
|
|
await coord.async_setup()
|
|
await coord.async_setup()
|
|
@@ -149,32 +141,25 @@ async def test_api_fetch_writes_store_and_status(hass: HomeAssistant):
|
|
|
with patch("custom_components.room_cal_ha.coordinator.RoomCalApiBackend") as MockBackend:
|
|
with patch("custom_components.room_cal_ha.coordinator.RoomCalApiBackend") as MockBackend:
|
|
|
instance = MockBackend.return_value
|
|
instance = MockBackend.return_value
|
|
|
instance.async_fetch = AsyncMock(return_value=(SAMPLE, None))
|
|
instance.async_fetch = AsyncMock(return_value=(SAMPLE, None))
|
|
|
- instance.async_fetch_status = AsyncMock(return_value=SAMPLE_STATUS)
|
|
|
|
|
- instance.async_fetch_services = AsyncMock(return_value={})
|
|
|
|
|
await coord.async_refresh()
|
|
await coord.async_refresh()
|
|
|
|
|
|
|
|
assert coord.data.current.guest_name == "Alice"
|
|
assert coord.data.current.guest_name == "Alice"
|
|
|
- assert coord.data.api_status.status == "ok"
|
|
|
|
|
assert coord.data.current_last_refresh is not None
|
|
assert coord.data.current_last_refresh is not None
|
|
|
|
|
|
|
|
|
|
|
|
|
-async def test_api_connect_error_preserves_store_and_still_fetches_status(hass: HomeAssistant):
|
|
|
|
|
|
|
+async def test_api_connect_error_preserves_store(hass: HomeAssistant):
|
|
|
entry = _make_entry(hass, {CONF_SYNC_MODE: SYNC_MODE_API, CONF_API_BASE_URL: "https://api.example.com"})
|
|
entry = _make_entry(hass, {CONF_SYNC_MODE: SYNC_MODE_API, CONF_API_BASE_URL: "https://api.example.com"})
|
|
|
coord = RoomCalCoordinator(hass, entry)
|
|
coord = RoomCalCoordinator(hass, entry)
|
|
|
await coord.async_setup()
|
|
await coord.async_setup()
|
|
|
await coord.store.async_set(STORE_CURRENT, SAMPLE)
|
|
await coord.store.async_set(STORE_CURRENT, SAMPLE)
|
|
|
|
|
|
|
|
- degraded = ApiStatusData(status="error")
|
|
|
|
|
with patch("custom_components.room_cal_ha.coordinator.RoomCalApiBackend") as MockBackend:
|
|
with patch("custom_components.room_cal_ha.coordinator.RoomCalApiBackend") as MockBackend:
|
|
|
instance = MockBackend.return_value
|
|
instance = MockBackend.return_value
|
|
|
instance.async_fetch = AsyncMock(side_effect=BackendConnectError("timeout"))
|
|
instance.async_fetch = AsyncMock(side_effect=BackendConnectError("timeout"))
|
|
|
- instance.async_fetch_status = AsyncMock(return_value=degraded)
|
|
|
|
|
- instance.async_fetch_services = AsyncMock(return_value={})
|
|
|
|
|
await coord.async_refresh()
|
|
await coord.async_refresh()
|
|
|
|
|
|
|
|
assert coord.data.current.guest_name == "Alice"
|
|
assert coord.data.current.guest_name == "Alice"
|
|
|
assert coord.data.current_last_refresh is None
|
|
assert coord.data.current_last_refresh is None
|
|
|
- assert coord.data.api_status.status == "error"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def test_api_auth_error_triggers_reauth(hass: HomeAssistant):
|
|
async def test_api_auth_error_triggers_reauth(hass: HomeAssistant):
|
|
@@ -188,8 +173,6 @@ async def test_api_auth_error_triggers_reauth(hass: HomeAssistant):
|
|
|
):
|
|
):
|
|
|
instance = MockBackend.return_value
|
|
instance = MockBackend.return_value
|
|
|
instance.async_fetch = AsyncMock(side_effect=BackendAuthError)
|
|
instance.async_fetch = AsyncMock(side_effect=BackendAuthError)
|
|
|
- instance.async_fetch_status = AsyncMock(return_value=ApiStatusData(status="auth_error"))
|
|
|
|
|
- instance.async_fetch_services = AsyncMock(return_value={})
|
|
|
|
|
await coord.async_refresh()
|
|
await coord.async_refresh()
|
|
|
|
|
|
|
|
mock_reauth.assert_called_once_with(hass)
|
|
mock_reauth.assert_called_once_with(hass)
|