"""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.helpers.device_registry import async_get_registry as get_dev_reg from homeassistant.components.zha.core.gateway import ZHAGateway from homeassistant.components.zha.core.registries import establish_device_mappings 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, system_options={}, ) return config_entry @pytest.fixture(name="zha_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. """ 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 @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()