core/tests/components/nexia/test_switch.py

75 lines
2.6 KiB
Python

"""The switch tests for the nexia platform."""
from freezegun.api import FrozenDateTimeFactory
from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN
from homeassistant.const import (
ATTR_ENTITY_ID,
EVENT_HOMEASSISTANT_STOP,
SERVICE_TURN_OFF,
SERVICE_TURN_ON,
STATE_OFF,
STATE_ON,
Platform,
)
from homeassistant.core import HomeAssistant
from .util import async_init_integration
from tests.common import async_fire_time_changed
async def test_hold_switch(hass: HomeAssistant) -> None:
"""Test creation of the hold switch."""
await async_init_integration(hass)
assert hass.states.get("switch.nick_office_hold").state == STATE_ON
async def test_nexia_sensor_switch(
hass: HomeAssistant, freezer: FrozenDateTimeFactory
) -> None:
"""Test NexiaRoomIQSensorSwitch."""
await async_init_integration(hass, house_fixture="sensors_xl1050_house.json")
sw1_id = f"{Platform.SWITCH}.center_nativezone_include_center"
sw1 = {ATTR_ENTITY_ID: sw1_id}
sw2_id = f"{Platform.SWITCH}.center_nativezone_include_upstairs"
sw2 = {ATTR_ENTITY_ID: sw2_id}
# Switch starts out on.
assert (entity_state := hass.states.get(sw1_id)) is not None
assert entity_state.state == STATE_ON
# Turn switch off.
await hass.services.async_call(SWITCH_DOMAIN, SERVICE_TURN_OFF, sw1, blocking=True)
assert hass.states.get(sw1_id).state == STATE_OFF
# Turn switch back on.
await hass.services.async_call(SWITCH_DOMAIN, SERVICE_TURN_ON, sw1, blocking=True)
assert hass.states.get(sw1_id).state == STATE_ON
# The other switch also starts out on.
assert (entity_state := hass.states.get(sw2_id)) is not None
assert entity_state.state == STATE_ON
# Turn both switches off, an invalid combination.
await hass.services.async_call(SWITCH_DOMAIN, SERVICE_TURN_OFF, sw1, blocking=True)
await hass.services.async_call(SWITCH_DOMAIN, SERVICE_TURN_OFF, sw2, blocking=True)
assert hass.states.get(sw1_id).state == STATE_OFF
assert hass.states.get(sw2_id).state == STATE_OFF
# Wait for switches to revert to device status.
freezer.tick(6)
async_fire_time_changed(hass)
await hass.async_block_till_done()
assert hass.states.get(sw1_id).state == STATE_ON
assert hass.states.get(sw2_id).state == STATE_ON
# Turn switch off.
await hass.services.async_call(SWITCH_DOMAIN, SERVICE_TURN_OFF, sw2, blocking=True)
assert hass.states.get(sw2_id).state == STATE_OFF
# Exercise shutdown path.
hass.bus.async_fire(EVENT_HOMEASSISTANT_STOP)
await hass.async_block_till_done()
assert hass.states.get(sw2_id).state == STATE_ON