From 44f2897919dd4645d56facbdbadf7c3849de16a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ab=C3=ADlio=20Costa?= Date: Tue, 22 Apr 2025 08:07:18 +0100 Subject: [PATCH] Use `spec` for Whirlpool mocks (#143416) Use `spec` to cleanup unecessary mock function definitions. --- tests/components/whirlpool/conftest.py | 53 +++++++++----------------- 1 file changed, 19 insertions(+), 34 deletions(-) diff --git a/tests/components/whirlpool/conftest.py b/tests/components/whirlpool/conftest.py index f59b2d015fc..7447c1edd5a 100644 --- a/tests/components/whirlpool/conftest.py +++ b/tests/components/whirlpool/conftest.py @@ -1,10 +1,10 @@ """Fixtures for the Whirlpool Sixth Sense integration tests.""" from unittest import mock -from unittest.mock import AsyncMock, MagicMock +from unittest.mock import Mock import pytest -from whirlpool import aircon, washerdryer +from whirlpool import aircon, appliancesmanager, auth, washerdryer from whirlpool.backendselector import Brand, Region from .const import MOCK_SAID1, MOCK_SAID2 @@ -36,12 +36,13 @@ def fixture_brand(request: pytest.FixtureRequest) -> tuple[str, Brand]: def fixture_mock_auth_api(): """Set up Auth fixture.""" with ( - mock.patch("homeassistant.components.whirlpool.Auth") as mock_auth, + mock.patch( + "homeassistant.components.whirlpool.Auth", spec=auth.Auth + ) as mock_auth, mock.patch( "homeassistant.components.whirlpool.config_flow.Auth", new=mock_auth ), ): - mock_auth.return_value.do_auth = AsyncMock() mock_auth.return_value.is_access_token_valid.return_value = True yield mock_auth @@ -53,16 +54,14 @@ def fixture_mock_appliances_manager_api( """Set up AppliancesManager fixture.""" with ( mock.patch( - "homeassistant.components.whirlpool.AppliancesManager" + "homeassistant.components.whirlpool.AppliancesManager", + spec=appliancesmanager.AppliancesManager, ) as mock_appliances_manager, mock.patch( "homeassistant.components.whirlpool.config_flow.AppliancesManager", new=mock_appliances_manager, ), ): - mock_appliances_manager.return_value.fetch_appliances = AsyncMock() - mock_appliances_manager.return_value.connect = AsyncMock() - mock_appliances_manager.return_value.disconnect = AsyncMock() mock_appliances_manager.return_value.aircons = [ mock_aircon1_api, mock_aircon2_api, @@ -91,12 +90,11 @@ def fixture_mock_backend_selector_api(): def get_aircon_mock(said): """Get a mock of an air conditioner.""" - mock_aircon = mock.Mock(said=said) + mock_aircon = Mock(spec=aircon.Aircon, said=said) mock_aircon.name = f"Aircon {said}" - mock_aircon.register_attr_callback = MagicMock() - mock_aircon.appliance_info.data_model = "aircon_model" - mock_aircon.appliance_info.category = "aircon" - mock_aircon.appliance_info.model_number = "12345" + mock_aircon.appliance_info = Mock( + data_model="aircon_model", category="aircon", model_number="12345" + ) mock_aircon.get_online.return_value = True mock_aircon.get_power_on.return_value = True mock_aircon.get_mode.return_value = aircon.Mode.Cool @@ -107,14 +105,6 @@ def get_aircon_mock(said): mock_aircon.get_humidity.return_value = 50 mock_aircon.get_h_louver_swing.return_value = True - mock_aircon.set_power_on = AsyncMock() - mock_aircon.set_mode = AsyncMock() - mock_aircon.set_temp = AsyncMock() - mock_aircon.set_humidity = AsyncMock() - mock_aircon.set_mode = AsyncMock() - mock_aircon.set_fanspeed = AsyncMock() - mock_aircon.set_h_louver_swing = AsyncMock() - return mock_aircon @@ -133,13 +123,11 @@ def fixture_mock_aircon2_api(): @pytest.fixture def mock_washer_api(): """Get a mock of a washer.""" - mock_washer = mock.Mock(said="said_washer") + mock_washer = Mock(spec=washerdryer.WasherDryer, said="said_washer") mock_washer.name = "Washer" - mock_washer.fetch_data = AsyncMock() - mock_washer.register_attr_callback = MagicMock() - mock_washer.appliance_info.data_model = "washer" - mock_washer.appliance_info.category = "washer_dryer" - mock_washer.appliance_info.model_number = "12345" + mock_washer.appliance_info = Mock( + data_model="washer", category="washer_dryer", model_number="12345" + ) mock_washer.get_online.return_value = True mock_washer.get_machine_state.return_value = ( washerdryer.MachineState.RunningMainCycle @@ -160,13 +148,11 @@ def mock_washer_api(): @pytest.fixture def mock_dryer_api(): """Get a mock of a dryer.""" - mock_dryer = mock.Mock(said="said_dryer") + mock_dryer = mock.Mock(spec=washerdryer.WasherDryer, said="said_dryer") mock_dryer.name = "Dryer" - mock_dryer.fetch_data = AsyncMock() - mock_dryer.register_attr_callback = MagicMock() - mock_dryer.appliance_info.data_model = "dryer" - mock_dryer.appliance_info.category = "washer_dryer" - mock_dryer.appliance_info.model_number = "12345" + mock_dryer.appliance_info = Mock( + data_model="dryer", category="washer_dryer", model_number="12345" + ) mock_dryer.get_online.return_value = True mock_dryer.get_machine_state.return_value = ( washerdryer.MachineState.RunningMainCycle @@ -179,5 +165,4 @@ def mock_dryer_api(): mock_dryer.get_cycle_status_soaking.return_value = False mock_dryer.get_cycle_status_spinning.return_value = False mock_dryer.get_cycle_status_washing.return_value = False - return mock_dryer