Files
core/tests/components/lunatone/test_sensor.py
T

112 lines
3.5 KiB
Python

"""Tests for the lights provided by the Lunatone integration."""
from copy import deepcopy
from datetime import timedelta
from unittest.mock import AsyncMock
from freezegun.api import FrozenDateTimeFactory
from lunatone_rest_api_client.models import LineStatus, SensorData
from syrupy.assertion import SnapshotAssertion
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from . import setup_integration
from tests.common import MockConfigEntry, async_fire_time_changed
async def test_setup(
hass: HomeAssistant,
mock_lunatone_info: AsyncMock,
mock_lunatone_devices: AsyncMock,
mock_lunatone_sensors: AsyncMock,
mock_lunatone_scan: AsyncMock,
mock_config_entry: MockConfigEntry,
entity_registry: er.EntityRegistry,
snapshot: SnapshotAssertion,
) -> None:
"""Test the Lunatone sensor setup."""
await setup_integration(hass, mock_config_entry)
entities = hass.states.async_all(Platform.SENSOR)
for entity_state in entities:
entity_entry = entity_registry.async_get(entity_state.entity_id)
assert entity_entry
assert entity_entry == snapshot(name=f"{entity_entry.entity_id}-entry")
assert entity_state == snapshot(name=f"{entity_entry.entity_id}-state")
async def test_sensor_value_update(
hass: HomeAssistant,
mock_lunatone_info: AsyncMock,
mock_lunatone_devices: AsyncMock,
mock_lunatone_sensors: AsyncMock,
mock_lunatone_scan: AsyncMock,
mock_config_entry: MockConfigEntry,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test the Lunatone sensor value update."""
sensor_values = (22, 55, 20)
await setup_integration(hass, mock_config_entry)
async def fake_update():
for i, sensor_value in enumerate(sensor_values):
sensor: SensorData = mock_lunatone_sensors.data.sensors[i]
sensor.value = sensor_value
mock_lunatone_sensors.async_update.side_effect = fake_update
entities = hass.states.async_all(Platform.SENSOR)
assert entities[0].state == "unknown"
assert entities[1].state == "unknown"
assert entities[2].state == "unknown"
freezer.tick(timedelta(seconds=40))
async_fire_time_changed(hass)
await hass.async_block_till_done()
entities = hass.states.async_all(Platform.SENSOR)
assert entities[0].state == "22"
assert entities[1].state == "55"
assert entities[2].state == "20"
async def test_dali_line_status_value_update(
hass: HomeAssistant,
mock_lunatone_info: AsyncMock,
mock_lunatone_devices: AsyncMock,
mock_lunatone_sensors: AsyncMock,
mock_lunatone_scan: AsyncMock,
mock_config_entry: MockConfigEntry,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test the Lunatone sensor value update."""
line_id = 0
entity_id = f"sensor.dali_line_{line_id}_status"
line_statuses = iter((LineStatus.NO_POWER, LineStatus.OK))
async def fake_update() -> None:
info_data = deepcopy(mock_lunatone_info.data)
info_data.lines[str(line_id)].line_status = next(line_statuses)
mock_lunatone_info.data = info_data
mock_lunatone_info.async_update.side_effect = fake_update
await setup_integration(hass, mock_config_entry)
entity = hass.states.get(entity_id)
assert entity
assert entity.state == "no_power"
freezer.tick(timedelta(seconds=60))
async_fire_time_changed(hass)
await hass.async_block_till_done()
entity = hass.states.get(entity_id)
assert entity
assert entity.state == "ok"