Skip to content

Commit

Permalink
Add support for multiple Whirlpool airconditioners (home-assistant#57588
Browse files Browse the repository at this point in the history
)
  • Loading branch information
abmantis authored Oct 13, 2021
1 parent 3b1938d commit c97acf8
Show file tree
Hide file tree
Showing 3 changed files with 365 additions and 290 deletions.
4 changes: 2 additions & 2 deletions homeassistant/components/whirlpool/climate.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,8 @@ async def async_setup_entry(hass, config_entry, async_add_entities):

# the whirlpool library needs to be updated to be able to support more
# than one device, so we use only the first one for now
aircon = AirConEntity(said_list[0], auth)
async_add_entities([aircon], True)
aircons = [AirConEntity(said, auth) for said in said_list]
async_add_entities(aircons, True)


class AirConEntity(ClimateEntity):
Expand Down
63 changes: 45 additions & 18 deletions tests/components/whirlpool/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@

import pytest
import whirlpool
import whirlpool.aircon

MOCK_SAID = "said1"
MOCK_SAID1 = "said1"
MOCK_SAID2 = "said2"


@pytest.fixture(name="mock_auth_api")
Expand All @@ -14,28 +16,53 @@ def fixture_mock_auth_api():
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
mock_auth.return_value.get_said_list.return_value = [MOCK_SAID]
mock_auth.return_value.get_said_list.return_value = [MOCK_SAID1, MOCK_SAID2]
yield mock_auth


@pytest.fixture(name="mock_aircon_api", autouse=True)
def fixture_mock_aircon_api(mock_auth_api):
def get_aircon_mock(said):
"""Get a mock of an air conditioner."""
mock_aircon = mock.Mock(said=said)
mock_aircon.connect = AsyncMock()
mock_aircon.fetch_name = AsyncMock(return_value="TestZone")
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=True)
def fixture_mock_aircon1_api(mock_auth_api):
"""Set up air conditioner API fixture."""
yield get_aircon_mock(MOCK_SAID1)


@pytest.fixture(name="mock_aircon2_api", autouse=True)
def fixture_mock_aircon2_api(mock_auth_api):
"""Set up air conditioner API fixture."""
yield get_aircon_mock(MOCK_SAID2)


@pytest.fixture(name="mock_aircon_api_instances", autouse=True)
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.return_value.connect = AsyncMock()
mock_aircon_api.return_value.fetch_name = AsyncMock(return_value="TestZone")
mock_aircon_api.return_value.said = MOCK_SAID
mock_aircon_api.return_value.get_online.return_value = True
mock_aircon_api.return_value.get_power_on.return_value = True
mock_aircon_api.return_value.get_mode.return_value = whirlpool.aircon.Mode.Cool
mock_aircon_api.return_value.get_fanspeed.return_value = (
whirlpool.aircon.FanSpeed.Auto
)
mock_aircon_api.return_value.get_current_temp.return_value = 15
mock_aircon_api.return_value.get_temp.return_value = 20
mock_aircon_api.return_value.get_current_humidity.return_value = 80
mock_aircon_api.return_value.get_humidity.return_value = 50
mock_aircon_api.return_value.get_h_louver_swing.return_value = True
mock_aircon_api.side_effect = [mock_aircon1_api, mock_aircon2_api]
yield mock_aircon_api
Loading

0 comments on commit c97acf8

Please sign in to comment.