core/tests/components/config/test_device_registry.py

129 lines
3.9 KiB
Python

"""Test device_registry API."""
import pytest
from homeassistant.components.config import device_registry
from homeassistant.helpers import device_registry as helpers_dr
from tests.common import mock_device_registry
from tests.components.blueprint.conftest import stub_blueprint_populate # noqa: F401
@pytest.fixture
def client(hass, hass_ws_client):
"""Fixture that can interact with the config manager API."""
hass.loop.run_until_complete(device_registry.async_setup(hass))
yield hass.loop.run_until_complete(hass_ws_client(hass))
@pytest.fixture
def registry(hass):
"""Return an empty, loaded, registry."""
return mock_device_registry(hass)
async def test_list_devices(hass, client, registry):
"""Test list entries."""
registry.async_get_or_create(
config_entry_id="1234",
connections={("ethernet", "12:34:56:78:90:AB:CD:EF")},
identifiers={("bridgeid", "0123")},
manufacturer="manufacturer",
model="model",
)
registry.async_get_or_create(
config_entry_id="1234",
identifiers={("bridgeid", "1234")},
manufacturer="manufacturer",
model="model",
via_device=("bridgeid", "0123"),
entry_type=helpers_dr.DeviceEntryType.SERVICE,
)
await client.send_json({"id": 5, "type": "config/device_registry/list"})
msg = await client.receive_json()
dev1, dev2 = (entry.pop("id") for entry in msg["result"])
assert msg["result"] == [
{
"config_entries": ["1234"],
"connections": [["ethernet", "12:34:56:78:90:AB:CD:EF"]],
"identifiers": [["bridgeid", "0123"]],
"manufacturer": "manufacturer",
"model": "model",
"name": None,
"sw_version": None,
"hw_version": None,
"entry_type": None,
"via_device_id": None,
"area_id": None,
"name_by_user": None,
"disabled_by": None,
"configuration_url": None,
},
{
"config_entries": ["1234"],
"connections": [],
"identifiers": [["bridgeid", "1234"]],
"manufacturer": "manufacturer",
"model": "model",
"name": None,
"sw_version": None,
"hw_version": None,
"entry_type": helpers_dr.DeviceEntryType.SERVICE,
"via_device_id": dev1,
"area_id": None,
"name_by_user": None,
"disabled_by": None,
"configuration_url": None,
},
]
@pytest.mark.parametrize(
"payload_key,payload_value",
[
["area_id", "12345A"],
["area_id", None],
["disabled_by", helpers_dr.DeviceEntryDisabler.USER],
["disabled_by", "user"],
["disabled_by", None],
["name_by_user", "Test Friendly Name"],
["name_by_user", None],
],
)
async def test_update_device(hass, client, registry, payload_key, payload_value):
"""Test update entry."""
device = registry.async_get_or_create(
config_entry_id="1234",
connections={("ethernet", "12:34:56:78:90:AB:CD:EF")},
identifiers={("bridgeid", "0123")},
manufacturer="manufacturer",
model="model",
)
assert not getattr(device, payload_key)
await client.send_json(
{
"id": 1,
"type": "config/device_registry/update",
"device_id": device.id,
payload_key: payload_value,
}
)
msg = await client.receive_json()
await hass.async_block_till_done()
assert len(registry.devices) == 1
device = registry.async_get_device(
identifiers={("bridgeid", "0123")},
connections={("ethernet", "12:34:56:78:90:AB:CD:EF")},
)
assert msg["result"][payload_key] == payload_value
assert getattr(device, payload_key) == payload_value
assert isinstance(device.disabled_by, (helpers_dr.DeviceEntryDisabler, type(None)))