async def zha_gateway_fixture(hass, config_entry): """Fixture representing a zha gateway. Create a ZHAGateway object that can be used to interact with as if we had a real zigbee network running. """ establish_device_mappings() for component in COMPONENTS: hass.data[DATA_ZHA][component] = hass.data[DATA_ZHA].get(component, {}) zha_storage = await async_get_registry(hass) dev_reg = await get_dev_reg(hass) gateway = ZHAGateway(hass, {}, config_entry) gateway.zha_storage = zha_storage gateway.ha_device_registry = dev_reg return gateway
async def zha_gateway_fixture(hass): """Fixture representing a zha gateway. Create a ZHAGateway object that can be used to interact with as if we had a real zigbee network running. """ populate_channel_registry() establish_device_mappings() for component in COMPONENTS: hass.data[DATA_ZHA][component] = (hass.data[DATA_ZHA].get( component, {})) zha_storage = await async_get_registry(hass) gateway = ZHAGateway(hass, {}) gateway.zha_storage = zha_storage return gateway
async def zha_gateway_fixture(hass): """Fixture representing a zha gateway. Create a ZHAGateway object that can be used to interact with as if we had a real zigbee network running. """ populate_channel_registry() establish_device_mappings() for component in COMPONENTS: hass.data[DATA_ZHA][component] = ( hass.data[DATA_ZHA].get(component, {}) ) zha_storage = await async_get_registry(hass) gateway = ZHAGateway(hass, {}) gateway.zha_storage = zha_storage return gateway
async def zha_gateway_fixture(hass, config_entry): """Fixture representing a zha gateway. Create a ZHAGateway object that can be used to interact with as if we had a real zigbee network running. """ for component in COMPONENTS: hass.data[DATA_ZHA][component] = hass.data[DATA_ZHA].get(component, {}) zha_storage = await async_get_registry(hass) dev_reg = await get_dev_reg(hass) gateway = ZHAGateway(hass, {}, config_entry) gateway.zha_storage = zha_storage gateway.ha_device_registry = dev_reg gateway.application_controller = mock.MagicMock( spec_set=ControllerApplication) groups = zigpy.group.Groups(gateway.application_controller) groups.listener_event = mock.MagicMock() groups.add_group(FIXTURE_GRP_ID, FIXTURE_GRP_NAME, suppress_event=True) gateway.application_controller.groups = groups return gateway
async def test_devices( device, zha_gateway: core_zha_gw.ZHAGateway, hass, config_entry, zigpy_device_mock, monkeypatch, ): """Test device discovery.""" zigpy_device = zigpy_device_mock( device["endpoints"], "00:11:22:33:44:55:66:77", device["manufacturer"], device["model"], node_desc=device["node_descriptor"], ) _dispatch = mock.MagicMock(wraps=disc.async_dispatch_discovery_info) monkeypatch.setattr(core_zha_gw, "async_dispatch_discovery_info", _dispatch) entity_registry = await homeassistant.helpers.entity_registry.async_get_registry( hass) with mock.patch( "homeassistant.components.zha.core.discovery._async_create_cluster_channel", wraps=disc._async_create_cluster_channel, ): await zha_gateway.async_device_restored(zigpy_device) await hass.async_block_till_done() tasks = [ hass.config_entries.async_forward_entry_setup( config_entry, component) for component in zha_const.COMPONENTS ] await asyncio.gather(*tasks) await hass.async_block_till_done() entity_ids = hass.states.async_entity_ids() await hass.async_block_till_done() zha_entities = { ent for ent in entity_ids if ent.split(".")[0] in zha_const.COMPONENTS } zha_dev = zha_gateway.get_device(zigpy_device.ieee) event_channels = { # pylint: disable=protected-access ch.id for ch in zha_dev._relay_channels.values() } assert zha_entities == set(device["entities"]) assert event_channels == set(device["event_channels"]) entity_map = device["entity_map"] for calls in _dispatch.call_args_list: discovery_info = calls[0][2] unique_id = discovery_info["unique_id"] channels = discovery_info["channels"] component = discovery_info["component"] key = (component, unique_id) entity_id = entity_registry.async_get_entity_id( component, "zha", unique_id) assert key in entity_map assert entity_id is not None no_tail_id = NO_TAIL_ID.sub("", entity_map[key]["entity_id"]) assert entity_id.startswith(no_tail_id) assert set([ch.name for ch in channels ]) == set(entity_map[key]["channels"])