From 7af79ba013b4423232066d6db957834f82545cd8 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Fri, 21 Jun 2024 11:11:48 +0200 Subject: [PATCH] Add MockModule type hints in tests (#120007) --- tests/common.py | 47 ++++++++++++++++++++++++++++++-------------- tests/test_loader.py | 12 +++++------ 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/tests/common.py b/tests/common.py index 851f91cfc3e..87a894bcb26 100644 --- a/tests/common.py +++ b/tests/common.py @@ -783,21 +783,38 @@ class MockModule: def __init__( self, - domain=None, - dependencies=None, - setup=None, - requirements=None, - config_schema=None, - platform_schema=None, - platform_schema_base=None, - async_setup=None, - async_setup_entry=None, - async_unload_entry=None, - async_migrate_entry=None, - async_remove_entry=None, - partial_manifest=None, - async_remove_config_entry_device=None, - ): + domain: str | None = None, + *, + dependencies: list[str] | None = None, + setup: Callable[[HomeAssistant, ConfigType], bool] | None = None, + requirements: list[str] | None = None, + config_schema: vol.Schema | None = None, + platform_schema: vol.Schema | None = None, + platform_schema_base: vol.Schema | None = None, + async_setup: Callable[[HomeAssistant, ConfigType], Coroutine[Any, Any, bool]] + | None = None, + async_setup_entry: Callable[ + [HomeAssistant, ConfigEntry], Coroutine[Any, Any, bool] + ] + | None = None, + async_unload_entry: Callable[ + [HomeAssistant, ConfigEntry], Coroutine[Any, Any, bool] + ] + | None = None, + async_migrate_entry: Callable[ + [HomeAssistant, ConfigEntry], Coroutine[Any, Any, bool] + ] + | None = None, + async_remove_entry: Callable[ + [HomeAssistant, ConfigEntry], Coroutine[Any, Any, None] + ] + | None = None, + partial_manifest: dict[str, Any] | None = None, + async_remove_config_entry_device: Callable[ + [HomeAssistant, ConfigEntry, dr.DeviceEntry], Coroutine[Any, Any, bool] + ] + | None = None, + ) -> None: """Initialize the mock module.""" self.__name__ = f"homeassistant.components.{domain}" self.__file__ = f"homeassistant/components/{domain}" diff --git a/tests/test_loader.py b/tests/test_loader.py index a45bec516f6..ae5280b2dcd 100644 --- a/tests/test_loader.py +++ b/tests/test_loader.py @@ -25,20 +25,20 @@ from .common import MockModule, async_get_persistent_notifications, mock_integra async def test_circular_component_dependencies(hass: HomeAssistant) -> None: """Test if we can detect circular dependencies of components.""" mock_integration(hass, MockModule("mod1")) - mock_integration(hass, MockModule("mod2", ["mod1"])) - mock_integration(hass, MockModule("mod3", ["mod1"])) - mod_4 = mock_integration(hass, MockModule("mod4", ["mod2", "mod3"])) + mock_integration(hass, MockModule("mod2", dependencies=["mod1"])) + mock_integration(hass, MockModule("mod3", dependencies=["mod1"])) + mod_4 = mock_integration(hass, MockModule("mod4", dependencies=["mod2", "mod3"])) deps = await loader._async_component_dependencies(hass, mod_4) assert deps == {"mod1", "mod2", "mod3", "mod4"} # Create a circular dependency - mock_integration(hass, MockModule("mod1", ["mod4"])) + mock_integration(hass, MockModule("mod1", dependencies=["mod4"])) with pytest.raises(loader.CircularDependency): await loader._async_component_dependencies(hass, mod_4) # Create a different circular dependency - mock_integration(hass, MockModule("mod1", ["mod3"])) + mock_integration(hass, MockModule("mod1", dependencies=["mod3"])) with pytest.raises(loader.CircularDependency): await loader._async_component_dependencies(hass, mod_4) @@ -59,7 +59,7 @@ async def test_circular_component_dependencies(hass: HomeAssistant) -> None: async def test_nonexistent_component_dependencies(hass: HomeAssistant) -> None: """Test if we can detect nonexistent dependencies of components.""" - mod_1 = mock_integration(hass, MockModule("mod1", ["nonexistent"])) + mod_1 = mock_integration(hass, MockModule("mod1", dependencies=["nonexistent"])) with pytest.raises(loader.IntegrationNotFound): await loader._async_component_dependencies(hass, mod_1)