mirror of https://github.com/home-assistant/core
70 lines
1.9 KiB
Python
70 lines
1.9 KiB
Python
"""Test Dynalite switch."""
|
|
|
|
from unittest.mock import Mock
|
|
|
|
from dynalite_devices_lib.switch import DynalitePresetSwitchDevice
|
|
import pytest
|
|
|
|
from homeassistant.const import ATTR_FRIENDLY_NAME, STATE_OFF, STATE_ON
|
|
from homeassistant.core import HomeAssistant, State
|
|
|
|
from .common import (
|
|
ATTR_METHOD,
|
|
ATTR_SERVICE,
|
|
create_entity_from_device,
|
|
create_mock_device,
|
|
run_service_tests,
|
|
)
|
|
|
|
from tests.common import mock_restore_cache
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_device():
|
|
"""Mock a Dynalite device."""
|
|
mock_dev = create_mock_device("switch", DynalitePresetSwitchDevice)
|
|
mock_dev.is_on = False
|
|
|
|
def mock_init_level(level):
|
|
mock_dev.is_on = level
|
|
|
|
type(mock_dev).init_level = Mock(side_effect=mock_init_level)
|
|
return mock_dev
|
|
|
|
|
|
async def test_switch_setup(hass: HomeAssistant, mock_device) -> None:
|
|
"""Test a successful setup."""
|
|
await create_entity_from_device(hass, mock_device)
|
|
entity_state = hass.states.get("switch.name")
|
|
assert entity_state.attributes[ATTR_FRIENDLY_NAME] == mock_device.name
|
|
assert entity_state.state == STATE_OFF
|
|
await run_service_tests(
|
|
hass,
|
|
mock_device,
|
|
"switch",
|
|
[
|
|
{ATTR_SERVICE: "turn_on", ATTR_METHOD: "async_turn_on"},
|
|
{ATTR_SERVICE: "turn_off", ATTR_METHOD: "async_turn_off"},
|
|
],
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize(("saved_state", "level"), [(STATE_ON, 1), (STATE_OFF, 0)])
|
|
async def test_switch_restore_state(
|
|
hass: HomeAssistant, mock_device, saved_state, level
|
|
) -> None:
|
|
"""Test restore from cache."""
|
|
mock_restore_cache(
|
|
hass,
|
|
[
|
|
State(
|
|
"switch.name",
|
|
saved_state,
|
|
)
|
|
],
|
|
)
|
|
await create_entity_from_device(hass, mock_device)
|
|
mock_device.init_level.assert_called_once_with(level)
|
|
entity_state = hass.states.get("switch.name")
|
|
assert entity_state.state == saved_state
|