Abílio Costa 44f2897919
Use spec for Whirlpool mocks (#143416)
Use `spec` to cleanup unecessary mock function definitions.
2025-04-22 10:07:18 +03:00

169 lines
5.6 KiB
Python

"""Fixtures for the Whirlpool Sixth Sense integration tests."""
from unittest import mock
from unittest.mock import Mock
import pytest
from whirlpool import aircon, appliancesmanager, auth, washerdryer
from whirlpool.backendselector import Brand, Region
from .const import MOCK_SAID1, MOCK_SAID2
@pytest.fixture(
name="region",
params=[("EU", Region.EU), ("US", Region.US)],
)
def fixture_region(request: pytest.FixtureRequest) -> tuple[str, Region]:
"""Return a region for input."""
return request.param
@pytest.fixture(
name="brand",
params=[
("Whirlpool", Brand.Whirlpool),
("KitchenAid", Brand.KitchenAid),
("Maytag", Brand.Maytag),
],
)
def fixture_brand(request: pytest.FixtureRequest) -> tuple[str, Brand]:
"""Return a brand for input."""
return request.param
@pytest.fixture(name="mock_auth_api", autouse=True)
def fixture_mock_auth_api():
"""Set up Auth fixture."""
with (
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.is_access_token_valid.return_value = True
yield mock_auth
@pytest.fixture(name="mock_appliances_manager_api", autouse=True)
def fixture_mock_appliances_manager_api(
mock_aircon1_api, mock_aircon2_api, mock_washer_api, mock_dryer_api
):
"""Set up AppliancesManager fixture."""
with (
mock.patch(
"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.aircons = [
mock_aircon1_api,
mock_aircon2_api,
]
mock_appliances_manager.return_value.washer_dryers = [
mock_washer_api,
mock_dryer_api,
]
yield mock_appliances_manager
@pytest.fixture(name="mock_backend_selector_api")
def fixture_mock_backend_selector_api():
"""Set up BackendSelector fixture."""
with (
mock.patch(
"homeassistant.components.whirlpool.BackendSelector"
) as mock_backend_selector,
mock.patch(
"homeassistant.components.whirlpool.config_flow.BackendSelector",
new=mock_backend_selector,
),
):
yield mock_backend_selector
def get_aircon_mock(said):
"""Get a mock of an air conditioner."""
mock_aircon = Mock(spec=aircon.Aircon, said=said)
mock_aircon.name = f"Aircon {said}"
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
mock_aircon.get_fanspeed.return_value = aircon.FanSpeed.Auto
mock_aircon.get_current_temp.return_value = 15
mock_aircon.get_temp.return_value = 20
mock_aircon.get_current_humidity.return_value = 80
mock_aircon.get_humidity.return_value = 50
mock_aircon.get_h_louver_swing.return_value = True
return mock_aircon
@pytest.fixture(name="mock_aircon1_api", autouse=False)
def fixture_mock_aircon1_api():
"""Set up air conditioner API fixture."""
return get_aircon_mock(MOCK_SAID1)
@pytest.fixture(name="mock_aircon2_api", autouse=False)
def fixture_mock_aircon2_api():
"""Set up air conditioner API fixture."""
return get_aircon_mock(MOCK_SAID2)
@pytest.fixture
def mock_washer_api():
"""Get a mock of a washer."""
mock_washer = Mock(spec=washerdryer.WasherDryer, said="said_washer")
mock_washer.name = "Washer"
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
)
mock_washer.get_door_open.return_value = False
mock_washer.get_dispense_1_level.return_value = 3
mock_washer.get_time_remaining.return_value = 3540
mock_washer.get_cycle_status_filling.return_value = False
mock_washer.get_cycle_status_rinsing.return_value = False
mock_washer.get_cycle_status_sensing.return_value = False
mock_washer.get_cycle_status_soaking.return_value = False
mock_washer.get_cycle_status_spinning.return_value = False
mock_washer.get_cycle_status_washing.return_value = False
return mock_washer
@pytest.fixture
def mock_dryer_api():
"""Get a mock of a dryer."""
mock_dryer = mock.Mock(spec=washerdryer.WasherDryer, said="said_dryer")
mock_dryer.name = "Dryer"
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
)
mock_dryer.get_door_open.return_value = False
mock_dryer.get_time_remaining.return_value = 3540
mock_dryer.get_cycle_status_filling.return_value = False
mock_dryer.get_cycle_status_rinsing.return_value = False
mock_dryer.get_cycle_status_sensing.return_value = False
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