mirror of https://github.com/home-assistant/core
197 lines
6.7 KiB
Python
197 lines
6.7 KiB
Python
"""Fixtures for the Whirlpool Sixth Sense integration tests."""
|
|
|
|
from unittest import mock
|
|
from unittest.mock import AsyncMock, MagicMock
|
|
|
|
import pytest
|
|
import whirlpool
|
|
import whirlpool.aircon
|
|
from whirlpool.backendselector import Brand, Region
|
|
|
|
MOCK_SAID1 = "said1"
|
|
MOCK_SAID2 = "said2"
|
|
MOCK_SAID3 = "said3"
|
|
MOCK_SAID4 = "said4"
|
|
|
|
|
|
@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")
|
|
def fixture_mock_auth_api():
|
|
"""Set up Auth fixture."""
|
|
with mock.patch("homeassistant.components.whirlpool.Auth") as mock_auth:
|
|
mock_auth.return_value.do_auth = AsyncMock()
|
|
mock_auth.return_value.is_access_token_valid.return_value = True
|
|
yield mock_auth
|
|
|
|
|
|
@pytest.fixture(name="mock_appliances_manager_api")
|
|
def fixture_mock_appliances_manager_api():
|
|
"""Set up AppliancesManager fixture."""
|
|
with mock.patch(
|
|
"homeassistant.components.whirlpool.AppliancesManager"
|
|
) as mock_appliances_manager:
|
|
mock_appliances_manager.return_value.fetch_appliances = AsyncMock()
|
|
mock_appliances_manager.return_value.aircons = [
|
|
{"SAID": MOCK_SAID1, "NAME": "TestZone"},
|
|
{"SAID": MOCK_SAID2, "NAME": "TestZone"},
|
|
]
|
|
mock_appliances_manager.return_value.washer_dryers = [
|
|
{"SAID": MOCK_SAID3, "NAME": "washer"},
|
|
{"SAID": MOCK_SAID4, "NAME": "dryer"},
|
|
]
|
|
yield mock_appliances_manager
|
|
|
|
|
|
@pytest.fixture(name="mock_appliances_manager_laundry_api")
|
|
def fixture_mock_appliances_manager_laundry_api():
|
|
"""Set up AppliancesManager fixture."""
|
|
with mock.patch(
|
|
"homeassistant.components.whirlpool.AppliancesManager"
|
|
) as mock_appliances_manager:
|
|
mock_appliances_manager.return_value.fetch_appliances = AsyncMock()
|
|
mock_appliances_manager.return_value.aircons = None
|
|
mock_appliances_manager.return_value.washer_dryers = [
|
|
{"SAID": MOCK_SAID3, "NAME": "washer"},
|
|
{"SAID": MOCK_SAID4, "NAME": "dryer"},
|
|
]
|
|
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:
|
|
yield mock_backend_selector
|
|
|
|
|
|
def get_aircon_mock(said):
|
|
"""Get a mock of an air conditioner."""
|
|
mock_aircon = mock.Mock(said=said)
|
|
mock_aircon.connect = AsyncMock()
|
|
mock_aircon.disconnect = AsyncMock()
|
|
mock_aircon.register_attr_callback = MagicMock()
|
|
mock_aircon.get_online.return_value = True
|
|
mock_aircon.get_power_on.return_value = True
|
|
mock_aircon.get_mode.return_value = whirlpool.aircon.Mode.Cool
|
|
mock_aircon.get_fanspeed.return_value = whirlpool.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
|
|
|
|
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
|
|
|
|
|
|
@pytest.fixture(name="mock_aircon1_api", autouse=False)
|
|
def fixture_mock_aircon1_api(mock_auth_api, mock_appliances_manager_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(mock_auth_api, mock_appliances_manager_api):
|
|
"""Set up air conditioner API fixture."""
|
|
return get_aircon_mock(MOCK_SAID2)
|
|
|
|
|
|
@pytest.fixture(name="mock_aircon_api_instances", autouse=False)
|
|
def fixture_mock_aircon_api_instances(mock_aircon1_api, mock_aircon2_api):
|
|
"""Set up air conditioner API fixture."""
|
|
with mock.patch(
|
|
"homeassistant.components.whirlpool.climate.Aircon"
|
|
) as mock_aircon_api:
|
|
mock_aircon_api.side_effect = [mock_aircon1_api, mock_aircon2_api]
|
|
yield mock_aircon_api
|
|
|
|
|
|
def side_effect_function(*args, **kwargs):
|
|
"""Return correct value for attribute."""
|
|
if args[0] == "Cavity_TimeStatusEstTimeRemaining":
|
|
return 3540
|
|
if args[0] == "Cavity_OpStatusDoorOpen":
|
|
return "0"
|
|
if args[0] == "WashCavity_OpStatusBulkDispense1Level":
|
|
return "3"
|
|
|
|
return None
|
|
|
|
|
|
def get_sensor_mock(said):
|
|
"""Get a mock of a sensor."""
|
|
mock_sensor = mock.Mock(said=said)
|
|
mock_sensor.connect = AsyncMock()
|
|
mock_sensor.disconnect = AsyncMock()
|
|
mock_sensor.register_attr_callback = MagicMock()
|
|
mock_sensor.get_online.return_value = True
|
|
mock_sensor.get_machine_state.return_value = (
|
|
whirlpool.washerdryer.MachineState.Standby
|
|
)
|
|
mock_sensor.get_attribute.side_effect = side_effect_function
|
|
mock_sensor.get_cycle_status_filling.return_value = False
|
|
mock_sensor.get_cycle_status_rinsing.return_value = False
|
|
mock_sensor.get_cycle_status_sensing.return_value = False
|
|
mock_sensor.get_cycle_status_soaking.return_value = False
|
|
mock_sensor.get_cycle_status_spinning.return_value = False
|
|
mock_sensor.get_cycle_status_washing.return_value = False
|
|
|
|
return mock_sensor
|
|
|
|
|
|
@pytest.fixture(name="mock_sensor1_api", autouse=False)
|
|
def fixture_mock_sensor1_api(mock_auth_api, mock_appliances_manager_laundry_api):
|
|
"""Set up sensor API fixture."""
|
|
return get_sensor_mock(MOCK_SAID3)
|
|
|
|
|
|
@pytest.fixture(name="mock_sensor2_api", autouse=False)
|
|
def fixture_mock_sensor2_api(mock_auth_api, mock_appliances_manager_laundry_api):
|
|
"""Set up sensor API fixture."""
|
|
return get_sensor_mock(MOCK_SAID4)
|
|
|
|
|
|
@pytest.fixture(name="mock_sensor_api_instances", autouse=False)
|
|
def fixture_mock_sensor_api_instances(mock_sensor1_api, mock_sensor2_api):
|
|
"""Set up sensor API fixture."""
|
|
with mock.patch(
|
|
"homeassistant.components.whirlpool.sensor.WasherDryer"
|
|
) as mock_sensor_api:
|
|
mock_sensor_api.side_effect = [
|
|
mock_sensor1_api,
|
|
mock_sensor2_api,
|
|
mock_sensor1_api,
|
|
mock_sensor2_api,
|
|
]
|
|
yield mock_sensor_api
|