From 50fe29ccc1191e0624c618304fc6efb4abf92d5c Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Thu, 13 Jun 2024 16:57:20 +0200 Subject: [PATCH] Fix attribute-defined-outside-init in harmony tests (#119614) --- tests/components/harmony/conftest.py | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/tests/components/harmony/conftest.py b/tests/components/harmony/conftest.py index 1e6bbd7a3c3..fb4be73aa72 100644 --- a/tests/components/harmony/conftest.py +++ b/tests/components/harmony/conftest.py @@ -4,6 +4,7 @@ from unittest.mock import AsyncMock, MagicMock, PropertyMock, patch from aioharmony.const import ClientCallbackType import pytest +from typing_extensions import Generator from homeassistant.components.harmony.const import ACTIVITY_POWER_OFF, DOMAIN from homeassistant.const import CONF_HOST, CONF_NAME @@ -46,21 +47,17 @@ IDS_TO_DEVICES = { class FakeHarmonyClient: """FakeHarmonyClient to mock away network calls.""" - def initialize( - self, ip_address: str = "", callbacks: ClientCallbackType = MagicMock() - ): + _callbacks: ClientCallbackType + + def __init__(self) -> None: """Initialize FakeHarmonyClient class to capture callbacks.""" - # pylint: disable=attribute-defined-outside-init self._activity_name = "Watch TV" self.close = AsyncMock() self.send_commands = AsyncMock() self.change_channel = AsyncMock() self.sync = AsyncMock() - self._callbacks = callbacks self.fw_version = "123.456" - return self - async def connect(self): """Connect and call the appropriate callbacks.""" self._callbacks.connect(None) @@ -152,20 +149,27 @@ class FakeHarmonyClient: @pytest.fixture -def harmony_client(): +def harmony_client() -> FakeHarmonyClient: """Create the FakeHarmonyClient instance.""" return FakeHarmonyClient() @pytest.fixture -def mock_hc(harmony_client): +def mock_hc(harmony_client: FakeHarmonyClient) -> Generator[None]: """Patch the real HarmonyClient with initialization side effect.""" + def _on_create_instance( + ip_address: str, callbacks: ClientCallbackType + ) -> FakeHarmonyClient: + """Set client callbacks on instance creation.""" + harmony_client._callbacks = callbacks + return harmony_client + with patch( "homeassistant.components.harmony.data.HarmonyClient", - side_effect=harmony_client.initialize, - ) as fake: - yield fake + side_effect=_on_create_instance, + ): + yield @pytest.fixture