128 lines
3.6 KiB
Python
128 lines
3.6 KiB
Python
"""Test ZHA API."""
|
|
import pytest
|
|
from homeassistant.components.switch import DOMAIN
|
|
from homeassistant.components.zha.api import (
|
|
async_load_api, ATTR_IEEE, TYPE, ID
|
|
)
|
|
from homeassistant.components.zha.core.const import (
|
|
ATTR_CLUSTER_ID, ATTR_CLUSTER_TYPE, IN, IEEE, MODEL, NAME, QUIRK_APPLIED,
|
|
ATTR_MANUFACTURER, ATTR_ENDPOINT_ID
|
|
)
|
|
from .common import async_init_zigpy_device
|
|
|
|
|
|
@pytest.fixture
|
|
async def zha_client(hass, config_entry, zha_gateway, hass_ws_client):
|
|
"""Test zha switch platform."""
|
|
from zigpy.zcl.clusters.general import OnOff, Basic
|
|
|
|
# load the ZHA API
|
|
async_load_api(hass)
|
|
|
|
# create zigpy device
|
|
await async_init_zigpy_device(
|
|
hass, [OnOff.cluster_id, Basic.cluster_id], [], None, zha_gateway)
|
|
|
|
# load up switch domain
|
|
await hass.config_entries.async_forward_entry_setup(
|
|
config_entry, DOMAIN)
|
|
await hass.async_block_till_done()
|
|
|
|
return await hass_ws_client(hass)
|
|
|
|
|
|
async def test_device_clusters(hass, config_entry, zha_gateway, zha_client):
|
|
"""Test getting device cluster info."""
|
|
await zha_client.send_json({
|
|
ID: 5,
|
|
TYPE: 'zha/devices/clusters',
|
|
ATTR_IEEE: '00:0d:6f:00:0a:90:69:e7'
|
|
})
|
|
|
|
msg = await zha_client.receive_json()
|
|
|
|
assert len(msg['result']) == 2
|
|
|
|
cluster_infos = sorted(msg['result'], key=lambda k: k[ID])
|
|
|
|
cluster_info = cluster_infos[0]
|
|
assert cluster_info[TYPE] == IN
|
|
assert cluster_info[ID] == 0
|
|
assert cluster_info[NAME] == 'Basic'
|
|
|
|
cluster_info = cluster_infos[1]
|
|
assert cluster_info[TYPE] == IN
|
|
assert cluster_info[ID] == 6
|
|
assert cluster_info[NAME] == 'OnOff'
|
|
|
|
|
|
async def test_device_cluster_attributes(
|
|
hass, config_entry, zha_gateway, zha_client):
|
|
"""Test getting device cluster attributes."""
|
|
await zha_client.send_json({
|
|
ID: 5,
|
|
TYPE: 'zha/devices/clusters/attributes',
|
|
ATTR_ENDPOINT_ID: 1,
|
|
ATTR_IEEE: '00:0d:6f:00:0a:90:69:e7',
|
|
ATTR_CLUSTER_ID: 6,
|
|
ATTR_CLUSTER_TYPE: IN
|
|
})
|
|
|
|
msg = await zha_client.receive_json()
|
|
|
|
attributes = msg['result']
|
|
assert len(attributes) == 4
|
|
|
|
for attribute in attributes:
|
|
assert attribute[ID] is not None
|
|
assert attribute[NAME] is not None
|
|
|
|
|
|
async def test_device_cluster_commands(
|
|
hass, config_entry, zha_gateway, zha_client):
|
|
"""Test getting device cluster commands."""
|
|
await zha_client.send_json({
|
|
ID: 5,
|
|
TYPE: 'zha/devices/clusters/commands',
|
|
ATTR_ENDPOINT_ID: 1,
|
|
ATTR_IEEE: '00:0d:6f:00:0a:90:69:e7',
|
|
ATTR_CLUSTER_ID: 6,
|
|
ATTR_CLUSTER_TYPE: IN
|
|
})
|
|
|
|
msg = await zha_client.receive_json()
|
|
|
|
commands = msg['result']
|
|
assert len(commands) == 6
|
|
|
|
for command in commands:
|
|
assert command[ID] is not None
|
|
assert command[NAME] is not None
|
|
assert command[TYPE] is not None
|
|
|
|
|
|
async def test_list_devices(
|
|
hass, config_entry, zha_gateway, zha_client):
|
|
"""Test getting entity cluster commands."""
|
|
await zha_client.send_json({
|
|
ID: 5,
|
|
TYPE: 'zha/devices'
|
|
})
|
|
|
|
msg = await zha_client.receive_json()
|
|
|
|
devices = msg['result']
|
|
assert len(devices) == 1
|
|
|
|
for device in devices:
|
|
assert device[IEEE] is not None
|
|
assert device[ATTR_MANUFACTURER] is not None
|
|
assert device[MODEL] is not None
|
|
assert device[NAME] is not None
|
|
assert device[QUIRK_APPLIED] is not None
|
|
assert device['entities'] is not None
|
|
|
|
for entity_reference in device['entities']:
|
|
assert entity_reference[NAME] is not None
|
|
assert entity_reference['entity_id'] is not None
|