core/tests/components/bosch_alarm/test_switch.py

148 lines
4.5 KiB
Python

"""Tests for Bosch Alarm component."""
from collections.abc import AsyncGenerator
from unittest.mock import AsyncMock, patch
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN
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.helpers import entity_registry as er
from . import call_observable, setup_integration
from tests.common import MockConfigEntry, snapshot_platform
@pytest.fixture(autouse=True)
async def platforms() -> AsyncGenerator[None]:
"""Return the platforms to be loaded for this test."""
with patch("homeassistant.components.bosch_alarm.PLATFORMS", [Platform.SWITCH]):
yield
async def test_update_switch_device(
hass: HomeAssistant,
mock_panel: AsyncMock,
output: AsyncMock,
mock_config_entry: MockConfigEntry,
) -> None:
"""Test that output state changes after turning on the output."""
await setup_integration(hass, mock_config_entry)
entity_id = "switch.output_a"
assert hass.states.get(entity_id).state == STATE_OFF
await hass.services.async_call(
SWITCH_DOMAIN,
SERVICE_TURN_ON,
{ATTR_ENTITY_ID: entity_id},
blocking=True,
)
output.is_active.return_value = True
await call_observable(hass, output.status_observer)
assert hass.states.get(entity_id).state == STATE_ON
async def test_unlock_door(
hass: HomeAssistant,
mock_panel: AsyncMock,
door: AsyncMock,
mock_config_entry: MockConfigEntry,
) -> None:
"""Test that door state changes after unlocking the door."""
await setup_integration(hass, mock_config_entry)
entity_id = "switch.main_door_locked"
assert hass.states.get(entity_id).state == STATE_ON
await hass.services.async_call(
SWITCH_DOMAIN,
SERVICE_TURN_OFF,
{ATTR_ENTITY_ID: entity_id},
blocking=True,
)
door.is_locked.return_value = False
door.is_open.return_value = True
await call_observable(hass, door.status_observer)
assert hass.states.get(entity_id).state == STATE_OFF
await hass.services.async_call(
SWITCH_DOMAIN,
SERVICE_TURN_ON,
{ATTR_ENTITY_ID: entity_id},
blocking=True,
)
door.is_locked.return_value = True
door.is_open.return_value = False
await call_observable(hass, door.status_observer)
assert hass.states.get(entity_id).state == STATE_ON
async def test_secure_door(
hass: HomeAssistant,
mock_panel: AsyncMock,
door: AsyncMock,
mock_config_entry: MockConfigEntry,
) -> None:
"""Test that door state changes after unlocking the door."""
await setup_integration(hass, mock_config_entry)
entity_id = "switch.main_door_secured"
assert hass.states.get(entity_id).state == STATE_OFF
await hass.services.async_call(
SWITCH_DOMAIN,
SERVICE_TURN_ON,
{ATTR_ENTITY_ID: entity_id},
blocking=True,
)
door.is_secured.return_value = True
await call_observable(hass, door.status_observer)
assert hass.states.get(entity_id).state == STATE_ON
await hass.services.async_call(
SWITCH_DOMAIN,
SERVICE_TURN_OFF,
{ATTR_ENTITY_ID: entity_id},
blocking=True,
)
door.is_secured.return_value = False
await call_observable(hass, door.status_observer)
assert hass.states.get(entity_id).state == STATE_OFF
async def test_cycle_door(
hass: HomeAssistant,
mock_panel: AsyncMock,
door: AsyncMock,
mock_config_entry: MockConfigEntry,
) -> None:
"""Test that door state changes after unlocking the door."""
await setup_integration(hass, mock_config_entry)
entity_id = "switch.main_door_momentarily_unlocked"
assert hass.states.get(entity_id).state == STATE_OFF
await hass.services.async_call(
SWITCH_DOMAIN,
SERVICE_TURN_ON,
{ATTR_ENTITY_ID: entity_id},
blocking=True,
)
door.is_cycling.return_value = True
await call_observable(hass, door.status_observer)
assert hass.states.get(entity_id).state == STATE_ON
async def test_switch(
hass: HomeAssistant,
entity_registry: er.EntityRegistry,
snapshot: SnapshotAssertion,
mock_panel: AsyncMock,
mock_config_entry: MockConfigEntry,
) -> None:
"""Test the switch state."""
await setup_integration(hass, mock_config_entry)
await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id)