Add typing of deCONZ device_trigger (#67496)

This commit is contained in:
Robert Svensson 2022-03-14 17:37:48 +01:00 committed by GitHub
parent 38306417ad
commit 362191a0e6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 134 additions and 28 deletions

View file

@ -5,6 +5,13 @@ from unittest.mock import Mock, patch
import pytest
from homeassistant.components.automation import DOMAIN as AUTOMATION_DOMAIN
from homeassistant.components.binary_sensor import DOMAIN as BINARY_SENSOR_DOMAIN
from homeassistant.components.binary_sensor.device_trigger import (
CONF_BAT_LOW,
CONF_NOT_BAT_LOW,
CONF_NOT_TAMPERED,
CONF_TAMPERED,
)
from homeassistant.components.deconz import device_trigger
from homeassistant.components.deconz.const import DOMAIN as DECONZ_DOMAIN
from homeassistant.components.deconz.device_trigger import CONF_SUBTYPE
@ -129,6 +136,91 @@ async def test_get_triggers(hass, aioclient_mock):
assert_lists_same(triggers, expected_triggers)
async def test_get_triggers_for_alarm_event(hass, aioclient_mock):
"""Test triggers work."""
data = {
"sensors": {
"1": {
"config": {
"battery": 95,
"enrolled": 1,
"on": True,
"pending": [],
"reachable": True,
},
"ep": 1,
"etag": "5aaa1c6bae8501f59929539c6e8f44d6",
"lastseen": "2021-07-25T18:07Z",
"manufacturername": "lk",
"modelid": "ZB-KeypadGeneric-D0002",
"name": "Keypad",
"state": {
"action": "armed_stay",
"lastupdated": "2021-07-25T18:02:51.172",
"lowbattery": False,
"panel": "exit_delay",
"seconds_remaining": 55,
"tampered": False,
},
"swversion": "3.13",
"type": "ZHAAncillaryControl",
"uniqueid": "00:00:00:00:00:00:00:00-00",
}
}
}
with patch.dict(DECONZ_WEB_REQUEST, data):
await setup_deconz_integration(hass, aioclient_mock)
device_registry = await hass.helpers.device_registry.async_get_registry()
device = device_registry.async_get_device(
identifiers={(DECONZ_DOMAIN, "00:00:00:00:00:00:00:00")}
)
triggers = await async_get_device_automations(
hass, DeviceAutomationType.TRIGGER, device.id
)
expected_triggers = [
{
CONF_DEVICE_ID: device.id,
CONF_DOMAIN: BINARY_SENSOR_DOMAIN,
ATTR_ENTITY_ID: "binary_sensor.keypad_low_battery",
CONF_PLATFORM: "device",
CONF_TYPE: CONF_BAT_LOW,
},
{
CONF_DEVICE_ID: device.id,
CONF_DOMAIN: BINARY_SENSOR_DOMAIN,
ATTR_ENTITY_ID: "binary_sensor.keypad_low_battery",
CONF_PLATFORM: "device",
CONF_TYPE: CONF_NOT_BAT_LOW,
},
{
CONF_DEVICE_ID: device.id,
CONF_DOMAIN: BINARY_SENSOR_DOMAIN,
ATTR_ENTITY_ID: "binary_sensor.keypad_tampered",
CONF_PLATFORM: "device",
CONF_TYPE: CONF_TAMPERED,
},
{
CONF_DEVICE_ID: device.id,
CONF_DOMAIN: BINARY_SENSOR_DOMAIN,
ATTR_ENTITY_ID: "binary_sensor.keypad_tampered",
CONF_PLATFORM: "device",
CONF_TYPE: CONF_NOT_TAMPERED,
},
{
CONF_DEVICE_ID: device.id,
CONF_DOMAIN: SENSOR_DOMAIN,
ATTR_ENTITY_ID: "sensor.keypad_battery",
CONF_PLATFORM: "device",
CONF_TYPE: ATTR_BATTERY_LEVEL,
},
]
assert_lists_same(triggers, expected_triggers)
async def test_get_triggers_manage_unsupported_remotes(hass, aioclient_mock):
"""Verify no triggers for an unsupported remote."""
data = {
@ -244,9 +336,7 @@ async def test_functional_device_trigger(
assert automation_calls[0].data["some"] == "test_trigger_button_press"
async def test_validate_trigger_unknown_device(
hass, aioclient_mock, mock_deconz_websocket
):
async def test_validate_trigger_unknown_device(hass, aioclient_mock):
"""Test unknown device does not return a trigger config."""
await setup_deconz_integration(hass, aioclient_mock)
@ -276,9 +366,7 @@ async def test_validate_trigger_unknown_device(
assert len(hass.states.async_entity_ids(AUTOMATION_DOMAIN)) == 0
async def test_validate_trigger_unsupported_device(
hass, aioclient_mock, mock_deconz_websocket
):
async def test_validate_trigger_unsupported_device(hass, aioclient_mock):
"""Test unsupported device doesn't return a trigger config."""
config_entry = await setup_deconz_integration(hass, aioclient_mock)
@ -315,9 +403,7 @@ async def test_validate_trigger_unsupported_device(
assert len(hass.states.async_entity_ids(AUTOMATION_DOMAIN)) == 0
async def test_validate_trigger_unsupported_trigger(
hass, aioclient_mock, mock_deconz_websocket
):
async def test_validate_trigger_unsupported_trigger(hass, aioclient_mock):
"""Test unsupported trigger does not return a trigger config."""
config_entry = await setup_deconz_integration(hass, aioclient_mock)
@ -356,9 +442,7 @@ async def test_validate_trigger_unsupported_trigger(
assert len(hass.states.async_entity_ids(AUTOMATION_DOMAIN)) == 0
async def test_attach_trigger_no_matching_event(
hass, aioclient_mock, mock_deconz_websocket
):
async def test_attach_trigger_no_matching_event(hass, aioclient_mock):
"""Test no matching event for device doesn't return a trigger config."""
config_entry = await setup_deconz_integration(hass, aioclient_mock)