2019-04-19 21:54:48 +00:00
|
|
|
"""Test cases for the switcher_kis component."""
|
2024-03-08 13:47:22 +00:00
|
|
|
|
2019-06-14 22:48:21 +00:00
|
|
|
from datetime import timedelta
|
2019-04-19 21:54:48 +00:00
|
|
|
|
2021-07-19 13:28:40 +00:00
|
|
|
import pytest
|
2019-06-14 22:48:21 +00:00
|
|
|
|
2024-05-25 10:17:33 +00:00
|
|
|
from homeassistant.components.switcher_kis.const import MAX_UPDATE_INTERVAL_SEC
|
2021-07-19 13:28:40 +00:00
|
|
|
from homeassistant.config_entries import ConfigEntryState
|
|
|
|
from homeassistant.const import STATE_UNAVAILABLE
|
2023-02-16 10:15:26 +00:00
|
|
|
from homeassistant.core import HomeAssistant
|
2023-05-29 21:09:42 +00:00
|
|
|
from homeassistant.util import dt as dt_util, slugify
|
2019-04-19 21:54:48 +00:00
|
|
|
|
2021-07-19 13:28:40 +00:00
|
|
|
from . import init_integration
|
2024-05-23 19:12:19 +00:00
|
|
|
from .consts import DUMMY_SWITCHER_DEVICES
|
2019-04-19 21:54:48 +00:00
|
|
|
|
2021-07-19 13:28:40 +00:00
|
|
|
from tests.common import async_fire_time_changed
|
2019-04-19 21:54:48 +00:00
|
|
|
|
|
|
|
|
2023-02-16 10:15:26 +00:00
|
|
|
async def test_update_fail(
|
|
|
|
hass: HomeAssistant, mock_bridge, caplog: pytest.LogCaptureFixture
|
|
|
|
) -> None:
|
2021-07-19 13:28:40 +00:00
|
|
|
"""Test entities state unavailable when updates fail.."""
|
2024-05-25 10:17:33 +00:00
|
|
|
entry = await init_integration(hass)
|
2021-07-19 13:28:40 +00:00
|
|
|
assert mock_bridge
|
2019-06-14 22:48:21 +00:00
|
|
|
|
2021-07-19 13:28:40 +00:00
|
|
|
mock_bridge.mock_callbacks(DUMMY_SWITCHER_DEVICES)
|
|
|
|
await hass.async_block_till_done()
|
2019-06-14 22:48:21 +00:00
|
|
|
|
2021-07-19 13:28:40 +00:00
|
|
|
assert mock_bridge.is_running is True
|
2024-05-25 10:17:33 +00:00
|
|
|
assert len(entry.runtime_data) == 2
|
2019-06-14 22:48:21 +00:00
|
|
|
|
2021-07-19 13:28:40 +00:00
|
|
|
async_fire_time_changed(
|
2023-05-29 21:09:42 +00:00
|
|
|
hass, dt_util.utcnow() + timedelta(seconds=MAX_UPDATE_INTERVAL_SEC + 1)
|
2021-07-19 13:28:40 +00:00
|
|
|
)
|
|
|
|
await hass.async_block_till_done()
|
2021-01-16 17:18:40 +00:00
|
|
|
|
2021-07-19 13:28:40 +00:00
|
|
|
for device in DUMMY_SWITCHER_DEVICES:
|
|
|
|
assert (
|
|
|
|
f"Device {device.name} did not send update for {MAX_UPDATE_INTERVAL_SEC} seconds"
|
|
|
|
in caplog.text
|
2021-01-16 17:18:40 +00:00
|
|
|
)
|
|
|
|
|
2021-07-19 13:28:40 +00:00
|
|
|
entity_id = f"switch.{slugify(device.name)}"
|
|
|
|
state = hass.states.get(entity_id)
|
|
|
|
assert state.state == STATE_UNAVAILABLE
|
2021-01-16 17:18:40 +00:00
|
|
|
|
2023-08-28 17:53:42 +00:00
|
|
|
entity_id = f"sensor.{slugify(device.name)}_power"
|
2021-07-19 13:28:40 +00:00
|
|
|
state = hass.states.get(entity_id)
|
|
|
|
assert state.state == STATE_UNAVAILABLE
|
2021-01-16 17:18:40 +00:00
|
|
|
|
2021-07-19 13:28:40 +00:00
|
|
|
mock_bridge.mock_callbacks(DUMMY_SWITCHER_DEVICES)
|
2021-01-16 17:18:40 +00:00
|
|
|
await hass.async_block_till_done()
|
2021-07-19 13:28:40 +00:00
|
|
|
async_fire_time_changed(
|
2024-02-27 20:32:40 +00:00
|
|
|
hass, dt_util.utcnow() + timedelta(seconds=MAX_UPDATE_INTERVAL_SEC - 2)
|
2021-01-16 17:18:40 +00:00
|
|
|
)
|
2024-02-27 04:31:08 +00:00
|
|
|
await hass.async_block_till_done()
|
2019-06-14 22:48:21 +00:00
|
|
|
|
2021-07-19 13:28:40 +00:00
|
|
|
for device in DUMMY_SWITCHER_DEVICES:
|
|
|
|
entity_id = f"switch.{slugify(device.name)}"
|
|
|
|
state = hass.states.get(entity_id)
|
|
|
|
assert state.state != STATE_UNAVAILABLE
|
2019-06-14 22:48:21 +00:00
|
|
|
|
2023-08-28 17:53:42 +00:00
|
|
|
entity_id = f"sensor.{slugify(device.name)}_power"
|
2021-07-19 13:28:40 +00:00
|
|
|
state = hass.states.get(entity_id)
|
|
|
|
assert state.state != STATE_UNAVAILABLE
|
2019-06-14 22:48:21 +00:00
|
|
|
|
|
|
|
|
2023-02-16 10:15:26 +00:00
|
|
|
async def test_entry_unload(hass: HomeAssistant, mock_bridge) -> None:
|
2021-07-19 13:28:40 +00:00
|
|
|
"""Test entry unload."""
|
|
|
|
entry = await init_integration(hass)
|
|
|
|
assert mock_bridge
|
2019-06-14 22:48:21 +00:00
|
|
|
|
2021-07-19 13:28:40 +00:00
|
|
|
assert entry.state is ConfigEntryState.LOADED
|
|
|
|
assert mock_bridge.is_running is True
|
2019-06-14 22:48:21 +00:00
|
|
|
|
2021-07-19 13:28:40 +00:00
|
|
|
await hass.config_entries.async_unload(entry.entry_id)
|
2019-06-14 22:48:21 +00:00
|
|
|
await hass.async_block_till_done()
|
|
|
|
|
2021-07-19 13:28:40 +00:00
|
|
|
assert entry.state is ConfigEntryState.NOT_LOADED
|
|
|
|
assert mock_bridge.is_running is False
|