diff --git a/tests/common.py b/tests/common.py index 569813d221c..f7a2c04a5f5 100644 --- a/tests/common.py +++ b/tests/common.py @@ -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: diff --git a/tests/components/application_credentials/test_init.py b/tests/components/application_credentials/test_init.py index 2f17340b071..cc56894cf0d 100644 --- a/tests/components/application_credentials/test_init.py +++ b/tests/components/application_credentials/test_init.py @@ -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: diff --git a/tests/components/hassio/test_discovery.py b/tests/components/hassio/test_discovery.py index 2cb4aa206db..51659927dfa 100644 --- a/tests/components/hassio/test_discovery.py +++ b/tests/components/hassio/test_discovery.py @@ -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 diff --git a/tests/components/homeassistant_hardware/test_silabs_multiprotocol_addon.py b/tests/components/homeassistant_hardware/test_silabs_multiprotocol_addon.py index abe66d35a96..57e4a23ab5f 100644 --- a/tests/components/homeassistant_hardware/test_silabs_multiprotocol_addon.py +++ b/tests/components/homeassistant_hardware/test_silabs_multiprotocol_addon.py @@ -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(