"""Test configuration for the ZHA component.""" from unittest.mock import patch import pytest from homeassistant import config_entries from homeassistant.components.zha.core.const import ( DOMAIN, DATA_ZHA, COMPONENTS ) from homeassistant.components.zha.core.gateway import ZHAGateway from homeassistant.components.zha.core.registries import \ establish_device_mappings from homeassistant.components.zha.core.channels.registry \ import populate_channel_registry from .common import async_setup_entry from homeassistant.components.zha.core.store import async_get_registry @pytest.fixture(name='config_entry') def config_entry_fixture(hass): """Fixture representing a config entry.""" config_entry = config_entries.ConfigEntry( 1, DOMAIN, 'Mock Title', {}, 'test', config_entries.CONN_CLASS_LOCAL_PUSH) return config_entry @pytest.fixture(name='zha_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 @pytest.fixture(autouse=True) async def setup_zha(hass, config_entry): """Load the ZHA component. This will init the ZHA component. It loads the component in HA so that we can test the domains that ZHA supports without actually having a zigbee network running. """ # this prevents needing an actual radio and zigbee network available with patch('homeassistant.components.zha.async_setup_entry', async_setup_entry): hass.data[DATA_ZHA] = {} # init ZHA await hass.config_entries.async_forward_entry_setup( config_entry, DOMAIN) await hass.async_block_till_done()