"""Tests for the Withings calendar.""" from datetime import date, timedelta from http import HTTPStatus from unittest.mock import AsyncMock from freezegun.api import FrozenDateTimeFactory from syrupy.assertion import SnapshotAssertion from homeassistant.core import HomeAssistant from . import load_workout_fixture from tests.common import MockConfigEntry, async_fire_time_changed from tests.components.withings import setup_integration from tests.typing import ClientSessionGenerator async def test_api_calendar( hass: HomeAssistant, snapshot: SnapshotAssertion, withings: AsyncMock, polling_config_entry: MockConfigEntry, hass_client: ClientSessionGenerator, ) -> None: """Test the API returns the calendar.""" await setup_integration(hass, polling_config_entry, False) client = await hass_client() response = await client.get("/api/calendars") assert response.status == HTTPStatus.OK data = await response.json() assert data == snapshot async def test_api_events( hass: HomeAssistant, snapshot: SnapshotAssertion, withings: AsyncMock, polling_config_entry: MockConfigEntry, hass_client: ClientSessionGenerator, ) -> None: """Test the Withings calendar view.""" await setup_integration(hass, polling_config_entry, False) client = await hass_client() response = await client.get( "/api/calendars/calendar.henk_workouts?start=2023-08-01&end=2023-11-01" ) assert withings.get_workouts_in_period.called == 1 assert withings.get_workouts_in_period.call_args_list[1].args == ( date(2023, 8, 1), date(2023, 11, 1), ) assert response.status == HTTPStatus.OK events = await response.json() assert events == snapshot async def test_calendar_created_when_workouts_available( hass: HomeAssistant, withings: AsyncMock, polling_config_entry: MockConfigEntry, hass_client: ClientSessionGenerator, freezer: FrozenDateTimeFactory, ) -> None: """Test the calendar is only created when workouts are available.""" withings.get_workouts_in_period.return_value = [] await setup_integration(hass, polling_config_entry, False) assert hass.states.get("calendar.henk_workouts") is None freezer.tick(timedelta(minutes=10)) async_fire_time_changed(hass) await hass.async_block_till_done() assert hass.states.get("calendar.henk_workouts") is None withings.get_workouts_in_period.return_value = load_workout_fixture() freezer.tick(timedelta(minutes=10)) async_fire_time_changed(hass) await hass.async_block_till_done() assert hass.states.get("calendar.henk_workouts")