core/tests/components/zha/conftest.py

62 lines
2.0 KiB
Python

"""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()