92 lines
2.6 KiB
Python
92 lines
2.6 KiB
Python
"""Common test tools."""
|
|
from __future__ import annotations
|
|
|
|
from unittest.mock import patch
|
|
|
|
from freezegun import freeze_time
|
|
import pytest
|
|
|
|
from homeassistant.components import rfxtrx
|
|
from homeassistant.components.rfxtrx import DOMAIN
|
|
from homeassistant.util.dt import utcnow
|
|
|
|
from tests.common import MockConfigEntry, async_fire_time_changed
|
|
from tests.components.light.conftest import mock_light_profiles # noqa: F401
|
|
|
|
|
|
def create_rfx_test_cfg(
|
|
device="abcd", automatic_add=False, protocols=None, devices=None
|
|
):
|
|
"""Create rfxtrx config entry data."""
|
|
return {
|
|
"device": device,
|
|
"host": None,
|
|
"port": None,
|
|
"automatic_add": automatic_add,
|
|
"protocols": protocols,
|
|
"debug": False,
|
|
"devices": devices,
|
|
}
|
|
|
|
|
|
async def setup_rfx_test_cfg(
|
|
hass, device="abcd", automatic_add=False, devices: dict[str, dict] | None = None
|
|
):
|
|
"""Construct a rfxtrx config entry."""
|
|
entry_data = create_rfx_test_cfg(
|
|
device=device, automatic_add=automatic_add, devices=devices
|
|
)
|
|
mock_entry = MockConfigEntry(domain="rfxtrx", unique_id=DOMAIN, data=entry_data)
|
|
mock_entry.supports_remove_device = True
|
|
mock_entry.add_to_hass(hass)
|
|
|
|
await hass.config_entries.async_setup(mock_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
await hass.async_start()
|
|
return mock_entry
|
|
|
|
|
|
@pytest.fixture(autouse=True, name="rfxtrx")
|
|
async def rfxtrx_fixture(hass):
|
|
"""Fixture that cleans up threads from integration."""
|
|
|
|
with patch("RFXtrx.Connect") as connect, patch("RFXtrx.DummyTransport2"):
|
|
rfx = connect.return_value
|
|
|
|
async def _signal_event(packet_id):
|
|
event = rfxtrx.get_rfx_object(packet_id)
|
|
await hass.async_add_executor_job(
|
|
rfx.event_callback,
|
|
event,
|
|
)
|
|
|
|
await hass.async_block_till_done()
|
|
await hass.async_block_till_done()
|
|
return event
|
|
|
|
rfx.signal = _signal_event
|
|
|
|
yield rfx
|
|
|
|
|
|
@pytest.fixture(name="rfxtrx_automatic")
|
|
async def rfxtrx_automatic_fixture(hass, rfxtrx):
|
|
"""Fixture that starts up with automatic additions."""
|
|
await setup_rfx_test_cfg(hass, automatic_add=True, devices={})
|
|
return rfxtrx
|
|
|
|
|
|
@pytest.fixture
|
|
async def timestep(hass):
|
|
"""Step system time forward."""
|
|
|
|
with freeze_time(utcnow()) as frozen_time:
|
|
|
|
async def delay(seconds):
|
|
"""Trigger delay in system."""
|
|
frozen_time.tick(delta=seconds)
|
|
async_fire_time_changed(hass)
|
|
await hass.async_block_till_done()
|
|
|
|
yield delay
|