1
0
mirror of https://github.com/home-assistant/core.git synced 2026-06-02 13:44:32 +01:00
Files
core/tests/components/sensibo/test_switch.py
T
2026-05-19 20:53:26 +02:00

281 lines
7.5 KiB
Python

"""The test for the sensibo switch platform."""
from datetime import timedelta
from unittest.mock import MagicMock
from freezegun.api import FrozenDateTimeFactory
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
ATTR_ENTITY_ID,
SERVICE_TURN_OFF,
SERVICE_TURN_ON,
STATE_OFF,
STATE_ON,
Platform,
)
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import entity_registry as er
from tests.common import async_fire_time_changed, snapshot_platform
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
@pytest.mark.parametrize(
"load_platforms",
[[Platform.SWITCH]],
)
async def test_switch(
hass: HomeAssistant,
load_int: ConfigEntry,
entity_registry: er.EntityRegistry,
snapshot: SnapshotAssertion,
) -> None:
"""Test the Sensibo switch."""
await snapshot_platform(hass, entity_registry, snapshot, load_int.entry_id)
async def test_switch_timer(
hass: HomeAssistant,
load_int: ConfigEntry,
mock_client: MagicMock,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test the Sensibo switch timer."""
state = hass.states.get("switch.hallway_hallway_timer")
assert state.state == STATE_OFF
assert state.attributes["id"] is None
assert state.attributes["turn_on"] is None
mock_client.async_set_timer.return_value = {
"status": "success",
"result": {"id": "SzTGE4oZ4D"},
}
await hass.services.async_call(
SWITCH_DOMAIN,
SERVICE_TURN_ON,
{
ATTR_ENTITY_ID: state.entity_id,
},
blocking=True,
)
mock_client.async_get_devices_data.return_value.parsed["ABC999111"].timer_on = True
mock_client.async_get_devices_data.return_value.parsed[
"ABC999111"
].timer_id = "SzTGE4oZ4D"
mock_client.async_get_devices_data.return_value.parsed[
"ABC999111"
].timer_state_on = False
freezer.tick(timedelta(minutes=5))
async_fire_time_changed(hass)
await hass.async_block_till_done()
state = hass.states.get("switch.hallway_hallway_timer")
assert state.state == STATE_ON
assert state.attributes["id"] == "SzTGE4oZ4D"
assert state.attributes["turn_on"] is False
mock_client.async_del_timer.return_value = {
"status": "success",
"result": {"id": "SzTGE4oZ4D"},
}
await hass.services.async_call(
SWITCH_DOMAIN,
SERVICE_TURN_OFF,
{
ATTR_ENTITY_ID: state.entity_id,
},
blocking=True,
)
mock_client.async_get_devices_data.return_value.parsed["ABC999111"].timer_on = False
freezer.tick(timedelta(minutes=5))
async_fire_time_changed(hass)
await hass.async_block_till_done()
state = hass.states.get("switch.hallway_hallway_timer")
assert state.state == STATE_OFF
async def test_switch_pure_boost(
hass: HomeAssistant,
load_int: ConfigEntry,
mock_client: MagicMock,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test the Sensibo switch pure boost."""
state = hass.states.get("switch.kitchen_kitchen_pure_boost")
assert state.state == STATE_OFF
mock_client.async_set_pureboost.return_value = {"status": "success"}
await hass.services.async_call(
SWITCH_DOMAIN,
SERVICE_TURN_ON,
{
ATTR_ENTITY_ID: state.entity_id,
},
blocking=True,
)
mock_client.async_get_devices_data.return_value.parsed[
"AAZZAAZZ"
].pure_boost_enabled = True
mock_client.async_get_devices_data.return_value.parsed[
"AAZZAAZZ"
].pure_measure_integration = None
freezer.tick(timedelta(minutes=5))
async_fire_time_changed(hass)
await hass.async_block_till_done()
state = hass.states.get("switch.kitchen_kitchen_pure_boost")
assert state.state == STATE_ON
await hass.services.async_call(
SWITCH_DOMAIN,
SERVICE_TURN_OFF,
{
ATTR_ENTITY_ID: state.entity_id,
},
blocking=True,
)
mock_client.async_get_devices_data.return_value.parsed[
"AAZZAAZZ"
].pure_boost_enabled = False
freezer.tick(timedelta(minutes=5))
async_fire_time_changed(hass)
await hass.async_block_till_done()
state = hass.states.get("switch.kitchen_kitchen_pure_boost")
assert state.state == STATE_OFF
async def test_switch_command_failure(
hass: HomeAssistant, load_int: ConfigEntry, mock_client: MagicMock
) -> None:
"""Test the Sensibo switch fails commands."""
state = hass.states.get("switch.hallway_hallway_timer")
mock_client.async_set_timer.return_value = {"status": "failure"}
with pytest.raises(
HomeAssistantError,
):
await hass.services.async_call(
SWITCH_DOMAIN,
SERVICE_TURN_ON,
{
ATTR_ENTITY_ID: state.entity_id,
},
blocking=True,
)
mock_client.async_del_timer.return_value = {"status": "failure"}
with pytest.raises(
HomeAssistantError,
):
await hass.services.async_call(
SWITCH_DOMAIN,
SERVICE_TURN_OFF,
{
ATTR_ENTITY_ID: state.entity_id,
},
blocking=True,
)
async def test_switch_climate_react(
hass: HomeAssistant,
load_int: ConfigEntry,
mock_client: MagicMock,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test the Sensibo switch for climate react."""
state = hass.states.get("switch.hallway_hallway_climate_react")
assert state.state == STATE_OFF
mock_client.async_enable_climate_react.return_value = {"status": "success"}
await hass.services.async_call(
SWITCH_DOMAIN,
SERVICE_TURN_ON,
{
ATTR_ENTITY_ID: state.entity_id,
},
blocking=True,
)
mock_client.async_get_devices_data.return_value.parsed["ABC999111"].smart_on = True
freezer.tick(timedelta(minutes=5))
async_fire_time_changed(hass)
await hass.async_block_till_done()
state = hass.states.get("switch.hallway_hallway_climate_react")
assert state.state == STATE_ON
await hass.services.async_call(
SWITCH_DOMAIN,
SERVICE_TURN_OFF,
{
ATTR_ENTITY_ID: state.entity_id,
},
blocking=True,
)
mock_client.async_get_devices_data.return_value.parsed["ABC999111"].smart_on = False
freezer.tick(timedelta(minutes=5))
async_fire_time_changed(hass)
await hass.async_block_till_done()
state = hass.states.get("switch.hallway_hallway_climate_react")
assert state.state == STATE_OFF
async def test_switch_climate_react_no_data(
hass: HomeAssistant,
load_int: ConfigEntry,
mock_client: MagicMock,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test the Sensibo switch for climate react with no data."""
mock_client.async_get_devices_data.return_value.parsed[
"ABC999111"
].smart_type = None
freezer.tick(timedelta(minutes=5))
async_fire_time_changed(hass)
await hass.async_block_till_done()
state = hass.states.get("switch.hallway_hallway_climate_react")
assert state.state == STATE_OFF
with pytest.raises(HomeAssistantError):
await hass.services.async_call(
SWITCH_DOMAIN,
SERVICE_TURN_ON,
{
ATTR_ENTITY_ID: state.entity_id,
},
blocking=True,
)