Add test helper mock_config_flow (#90103)

This commit is contained in:
Erik Montnemery 2023-03-22 13:59:35 +01:00 committed by GitHub
parent 0ca6723378
commit 0ecd043cb2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 16 deletions

View file

@ -34,6 +34,7 @@ from homeassistant.components.device_automation import ( # noqa: F401
_async_get_device_automation_capabilities as async_get_device_automation_capabilities,
)
from homeassistant.config import async_process_component_config
from homeassistant.config_entries import ConfigFlow
from homeassistant.const import (
DEVICE_DEFAULT_NAME,
EVENT_HOMEASSISTANT_CLOSE,
@ -1242,6 +1243,16 @@ async def get_system_health_info(hass: HomeAssistant, domain: str) -> dict[str,
return await hass.data["system_health"][domain].info_callback(hass)
@contextmanager
def mock_config_flow(domain: str, config_flow: type[ConfigFlow]) -> None:
"""Mock a config flow handler."""
assert domain not in config_entries.HANDLERS
config_entries.HANDLERS[domain] = config_flow
_LOGGER.info("Adding mock config flow: %s", domain)
yield
config_entries.HANDLERS.pop(domain)
def mock_integration(
hass: HomeAssistant, module: MockModule, built_in: bool = True
) -> loader.Integration:

View file

@ -28,7 +28,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers import config_entry_oauth2_flow
from homeassistant.setup import async_setup_component
from tests.common import MockConfigEntry, mock_platform
from tests.common import MockConfigEntry, mock_config_flow, mock_platform
from tests.test_util.aiohttp import AiohttpClientMocker
from tests.typing import ClientSessionGenerator, WebSocketGenerator
@ -98,7 +98,7 @@ async def mock_application_credentials_integration(
yield
class FakeConfigFlow(config_entry_oauth2_flow.AbstractOAuth2FlowHandler, domain=DOMAIN):
class FakeConfigFlow(config_entry_oauth2_flow.AbstractOAuth2FlowHandler):
"""Config flow used during tests."""
DOMAIN = TEST_DOMAIN
@ -115,8 +115,8 @@ def config_flow_handler(
) -> Generator[FakeConfigFlow, None, None]:
"""Fixture for a test config flow."""
mock_platform(hass, f"{TEST_DOMAIN}.config_flow")
with patch.dict(config_entries.HANDLERS, {TEST_DOMAIN: FakeConfigFlow}):
yield FakeConfigFlow
with mock_config_flow(TEST_DOMAIN, FakeConfigFlow):
yield
class OAuthFixture:

View file

@ -12,7 +12,12 @@ from homeassistant.const import EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_S
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component
from tests.common import MockModule, mock_entity_platform, mock_integration
from tests.common import (
MockModule,
mock_config_flow,
mock_entity_platform,
mock_integration,
)
from tests.test_util.aiohttp import AiohttpClientMocker
@ -22,15 +27,14 @@ async def mock_mqtt_fixture(hass):
mock_integration(hass, MockModule(MQTT_DOMAIN))
mock_entity_platform(hass, f"config_flow.{MQTT_DOMAIN}", None)
with patch.dict(config_entries.HANDLERS):
class MqttFlow(config_entries.ConfigFlow):
"""Test flow."""
class MqttFlow(config_entries.ConfigFlow, domain=MQTT_DOMAIN):
"""Test flow."""
VERSION = 1
VERSION = 1
async_step_hassio = AsyncMock(return_value={"type": "abort"})
async_step_hassio = AsyncMock(return_value={"type": "abort"})
with mock_config_flow(MQTT_DOMAIN, MqttFlow):
yield MqttFlow

View file

@ -7,7 +7,6 @@ from unittest.mock import Mock, patch
import pytest
from homeassistant import config_entries
from homeassistant.components.hassio.handler import HassioAPIError
from homeassistant.components.homeassistant_hardware import silabs_multiprotocol_addon
from homeassistant.components.zha.core.const import DOMAIN as ZHA_DOMAIN
@ -15,12 +14,18 @@ from homeassistant.config_entries import ConfigEntry, ConfigFlow
from homeassistant.core import HomeAssistant, callback
from homeassistant.data_entry_flow import FlowResult, FlowResultType
from tests.common import MockConfigEntry, MockModule, mock_integration, mock_platform
from tests.common import (
MockConfigEntry,
MockModule,
mock_config_flow,
mock_integration,
mock_platform,
)
TEST_DOMAIN = "test"
class TestConfigFlow(ConfigFlow, domain=TEST_DOMAIN):
class TestConfigFlow(ConfigFlow):
"""Handle a config flow for the silabs multiprotocol add-on."""
VERSION = 1
@ -87,8 +92,8 @@ def config_flow_handler(
) -> Generator[TestConfigFlow, None, None]:
"""Fixture for a test config flow."""
mock_platform(hass, f"{TEST_DOMAIN}.config_flow")
with patch.dict(config_entries.HANDLERS, {TEST_DOMAIN: TestConfigFlow}):
yield TestConfigFlow
with mock_config_flow(TEST_DOMAIN, TestConfigFlow):
yield
async def test_option_flow_install_multi_pan_addon(