mirror of
https://github.com/home-assistant/core.git
synced 2026-06-30 11:16:05 +01:00
e4bb5a9395
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
119 lines
3.6 KiB
Python
119 lines
3.6 KiB
Python
"""Test Environment Canada camera."""
|
|
|
|
from datetime import datetime
|
|
from typing import Any
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from homeassistant.components.environment_canada.camera import SERVICE_SET_RADAR_TYPE
|
|
from homeassistant.components.environment_canada.const import DOMAIN
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.util.dt import UTC
|
|
|
|
from . import init_integration
|
|
|
|
|
|
async def test_camera_entity(hass: HomeAssistant, ec_data: dict[str, Any]) -> None:
|
|
"""Test camera entity setup."""
|
|
await init_integration(hass, ec_data)
|
|
|
|
state = hass.states.get("camera.home_radar")
|
|
# Camera is disabled by default, so state should be None
|
|
assert state is None
|
|
|
|
|
|
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
|
@pytest.mark.parametrize(
|
|
("radar_type", "expected_layer"),
|
|
[
|
|
("Rain", "rain"),
|
|
("Snow", "snow"),
|
|
("Precipitation type", "precip_type"),
|
|
],
|
|
)
|
|
async def test_set_radar_type(
|
|
hass: HomeAssistant,
|
|
ec_data: dict[str, Any],
|
|
radar_type: str,
|
|
expected_layer: str,
|
|
) -> None:
|
|
"""Test setting radar type."""
|
|
config_entry = await init_integration(hass, ec_data)
|
|
radar_coordinator = config_entry.runtime_data.radar_coordinator
|
|
radar_mock = radar_coordinator.ec_data
|
|
|
|
await hass.services.async_call(
|
|
DOMAIN,
|
|
SERVICE_SET_RADAR_TYPE,
|
|
{"entity_id": "camera.home_radar", "radar_type": radar_type},
|
|
blocking=True,
|
|
)
|
|
|
|
assert radar_mock.layer == expected_layer
|
|
radar_mock.update.assert_awaited()
|
|
|
|
|
|
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
|
@pytest.mark.parametrize(
|
|
("month", "expected_layer"),
|
|
[
|
|
(1, "snow"), # January - winter
|
|
(2, "snow"), # February - winter
|
|
(3, "snow"), # March - winter
|
|
(4, "rain"), # April - spring/summer
|
|
(5, "rain"), # May - spring/summer
|
|
(6, "rain"), # June - summer
|
|
(7, "rain"), # July - summer
|
|
(8, "rain"), # August - summer
|
|
(9, "rain"), # September - summer
|
|
(10, "rain"), # October - fall
|
|
(11, "snow"), # November - winter
|
|
(12, "snow"), # December - winter
|
|
],
|
|
)
|
|
async def test_set_radar_type_auto(
|
|
hass: HomeAssistant,
|
|
ec_data: dict[str, Any],
|
|
month: int,
|
|
expected_layer: str,
|
|
) -> None:
|
|
"""Test auto radar type selects rain or snow based on month."""
|
|
config_entry = await init_integration(hass, ec_data)
|
|
radar_coordinator = config_entry.runtime_data.radar_coordinator
|
|
radar_mock = radar_coordinator.ec_data
|
|
|
|
with patch(
|
|
"homeassistant.components.environment_canada.camera.dt_util.now",
|
|
return_value=datetime(2024, month, 15, tzinfo=UTC),
|
|
):
|
|
await hass.services.async_call(
|
|
DOMAIN,
|
|
SERVICE_SET_RADAR_TYPE,
|
|
{"entity_id": "camera.home_radar", "radar_type": "Auto"},
|
|
blocking=True,
|
|
)
|
|
|
|
assert radar_mock.layer == expected_layer
|
|
radar_mock.update.assert_awaited()
|
|
|
|
|
|
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
|
async def test_set_radar_type_clears_cache(
|
|
hass: HomeAssistant, ec_data: dict[str, Any]
|
|
) -> None:
|
|
"""Test that setting radar type clears the cache."""
|
|
config_entry = await init_integration(hass, ec_data)
|
|
radar_coordinator = config_entry.runtime_data.radar_coordinator
|
|
radar_mock = radar_coordinator.ec_data
|
|
|
|
await hass.services.async_call(
|
|
DOMAIN,
|
|
SERVICE_SET_RADAR_TYPE,
|
|
{"entity_id": "camera.home_radar", "radar_type": "Rain"},
|
|
blocking=True,
|
|
)
|
|
|
|
# Verify clear_cache was called on the radar object
|
|
radar_mock.clear_cache.assert_called_once()
|