1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-25 05:26:47 +00:00
Files
core/tests/components/workday/test_calendar.py
2025-10-02 22:17:11 +02:00

93 lines
2.9 KiB
Python

"""Tests for calendar platform of Workday integration."""
from datetime import datetime, timedelta
from freezegun.api import FrozenDateTimeFactory
import pytest
from homeassistant.components.calendar import (
DOMAIN as CALENDAR_DOMAIN,
EVENT_END_DATETIME,
EVENT_START_DATETIME,
EVENT_SUMMARY,
SERVICE_GET_EVENTS,
)
from homeassistant.const import ATTR_ENTITY_ID
from homeassistant.core import HomeAssistant
from homeassistant.util import dt as dt_util
from . import TEST_CONFIG_WITH_PROVINCE, init_integration
from tests.common import async_fire_time_changed
ATTR_END = "end"
ATTR_START = "start"
@pytest.mark.parametrize(
"time_zone", ["Asia/Tokyo", "Europe/Berlin", "America/Chicago", "US/Hawaii"]
)
async def test_holiday_calendar_entity(
hass: HomeAssistant,
freezer: FrozenDateTimeFactory,
time_zone: str,
) -> None:
"""Test HolidayCalendarEntity functionality."""
await hass.config.async_set_time_zone(time_zone)
zone = await dt_util.async_get_time_zone(time_zone)
freezer.move_to(datetime(2023, 1, 1, 0, 1, 1, tzinfo=zone)) # New Years Day
await init_integration(hass, TEST_CONFIG_WITH_PROVINCE)
response = await hass.services.async_call(
CALENDAR_DOMAIN,
SERVICE_GET_EVENTS,
{
ATTR_ENTITY_ID: "calendar.workday_sensor_calendar",
EVENT_START_DATETIME: dt_util.now(),
EVENT_END_DATETIME: dt_util.now() + timedelta(days=10, hours=1),
},
blocking=True,
return_response=True,
)
assert {
ATTR_END: "2023-01-02",
ATTR_START: "2023-01-01",
EVENT_SUMMARY: "Workday Sensor",
} not in response["calendar.workday_sensor_calendar"]["events"]
assert {
ATTR_END: "2023-01-04",
ATTR_START: "2023-01-03",
EVENT_SUMMARY: "Workday Sensor",
} in response["calendar.workday_sensor_calendar"]["events"]
state = hass.states.get("calendar.workday_sensor_calendar")
assert state is not None
assert state.state == "off"
freezer.move_to(
datetime(2023, 1, 2, 0, 1, 1, tzinfo=zone)
) # Day after New Years Day
async_fire_time_changed(hass)
await hass.async_block_till_done()
# Binary sensor added to ensure same state for both entities
state = hass.states.get("binary_sensor.workday_sensor")
assert state is not None
assert state.state == "on"
state = hass.states.get("calendar.workday_sensor_calendar")
assert state is not None
assert state.state == "on"
freezer.move_to(datetime(2023, 1, 7, 0, 1, 1, tzinfo=zone)) # Workday
async_fire_time_changed(hass)
await hass.async_block_till_done()
state = hass.states.get("binary_sensor.workday_sensor")
assert state is not None
assert state.state == "off"
state = hass.states.get("calendar.workday_sensor_calendar")
assert state is not None
assert state.state == "off"