"""The tests for the Rfxtrx sensor platform.""" from unittest.mock import patch from freezegun.api import FrozenDateTimeFactory import pytest from RFXtrx import ControlEvent from syrupy.assertion import SnapshotAssertion from homeassistant.components.rfxtrx import get_rfx_object from homeassistant.const import Platform from homeassistant.core import HomeAssistant from .conftest import setup_rfx_test_cfg @pytest.fixture(autouse=True) def required_platforms_only(): """Only set up the required platform and required base platforms to speed up tests.""" with patch( "homeassistant.components.rfxtrx.PLATFORMS", (Platform.EVENT,), ): yield async def test_control_event( hass: HomeAssistant, rfxtrx, freezer: FrozenDateTimeFactory, snapshot: SnapshotAssertion, ) -> None: """Test event update updates correct event object.""" hass.config.set_time_zone("UTC") freezer.move_to("2021-01-09 12:00:00+00:00") await setup_rfx_test_cfg( hass, devices={ "0710013d43010150": {}, "0710013d44010150": {}, }, ) assert hass.states.get("event.arc_c1") == snapshot(name="1") assert hass.states.get("event.arc_d1") == snapshot(name="2") # only signal one, to make sure we have no overhearing await rfxtrx.signal("0710013d44010150") assert hass.states.get("event.arc_c1") == snapshot(diff="1") assert hass.states.get("event.arc_d1") == snapshot(diff="2") async def test_status_event( hass: HomeAssistant, rfxtrx, freezer: FrozenDateTimeFactory, snapshot: SnapshotAssertion, ) -> None: """Test event update updates correct event object.""" hass.config.set_time_zone("UTC") freezer.move_to("2021-01-09 12:00:00+00:00") await setup_rfx_test_cfg( hass, devices={ "0820004dd3dc540089": {}, }, ) assert hass.states.get("event.x10_security_d3dc54_32") == snapshot(name="1") await rfxtrx.signal("0820004dd3dc540089") assert hass.states.get("event.x10_security_d3dc54_32") == snapshot(diff="1") async def test_invalid_event_type( hass: HomeAssistant, rfxtrx, freezer: FrozenDateTimeFactory, snapshot: SnapshotAssertion, ) -> None: """Test with 1 sensor.""" await setup_rfx_test_cfg( hass, devices={ "0710013d43010150": {}, }, ) state = hass.states.get("event.arc_c1") # Invalid event type should not trigger change event = get_rfx_object("0710013d43010150") assert isinstance(event, ControlEvent) event.values["Command"] = "invalid_command" rfxtrx.event_callback(event) await hass.async_block_till_done() assert hass.states.get("event.arc_c1") == state