ZHA tests refactoring (#31682)
* Fixtures for restoring/joning a device. * binary_sensor.zha tests. * cover.zha platform tests. * device_tracker.zha platform tests. * fan.zha platform tests. * switch.zha platform tests. * Update light.zha platform tests. * Update sensor.zha platform tests. * ZHA api tests refactoring. * Update lock.zha platform tests. * Update ZHA gateway tests. * Update zha device action tests. * Update zha device trigger tests. * Cleanup.
This commit is contained in:
parent
118ba10442
commit
28eeed1db3
14 changed files with 648 additions and 741 deletions
|
@ -3,13 +3,10 @@ import pytest
|
|||
import zigpy.zcl.clusters.general as general
|
||||
|
||||
import homeassistant.components.automation as automation
|
||||
from homeassistant.components.switch import DOMAIN
|
||||
from homeassistant.components.zha.core.const import CHANNEL_ON_OFF
|
||||
from homeassistant.components.zha.core.const import CHANNEL_EVENT_RELAY
|
||||
from homeassistant.helpers.device_registry import async_get_registry
|
||||
from homeassistant.setup import async_setup_component
|
||||
|
||||
from .common import async_enable_traffic, async_init_zigpy_device
|
||||
|
||||
from tests.common import async_get_device_automations, async_mock_service
|
||||
|
||||
ON = 1
|
||||
|
@ -42,13 +39,31 @@ def calls(hass):
|
|||
return async_mock_service(hass, "test", "automation")
|
||||
|
||||
|
||||
async def test_triggers(hass, config_entry, zha_gateway):
|
||||
@pytest.fixture(params=["zha_device_joined", "zha_device_restored"])
|
||||
async def mock_devices(hass, zha_gateway, zigpy_device_mock, request):
|
||||
"""IAS device fixture."""
|
||||
|
||||
zigpy_device = zigpy_device_mock(
|
||||
{
|
||||
1: {
|
||||
"in_clusters": [general.Basic.cluster_id],
|
||||
"out_clusters": [general.OnOff.cluster_id],
|
||||
"device_type": 0,
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
join_or_restore = request.getfixturevalue(request.param)
|
||||
zha_device = await join_or_restore(zigpy_device)
|
||||
zha_device.update_available(True)
|
||||
await hass.async_block_till_done()
|
||||
return zigpy_device, zha_device
|
||||
|
||||
|
||||
async def test_triggers(hass, mock_devices):
|
||||
"""Test zha device triggers."""
|
||||
|
||||
# create zigpy device
|
||||
zigpy_device = await async_init_zigpy_device(
|
||||
hass, [general.Basic.cluster_id], [general.OnOff.cluster_id], None, zha_gateway
|
||||
)
|
||||
zigpy_device, zha_device = mock_devices
|
||||
|
||||
zigpy_device.device_automation_triggers = {
|
||||
(SHAKEN, SHAKEN): {COMMAND: COMMAND_SHAKE},
|
||||
|
@ -58,11 +73,6 @@ async def test_triggers(hass, config_entry, zha_gateway):
|
|||
(LONG_RELEASE, LONG_RELEASE): {COMMAND: COMMAND_HOLD},
|
||||
}
|
||||
|
||||
await hass.config_entries.async_forward_entry_setup(config_entry, DOMAIN)
|
||||
await hass.async_block_till_done()
|
||||
hass.config_entries._entries.append(config_entry)
|
||||
|
||||
zha_device = zha_gateway.get_device(zigpy_device.ieee)
|
||||
ieee_address = str(zha_device.ieee)
|
||||
|
||||
ha_device_registry = await async_get_registry(hass)
|
||||
|
@ -110,19 +120,10 @@ async def test_triggers(hass, config_entry, zha_gateway):
|
|||
assert _same_lists(triggers, expected_triggers)
|
||||
|
||||
|
||||
async def test_no_triggers(hass, config_entry, zha_gateway):
|
||||
async def test_no_triggers(hass, mock_devices):
|
||||
"""Test zha device with no triggers."""
|
||||
|
||||
# create zigpy device
|
||||
zigpy_device = await async_init_zigpy_device(
|
||||
hass, [general.Basic.cluster_id], [general.OnOff.cluster_id], None, zha_gateway
|
||||
)
|
||||
|
||||
await hass.config_entries.async_forward_entry_setup(config_entry, DOMAIN)
|
||||
await hass.async_block_till_done()
|
||||
hass.config_entries._entries.append(config_entry)
|
||||
|
||||
zha_device = zha_gateway.get_device(zigpy_device.ieee)
|
||||
_, zha_device = mock_devices
|
||||
ieee_address = str(zha_device.ieee)
|
||||
|
||||
ha_device_registry = await async_get_registry(hass)
|
||||
|
@ -132,13 +133,10 @@ async def test_no_triggers(hass, config_entry, zha_gateway):
|
|||
assert triggers == []
|
||||
|
||||
|
||||
async def test_if_fires_on_event(hass, config_entry, zha_gateway, calls):
|
||||
async def test_if_fires_on_event(hass, mock_devices, calls):
|
||||
"""Test for remote triggers firing."""
|
||||
|
||||
# create zigpy device
|
||||
zigpy_device = await async_init_zigpy_device(
|
||||
hass, [general.Basic.cluster_id], [general.OnOff.cluster_id], None, zha_gateway
|
||||
)
|
||||
zigpy_device, zha_device = mock_devices
|
||||
|
||||
zigpy_device.device_automation_triggers = {
|
||||
(SHAKEN, SHAKEN): {COMMAND: COMMAND_SHAKE},
|
||||
|
@ -148,15 +146,6 @@ async def test_if_fires_on_event(hass, config_entry, zha_gateway, calls):
|
|||
(LONG_RELEASE, LONG_RELEASE): {COMMAND: COMMAND_HOLD},
|
||||
}
|
||||
|
||||
await hass.config_entries.async_forward_entry_setup(config_entry, DOMAIN)
|
||||
await hass.async_block_till_done()
|
||||
hass.config_entries._entries.append(config_entry)
|
||||
|
||||
zha_device = zha_gateway.get_device(zigpy_device.ieee)
|
||||
|
||||
# allow traffic to flow through the gateway and device
|
||||
await async_enable_traffic(hass, zha_gateway, [zha_device])
|
||||
|
||||
ieee_address = str(zha_device.ieee)
|
||||
ha_device_registry = await async_get_registry(hass)
|
||||
reg_device = ha_device_registry.async_get_device({("zha", ieee_address)}, set())
|
||||
|
@ -185,30 +174,18 @@ async def test_if_fires_on_event(hass, config_entry, zha_gateway, calls):
|
|||
|
||||
await hass.async_block_till_done()
|
||||
|
||||
on_off_channel = zha_device.cluster_channels[CHANNEL_ON_OFF]
|
||||
on_off_channel.zha_send_event(on_off_channel.cluster, COMMAND_SINGLE, [])
|
||||
channel = {ch.name: ch for ch in zha_device.all_channels}[CHANNEL_EVENT_RELAY]
|
||||
channel.zha_send_event(channel.cluster, COMMAND_SINGLE, [])
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert len(calls) == 1
|
||||
assert calls[0].data["message"] == "service called"
|
||||
|
||||
|
||||
async def test_exception_no_triggers(hass, config_entry, zha_gateway, calls, caplog):
|
||||
async def test_exception_no_triggers(hass, mock_devices, calls, caplog):
|
||||
"""Test for exception on event triggers firing."""
|
||||
|
||||
# create zigpy device
|
||||
zigpy_device = await async_init_zigpy_device(
|
||||
hass, [general.Basic.cluster_id], [general.OnOff.cluster_id], None, zha_gateway
|
||||
)
|
||||
|
||||
await hass.config_entries.async_forward_entry_setup(config_entry, DOMAIN)
|
||||
await hass.async_block_till_done()
|
||||
hass.config_entries._entries.append(config_entry)
|
||||
|
||||
zha_device = zha_gateway.get_device(zigpy_device.ieee)
|
||||
|
||||
# allow traffic to flow through the gateway and device
|
||||
await async_enable_traffic(hass, zha_gateway, [zha_device])
|
||||
_, zha_device = mock_devices
|
||||
|
||||
ieee_address = str(zha_device.ieee)
|
||||
ha_device_registry = await async_get_registry(hass)
|
||||
|
@ -239,13 +216,10 @@ async def test_exception_no_triggers(hass, config_entry, zha_gateway, calls, cap
|
|||
assert "Invalid config for [automation]" in caplog.text
|
||||
|
||||
|
||||
async def test_exception_bad_trigger(hass, config_entry, zha_gateway, calls, caplog):
|
||||
async def test_exception_bad_trigger(hass, mock_devices, calls, caplog):
|
||||
"""Test for exception on event triggers firing."""
|
||||
|
||||
# create zigpy device
|
||||
zigpy_device = await async_init_zigpy_device(
|
||||
hass, [general.Basic.cluster_id], [general.OnOff.cluster_id], None, zha_gateway
|
||||
)
|
||||
zigpy_device, zha_device = mock_devices
|
||||
|
||||
zigpy_device.device_automation_triggers = {
|
||||
(SHAKEN, SHAKEN): {COMMAND: COMMAND_SHAKE},
|
||||
|
@ -255,15 +229,6 @@ async def test_exception_bad_trigger(hass, config_entry, zha_gateway, calls, cap
|
|||
(LONG_RELEASE, LONG_RELEASE): {COMMAND: COMMAND_HOLD},
|
||||
}
|
||||
|
||||
await hass.config_entries.async_forward_entry_setup(config_entry, DOMAIN)
|
||||
await hass.async_block_till_done()
|
||||
hass.config_entries._entries.append(config_entry)
|
||||
|
||||
zha_device = zha_gateway.get_device(zigpy_device.ieee)
|
||||
|
||||
# allow traffic to flow through the gateway and device
|
||||
await async_enable_traffic(hass, zha_gateway, [zha_device])
|
||||
|
||||
ieee_address = str(zha_device.ieee)
|
||||
ha_device_registry = await async_get_registry(hass)
|
||||
reg_device = ha_device_registry.async_get_device({("zha", ieee_address)}, set())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue