* Make async_get_device connections Optional, default None * Remove unnecessary async_get_device connections arg usages Some of these were using an incorrect collection type, which didn't cause issues mostly just due to luck.
145 lines
4.1 KiB
Python
145 lines
4.1 KiB
Python
"""The tests for the Rfxtrx component."""
|
|
|
|
from unittest.mock import call
|
|
|
|
from homeassistant.components.rfxtrx import DOMAIN
|
|
from homeassistant.components.rfxtrx.const import EVENT_RFXTRX_EVENT
|
|
from homeassistant.core import callback
|
|
from homeassistant.helpers.device_registry import (
|
|
DeviceRegistry,
|
|
async_get_registry as async_get_device_registry,
|
|
)
|
|
from homeassistant.setup import async_setup_component
|
|
|
|
from tests.common import MockConfigEntry
|
|
from tests.components.rfxtrx.conftest import create_rfx_test_cfg
|
|
|
|
|
|
async def test_valid_config(hass):
|
|
"""Test configuration."""
|
|
assert await async_setup_component(
|
|
hass,
|
|
"rfxtrx",
|
|
{
|
|
"rfxtrx": {
|
|
"device": "/dev/serial/by-id/usb"
|
|
+ "-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0",
|
|
}
|
|
},
|
|
)
|
|
|
|
|
|
async def test_valid_config2(hass):
|
|
"""Test configuration."""
|
|
assert await async_setup_component(
|
|
hass,
|
|
"rfxtrx",
|
|
{
|
|
"rfxtrx": {
|
|
"device": "/dev/serial/by-id/usb"
|
|
+ "-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0",
|
|
"debug": True,
|
|
}
|
|
},
|
|
)
|
|
|
|
|
|
async def test_invalid_config(hass):
|
|
"""Test configuration."""
|
|
assert not await async_setup_component(hass, "rfxtrx", {"rfxtrx": {}})
|
|
|
|
assert not await async_setup_component(
|
|
hass,
|
|
"rfxtrx",
|
|
{
|
|
"rfxtrx": {
|
|
"device": "/dev/serial/by-id/usb"
|
|
+ "-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0",
|
|
"invalid_key": True,
|
|
}
|
|
},
|
|
)
|
|
|
|
|
|
async def test_fire_event(hass, rfxtrx):
|
|
"""Test fire event."""
|
|
entry_data = create_rfx_test_cfg(
|
|
device="/dev/serial/by-id/usb-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0",
|
|
automatic_add=True,
|
|
devices={
|
|
"0b1100cd0213c7f210010f51": {"fire_event": True},
|
|
"0716000100900970": {"fire_event": True},
|
|
},
|
|
)
|
|
mock_entry = MockConfigEntry(domain="rfxtrx", unique_id=DOMAIN, data=entry_data)
|
|
|
|
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()
|
|
|
|
device_registry: DeviceRegistry = await async_get_device_registry(hass)
|
|
|
|
calls = []
|
|
|
|
@callback
|
|
def record_event(event):
|
|
"""Add recorded event to set."""
|
|
assert event.event_type == "rfxtrx_event"
|
|
calls.append(event.data)
|
|
|
|
hass.bus.async_listen(EVENT_RFXTRX_EVENT, record_event)
|
|
|
|
await rfxtrx.signal("0b1100cd0213c7f210010f51")
|
|
await rfxtrx.signal("0716000100900970")
|
|
|
|
device_id_1 = device_registry.async_get_device(
|
|
identifiers={("rfxtrx", "11", "0", "213c7f2:16")}
|
|
)
|
|
assert device_id_1
|
|
|
|
device_id_2 = device_registry.async_get_device(
|
|
identifiers={("rfxtrx", "16", "0", "00:90")}
|
|
)
|
|
assert device_id_2
|
|
|
|
assert calls == [
|
|
{
|
|
"packet_type": 17,
|
|
"sub_type": 0,
|
|
"type_string": "AC",
|
|
"id_string": "213c7f2:16",
|
|
"data": "0b1100cd0213c7f210010f51",
|
|
"values": {"Command": "On", "Rssi numeric": 5},
|
|
"device_id": device_id_1.id,
|
|
},
|
|
{
|
|
"packet_type": 22,
|
|
"sub_type": 0,
|
|
"type_string": "Byron SX",
|
|
"id_string": "00:90",
|
|
"data": "0716000100900970",
|
|
"values": {"Command": "Chime", "Rssi numeric": 7, "Sound": 9},
|
|
"device_id": device_id_2.id,
|
|
},
|
|
]
|
|
|
|
|
|
async def test_send(hass, rfxtrx):
|
|
"""Test configuration."""
|
|
entry_data = create_rfx_test_cfg(device="/dev/null", devices={})
|
|
mock_entry = MockConfigEntry(domain="rfxtrx", unique_id=DOMAIN, data=entry_data)
|
|
|
|
mock_entry.add_to_hass(hass)
|
|
|
|
await hass.config_entries.async_setup(mock_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
await hass.services.async_call(
|
|
"rfxtrx", "send", {"event": "0a520802060101ff0f0269"}, blocking=True
|
|
)
|
|
|
|
assert rfxtrx.transport.send.mock_calls == [
|
|
call(bytearray(b"\x0a\x52\x08\x02\x06\x01\x01\xff\x0f\x02\x69"))
|
|
]
|