mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 08:47:57 +00:00
Plugwise test maintenance (#126421)
This commit is contained in:
parent
31a1ad8409
commit
962b9915f0
@ -74,7 +74,7 @@ def mock_smile_config_flow() -> Generator[MagicMock]:
|
||||
@pytest.fixture
|
||||
def mock_smile_adam() -> Generator[MagicMock]:
|
||||
"""Create a Mock Adam environment for testing exceptions."""
|
||||
chosen_env = "adam_multiple_devices_per_zone"
|
||||
chosen_env = "m_adam_multiple_devices_per_zone"
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.plugwise.coordinator.Smile", autospec=True
|
||||
@ -309,6 +309,34 @@ def mock_smile_p1_2() -> Generator[MagicMock]:
|
||||
yield smile
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_smile_legacy_anna() -> Generator[None, MagicMock, None]:
|
||||
"""Create a Mock legacy Anna environment for testing exceptions."""
|
||||
chosen_env = "legacy_anna"
|
||||
with patch(
|
||||
"homeassistant.components.plugwise.coordinator.Smile", autospec=True
|
||||
) as smile_mock:
|
||||
smile = smile_mock.return_value
|
||||
|
||||
smile.gateway_id = "0000aaaa0000aaaa0000aaaa0000aa00"
|
||||
smile.heater_id = "04e4cbfe7f4340f090f85ec3b9e6a950"
|
||||
smile.smile_version = "1.8.22"
|
||||
smile.smile_type = "thermostat"
|
||||
smile.smile_hostname = "smile98765"
|
||||
smile.smile_model = "Gateway"
|
||||
smile.smile_model_id = None
|
||||
smile.smile_name = "Smile Anna"
|
||||
|
||||
smile.connect.return_value = True
|
||||
|
||||
all_data = _read_json(chosen_env, "all_data")
|
||||
smile.async_update.return_value = PlugwiseData(
|
||||
all_data["gateway"], all_data["devices"]
|
||||
)
|
||||
|
||||
yield smile
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_stretch() -> Generator[MagicMock]:
|
||||
"""Create a Mock Stretch environment for testing exceptions."""
|
||||
|
68
tests/components/plugwise/fixtures/legacy_anna/all_data.json
Normal file
68
tests/components/plugwise/fixtures/legacy_anna/all_data.json
Normal file
@ -0,0 +1,68 @@
|
||||
{
|
||||
"devices": {
|
||||
"0000aaaa0000aaaa0000aaaa0000aa00": {
|
||||
"dev_class": "gateway",
|
||||
"firmware": "1.8.22",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"mac_address": "01:23:45:67:89:AB",
|
||||
"model": "Gateway",
|
||||
"name": "Smile Anna",
|
||||
"vendor": "Plugwise"
|
||||
},
|
||||
"04e4cbfe7f4340f090f85ec3b9e6a950": {
|
||||
"binary_sensors": {
|
||||
"flame_state": true,
|
||||
"heating_state": true
|
||||
},
|
||||
"dev_class": "heater_central",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"maximum_boiler_temperature": {
|
||||
"lower_bound": 50.0,
|
||||
"resolution": 1.0,
|
||||
"setpoint": 50.0,
|
||||
"upper_bound": 90.0
|
||||
},
|
||||
"model": "Generic heater",
|
||||
"name": "OpenTherm",
|
||||
"sensors": {
|
||||
"dhw_temperature": 51.2,
|
||||
"intended_boiler_temperature": 17.0,
|
||||
"modulation_level": 0.0,
|
||||
"return_temperature": 21.7,
|
||||
"water_pressure": 1.2,
|
||||
"water_temperature": 23.6
|
||||
},
|
||||
"vendor": "Bosch Thermotechniek B.V."
|
||||
},
|
||||
"0d266432d64443e283b5d708ae98b455": {
|
||||
"active_preset": "home",
|
||||
"dev_class": "thermostat",
|
||||
"firmware": "2017-03-13T11:54:58+01:00",
|
||||
"hardware": "6539-1301-500",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"mode": "heat",
|
||||
"model": "ThermoTouch",
|
||||
"name": "Anna",
|
||||
"preset_modes": ["away", "vacation", "asleep", "home", "no_frost"],
|
||||
"sensors": {
|
||||
"illuminance": 151,
|
||||
"setpoint": 20.5,
|
||||
"temperature": 20.4
|
||||
},
|
||||
"thermostat": {
|
||||
"lower_bound": 4.0,
|
||||
"resolution": 0.1,
|
||||
"setpoint": 20.5,
|
||||
"upper_bound": 30.0
|
||||
},
|
||||
"vendor": "Plugwise"
|
||||
}
|
||||
},
|
||||
"gateway": {
|
||||
"cooling_present": false,
|
||||
"gateway_id": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"heater_id": "04e4cbfe7f4340f090f85ec3b9e6a950",
|
||||
"item_count": 41,
|
||||
"smile_name": "Smile Anna"
|
||||
}
|
||||
}
|
@ -403,14 +403,6 @@
|
||||
"e7693eb9582644e5b865dba8d4447cf1": {
|
||||
"active_preset": "no_frost",
|
||||
"available": true,
|
||||
"available_schedules": [
|
||||
"CV Roan",
|
||||
"Bios Schema met Film Avond",
|
||||
"GF7 Woonkamer",
|
||||
"Badkamer Schema",
|
||||
"CV Jessie",
|
||||
"off"
|
||||
],
|
||||
"binary_sensors": {
|
||||
"low_battery": false
|
||||
},
|
||||
@ -423,7 +415,6 @@
|
||||
"model_id": "106-03",
|
||||
"name": "CV Kraan Garage",
|
||||
"preset_modes": ["home", "asleep", "away", "vacation", "no_frost"],
|
||||
"select_schedule": "off",
|
||||
"sensors": {
|
||||
"battery": 68,
|
||||
"setpoint": 5.5,
|
@ -1,340 +0,0 @@
|
||||
{
|
||||
"devices": {
|
||||
"0000aaaa0000aaaa0000aaaa0000aa00": {
|
||||
"dev_class": "gateway",
|
||||
"firmware": "2.3.12",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"mac_address": "01:23:45:67:89:AB",
|
||||
"model": "Gateway",
|
||||
"name": "Stretch",
|
||||
"vendor": "Plugwise",
|
||||
"zigbee_mac_address": "ABCD012345670101"
|
||||
},
|
||||
"09c8ce93d7064fa6a233c0e4c2449bfe": {
|
||||
"dev_class": "lamp",
|
||||
"firmware": "2011-06-27T10:52:18+02:00",
|
||||
"hardware": "0000-0440-0107",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"model": "Circle type F",
|
||||
"name": "kerstboom buiten 043B016",
|
||||
"sensors": {
|
||||
"electricity_consumed": 0.0,
|
||||
"electricity_consumed_interval": 0.0,
|
||||
"electricity_produced": 0.0
|
||||
},
|
||||
"switches": {
|
||||
"lock": false,
|
||||
"relay": false
|
||||
},
|
||||
"vendor": "Plugwise",
|
||||
"zigbee_mac_address": "ABCD012345670A01"
|
||||
},
|
||||
"199fd4b2caa44197aaf5b3128f6464ed": {
|
||||
"dev_class": "airconditioner",
|
||||
"firmware": "2011-06-27T10:52:18+02:00",
|
||||
"hardware": "6539-0701-4026",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"model": "Circle type F",
|
||||
"name": "Airco 25F69E3",
|
||||
"sensors": {
|
||||
"electricity_consumed": 2.06,
|
||||
"electricity_consumed_interval": 1.62,
|
||||
"electricity_produced": 0.0,
|
||||
"electricity_produced_interval": 0.0
|
||||
},
|
||||
"switches": {
|
||||
"lock": false,
|
||||
"relay": true
|
||||
},
|
||||
"vendor": "Plugwise",
|
||||
"zigbee_mac_address": "ABCD012345670A10"
|
||||
},
|
||||
"24b2ed37c8964c73897db6340a39c129": {
|
||||
"dev_class": "router",
|
||||
"firmware": "2011-06-27T10:47:37+02:00",
|
||||
"hardware": "6539-0700-7325",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"model": "Circle+ type F",
|
||||
"name": "MK Netwerk 1A4455E",
|
||||
"sensors": {
|
||||
"electricity_consumed": 4.63,
|
||||
"electricity_consumed_interval": 0.65,
|
||||
"electricity_produced": 0.0,
|
||||
"electricity_produced_interval": 0.0
|
||||
},
|
||||
"switches": {
|
||||
"lock": true,
|
||||
"relay": true
|
||||
},
|
||||
"vendor": "Plugwise",
|
||||
"zigbee_mac_address": "0123456789AB"
|
||||
},
|
||||
"2587a7fcdd7e482dab03fda256076b4b": {
|
||||
"dev_class": "zz_misc",
|
||||
"firmware": "2011-06-27T10:52:18+02:00",
|
||||
"hardware": "0000-0440-0107",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"model": "Circle type F",
|
||||
"name": "00469CA1",
|
||||
"sensors": {
|
||||
"electricity_consumed": 0.0,
|
||||
"electricity_consumed_interval": 0.0,
|
||||
"electricity_produced": 0.0
|
||||
},
|
||||
"switches": {
|
||||
"lock": false,
|
||||
"relay": true
|
||||
},
|
||||
"vendor": "Plugwise",
|
||||
"zigbee_mac_address": "ABCD012345670A16"
|
||||
},
|
||||
"2cc9a0fe70ef4441a9e4f55dfd64b776": {
|
||||
"dev_class": "lamp",
|
||||
"firmware": "2011-06-27T10:52:18+02:00",
|
||||
"hardware": "6539-0701-4026",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"model": "Circle type F",
|
||||
"name": "Lamp TV 025F698F",
|
||||
"sensors": {
|
||||
"electricity_consumed": 4.0,
|
||||
"electricity_consumed_interval": 0.58,
|
||||
"electricity_produced": 0.0,
|
||||
"electricity_produced_interval": 0.0
|
||||
},
|
||||
"switches": {
|
||||
"lock": false,
|
||||
"relay": true
|
||||
},
|
||||
"vendor": "Plugwise",
|
||||
"zigbee_mac_address": "ABCD012345670A15"
|
||||
},
|
||||
"305452ce97c243c0a7b4ab2a4ebfe6e3": {
|
||||
"dev_class": "lamp",
|
||||
"firmware": "2011-06-27T10:52:18+02:00",
|
||||
"hardware": "6539-0701-4026",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"model": "Circle type F",
|
||||
"name": "Lamp piano 025F6819",
|
||||
"sensors": {
|
||||
"electricity_consumed": 0.0,
|
||||
"electricity_consumed_interval": 0.0,
|
||||
"electricity_produced": 0.0,
|
||||
"electricity_produced_interval": 0.0
|
||||
},
|
||||
"switches": {
|
||||
"lock": false,
|
||||
"relay": false
|
||||
},
|
||||
"vendor": "Plugwise",
|
||||
"zigbee_mac_address": "ABCD012345670A05"
|
||||
},
|
||||
"33a1c784a9ff4c2d8766a0212714be09": {
|
||||
"dev_class": "lighting",
|
||||
"firmware": "2011-06-27T10:52:18+02:00",
|
||||
"hardware": "6539-0701-4026",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"model": "Circle type F",
|
||||
"name": "Barverlichting",
|
||||
"sensors": {
|
||||
"electricity_consumed": 0.0,
|
||||
"electricity_consumed_interval": 0.0,
|
||||
"electricity_produced": 0.0,
|
||||
"electricity_produced_interval": 0.0
|
||||
},
|
||||
"switches": {
|
||||
"lock": false,
|
||||
"relay": false
|
||||
},
|
||||
"vendor": "Plugwise",
|
||||
"zigbee_mac_address": "ABCD012345670A13"
|
||||
},
|
||||
"407aa1c1099d463c9137a3a9eda787fd": {
|
||||
"dev_class": "zz_misc",
|
||||
"firmware": "2011-06-27T10:52:18+02:00",
|
||||
"hardware": "0000-0440-0107",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"model": "Circle type F",
|
||||
"name": "0043B013",
|
||||
"sensors": {
|
||||
"electricity_consumed": 0.0,
|
||||
"electricity_consumed_interval": 0.0,
|
||||
"electricity_produced": 0.0
|
||||
},
|
||||
"switches": {
|
||||
"lock": false,
|
||||
"relay": false
|
||||
},
|
||||
"vendor": "Plugwise",
|
||||
"zigbee_mac_address": "ABCD012345670A09"
|
||||
},
|
||||
"6518f3f72a82486c97b91e26f2e9bd1d": {
|
||||
"dev_class": "charger",
|
||||
"firmware": "2011-06-27T10:52:18+02:00",
|
||||
"hardware": "6539-0701-4026",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"model": "Circle type F",
|
||||
"name": "Bed 025F6768",
|
||||
"sensors": {
|
||||
"electricity_consumed": 0.0,
|
||||
"electricity_consumed_interval": 0.0,
|
||||
"electricity_produced": 0.0,
|
||||
"electricity_produced_interval": 0.0
|
||||
},
|
||||
"switches": {
|
||||
"lock": false,
|
||||
"relay": true
|
||||
},
|
||||
"vendor": "Plugwise",
|
||||
"zigbee_mac_address": "ABCD012345670A14"
|
||||
},
|
||||
"713427748874454ca1eb4488d7919cf2": {
|
||||
"dev_class": "freezer",
|
||||
"firmware": "2011-06-27T10:52:18+02:00",
|
||||
"hardware": "0000-0440-0107",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"model": "Circle type F",
|
||||
"name": "Leeg 043220D",
|
||||
"sensors": {
|
||||
"electricity_consumed": 0.0,
|
||||
"electricity_consumed_interval": 0.0,
|
||||
"electricity_produced": 0.0
|
||||
},
|
||||
"switches": {
|
||||
"lock": false,
|
||||
"relay": false
|
||||
},
|
||||
"vendor": "Plugwise",
|
||||
"zigbee_mac_address": "ABCD012345670A12"
|
||||
},
|
||||
"71e3e65ffc5a41518b19460c6e8ee34f": {
|
||||
"dev_class": "tv",
|
||||
"firmware": "2011-06-27T10:52:18+02:00",
|
||||
"hardware": "0000-0440-0107",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"model": "Circle type F",
|
||||
"name": "Leeg 043AEC6",
|
||||
"sensors": {
|
||||
"electricity_consumed": 0.0,
|
||||
"electricity_consumed_interval": 0.0,
|
||||
"electricity_produced": 0.0
|
||||
},
|
||||
"switches": {
|
||||
"lock": false,
|
||||
"relay": false
|
||||
},
|
||||
"vendor": "Plugwise",
|
||||
"zigbee_mac_address": "ABCD012345670A08"
|
||||
},
|
||||
"828f6ce1e36744689baacdd6ddb1d12c": {
|
||||
"dev_class": "washingmachine",
|
||||
"firmware": "2011-06-27T10:52:18+02:00",
|
||||
"hardware": "0000-0440-0107",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"model": "Circle type F",
|
||||
"name": "Wasmachine 043AEC7",
|
||||
"sensors": {
|
||||
"electricity_consumed": 3.5,
|
||||
"electricity_consumed_interval": 0.5,
|
||||
"electricity_produced": 0.0
|
||||
},
|
||||
"switches": {
|
||||
"lock": true,
|
||||
"relay": true
|
||||
},
|
||||
"vendor": "Plugwise",
|
||||
"zigbee_mac_address": "ABCD012345670A02"
|
||||
},
|
||||
"a28e6f5afc0e4fc68498c1f03e82a052": {
|
||||
"dev_class": "lamp",
|
||||
"firmware": "2011-06-27T10:52:18+02:00",
|
||||
"hardware": "6539-0701-4026",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"model": "Circle type F",
|
||||
"name": "Lamp bank 25F67F8",
|
||||
"sensors": {
|
||||
"electricity_consumed": 4.19,
|
||||
"electricity_consumed_interval": 0.62,
|
||||
"electricity_produced": 0.0,
|
||||
"electricity_produced_interval": 0.0
|
||||
},
|
||||
"switches": {
|
||||
"lock": false,
|
||||
"relay": true
|
||||
},
|
||||
"vendor": "Plugwise",
|
||||
"zigbee_mac_address": "ABCD012345670A03"
|
||||
},
|
||||
"bc0adbebc50d428d9444a5d805c89da9": {
|
||||
"dev_class": "watercooker",
|
||||
"firmware": "2011-06-27T10:52:18+02:00",
|
||||
"hardware": "0000-0440-0107",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"model": "Circle type F",
|
||||
"name": "Waterkoker 043AF7F",
|
||||
"sensors": {
|
||||
"electricity_consumed": 0.0,
|
||||
"electricity_consumed_interval": 0.0,
|
||||
"electricity_produced": 0.0
|
||||
},
|
||||
"switches": {
|
||||
"lock": false,
|
||||
"relay": true
|
||||
},
|
||||
"vendor": "Plugwise",
|
||||
"zigbee_mac_address": "ABCD012345670A07"
|
||||
},
|
||||
"c71f1cb2100b42ca942f056dcb7eb01f": {
|
||||
"dev_class": "tv",
|
||||
"firmware": "2011-06-27T10:52:18+02:00",
|
||||
"hardware": "6539-0701-4026",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"model": "Circle type F",
|
||||
"name": "Tv hoek 25F6790",
|
||||
"sensors": {
|
||||
"electricity_consumed": 33.3,
|
||||
"electricity_consumed_interval": 4.93,
|
||||
"electricity_produced": 0.0,
|
||||
"electricity_produced_interval": 0.0
|
||||
},
|
||||
"switches": {
|
||||
"lock": false,
|
||||
"relay": true
|
||||
},
|
||||
"vendor": "Plugwise",
|
||||
"zigbee_mac_address": "ABCD012345670A11"
|
||||
},
|
||||
"f7b145c8492f4dd7a4de760456fdef3e": {
|
||||
"dev_class": "switching",
|
||||
"members": ["407aa1c1099d463c9137a3a9eda787fd"],
|
||||
"model": "Switchgroup",
|
||||
"name": "Test",
|
||||
"switches": {
|
||||
"relay": false
|
||||
}
|
||||
},
|
||||
"fd1b74f59e234a9dae4e23b2b5cf07ed": {
|
||||
"dev_class": "dryer",
|
||||
"firmware": "2011-06-27T10:52:18+02:00",
|
||||
"hardware": "0000-0440-0107",
|
||||
"location": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"model": "Circle type F",
|
||||
"name": "Wasdroger 043AECA",
|
||||
"sensors": {
|
||||
"electricity_consumed": 1.31,
|
||||
"electricity_consumed_interval": 0.21,
|
||||
"electricity_produced": 0.0
|
||||
},
|
||||
"switches": {
|
||||
"lock": true,
|
||||
"relay": true
|
||||
},
|
||||
"vendor": "Plugwise",
|
||||
"zigbee_mac_address": "ABCD012345670A04"
|
||||
}
|
||||
},
|
||||
"gateway": {
|
||||
"gateway_id": "0000aaaa0000aaaa0000aaaa0000aa00",
|
||||
"item_count": 229,
|
||||
"smile_name": "Stretch"
|
||||
}
|
||||
}
|
@ -423,14 +423,6 @@
|
||||
'e7693eb9582644e5b865dba8d4447cf1': dict({
|
||||
'active_preset': 'no_frost',
|
||||
'available': True,
|
||||
'available_schedules': list([
|
||||
'CV Roan',
|
||||
'Bios Schema met Film Avond',
|
||||
'GF7 Woonkamer',
|
||||
'Badkamer Schema',
|
||||
'CV Jessie',
|
||||
'off',
|
||||
]),
|
||||
'binary_sensors': dict({
|
||||
'low_battery': False,
|
||||
}),
|
||||
@ -449,7 +441,6 @@
|
||||
'vacation',
|
||||
'no_frost',
|
||||
]),
|
||||
'select_schedule': 'off',
|
||||
'sensors': dict({
|
||||
'battery': 68,
|
||||
'setpoint': 5.5,
|
||||
|
@ -56,7 +56,7 @@ async def test_anna_climate_binary_sensor_change(
|
||||
async def test_adam_climate_binary_sensor_change(
|
||||
hass: HomeAssistant, mock_smile_adam: MagicMock, init_integration: MockConfigEntry
|
||||
) -> None:
|
||||
"""Test change of climate related binary_sensor entities."""
|
||||
"""Test of a climate related plugwise-notification binary_sensor."""
|
||||
state = hass.states.get("binary_sensor.adam_plugwise_notification")
|
||||
assert state
|
||||
assert state.state == STATE_ON
|
||||
@ -64,3 +64,14 @@ async def test_adam_climate_binary_sensor_change(
|
||||
assert "unreachable" in state.attributes["warning_msg"][0]
|
||||
assert not state.attributes.get("error_msg")
|
||||
assert not state.attributes.get("other_msg")
|
||||
|
||||
|
||||
async def test_p1_v4_binary_sensor_entity(
|
||||
hass: HomeAssistant, mock_smile_p1_2: MagicMock, init_integration: MockConfigEntry
|
||||
) -> None:
|
||||
"""Test of a Smile P1 related plugwise-notification binary_sensor."""
|
||||
state = hass.states.get("binary_sensor.smile_p1_plugwise_notification")
|
||||
assert state
|
||||
assert state.state == STATE_ON
|
||||
assert "warning_msg" in state.attributes
|
||||
assert "connected" in state.attributes["warning_msg"][0]
|
||||
|
@ -3,6 +3,7 @@
|
||||
from datetime import timedelta
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
from freezegun.api import FrozenDateTimeFactory
|
||||
from plugwise.exceptions import PlugwiseError
|
||||
import pytest
|
||||
|
||||
@ -15,7 +16,6 @@ from homeassistant.components.climate import (
|
||||
)
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import HomeAssistantError, ServiceValidationError
|
||||
from homeassistant.util.dt import utcnow
|
||||
|
||||
from tests.common import MockConfigEntry, async_fire_time_changed
|
||||
|
||||
@ -90,11 +90,13 @@ async def test_adam_2_climate_entity_attributes(
|
||||
|
||||
|
||||
async def test_adam_3_climate_entity_attributes(
|
||||
hass: HomeAssistant, mock_smile_adam_3: MagicMock, init_integration: MockConfigEntry
|
||||
hass: HomeAssistant,
|
||||
mock_smile_adam_3: MagicMock,
|
||||
init_integration: MockConfigEntry,
|
||||
freezer: FrozenDateTimeFactory,
|
||||
) -> None:
|
||||
"""Test creation of adam climate device environment."""
|
||||
state = hass.states.get("climate.anna")
|
||||
|
||||
assert state
|
||||
assert state.state == HVACMode.COOL
|
||||
assert state.attributes["hvac_action"] == "cooling"
|
||||
@ -115,17 +117,20 @@ async def test_adam_3_climate_entity_attributes(
|
||||
"heating_state"
|
||||
] = True
|
||||
with patch(HA_PLUGWISE_SMILE_ASYNC_UPDATE, return_value=data):
|
||||
async_fire_time_changed(hass, utcnow() + timedelta(minutes=1))
|
||||
freezer.tick(timedelta(minutes=1))
|
||||
async_fire_time_changed(hass)
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get("climate.anna")
|
||||
assert state
|
||||
assert state.state == HVACMode.HEAT
|
||||
assert state.attributes["hvac_action"] == "heating"
|
||||
assert state.attributes["hvac_modes"] == [
|
||||
HVACMode.OFF,
|
||||
HVACMode.AUTO,
|
||||
HVACMode.HEAT,
|
||||
]
|
||||
|
||||
state = hass.states.get("climate.anna")
|
||||
assert state
|
||||
assert state.state == HVACMode.HEAT
|
||||
assert state.attributes["hvac_action"] == "heating"
|
||||
assert state.attributes["hvac_modes"] == [
|
||||
HVACMode.OFF,
|
||||
HVACMode.AUTO,
|
||||
HVACMode.HEAT,
|
||||
]
|
||||
|
||||
data = mock_smile_adam_3.async_update.return_value
|
||||
data.devices["da224107914542988a88561b4452b0f6"]["select_regulation_mode"] = (
|
||||
"cooling"
|
||||
@ -138,23 +143,25 @@ async def test_adam_3_climate_entity_attributes(
|
||||
"heating_state"
|
||||
] = False
|
||||
with patch(HA_PLUGWISE_SMILE_ASYNC_UPDATE, return_value=data):
|
||||
async_fire_time_changed(hass, utcnow() + timedelta(minutes=1))
|
||||
freezer.tick(timedelta(minutes=1))
|
||||
async_fire_time_changed(hass)
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get("climate.anna")
|
||||
assert state
|
||||
assert state.state == HVACMode.COOL
|
||||
assert state.attributes["hvac_action"] == "cooling"
|
||||
assert state.attributes["hvac_modes"] == [
|
||||
HVACMode.OFF,
|
||||
HVACMode.AUTO,
|
||||
HVACMode.COOL,
|
||||
]
|
||||
|
||||
state = hass.states.get("climate.anna")
|
||||
assert state
|
||||
assert state.state == HVACMode.COOL
|
||||
assert state.attributes["hvac_action"] == "cooling"
|
||||
assert state.attributes["hvac_modes"] == [
|
||||
HVACMode.OFF,
|
||||
HVACMode.AUTO,
|
||||
HVACMode.COOL,
|
||||
]
|
||||
|
||||
|
||||
async def test_adam_climate_adjust_negative_testing(
|
||||
hass: HomeAssistant, mock_smile_adam: MagicMock, init_integration: MockConfigEntry
|
||||
) -> None:
|
||||
"""Test exceptions of climate entities."""
|
||||
"""Test PlugwiseError exception."""
|
||||
mock_smile_adam.set_temperature.side_effect = PlugwiseError
|
||||
|
||||
with pytest.raises(HomeAssistantError):
|
||||
@ -356,6 +363,7 @@ async def test_anna_climate_entity_climate_changes(
|
||||
hass: HomeAssistant,
|
||||
mock_smile_anna: MagicMock,
|
||||
init_integration: MockConfigEntry,
|
||||
freezer: FrozenDateTimeFactory,
|
||||
) -> None:
|
||||
"""Test handling of user requests in anna climate device environment."""
|
||||
await hass.services.async_call(
|
||||
@ -400,11 +408,14 @@ async def test_anna_climate_entity_climate_changes(
|
||||
mock_smile_anna.set_schedule_state.assert_called_with(
|
||||
"c784ee9fdab44e1395b8dee7d7a497d5", "off"
|
||||
)
|
||||
|
||||
data = mock_smile_anna.async_update.return_value
|
||||
data.devices["3cb70739631c4d17a86b8b12e8a5161b"].pop("available_schedules")
|
||||
with patch(HA_PLUGWISE_SMILE_ASYNC_UPDATE, return_value=data):
|
||||
async_fire_time_changed(hass, utcnow() + timedelta(minutes=1))
|
||||
freezer.tick(timedelta(minutes=1))
|
||||
async_fire_time_changed(hass)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
state = hass.states.get("climate.anna")
|
||||
assert state.state == HVACMode.HEAT
|
||||
assert state.attributes["hvac_modes"] == [HVACMode.HEAT_COOL]
|
||||
|
@ -1,14 +1,13 @@
|
||||
"""Test the Plugwise config flow."""
|
||||
|
||||
from ipaddress import ip_address
|
||||
from unittest.mock import AsyncMock, MagicMock, patch
|
||||
from unittest.mock import AsyncMock, MagicMock
|
||||
|
||||
from plugwise.exceptions import (
|
||||
ConnectionFailedError,
|
||||
InvalidAuthentication,
|
||||
InvalidSetupError,
|
||||
InvalidXMLError,
|
||||
ResponseError,
|
||||
UnsupportedDeviceError,
|
||||
)
|
||||
import pytest
|
||||
@ -95,22 +94,6 @@ TEST_DISCOVERY_ADAM = ZeroconfServiceInfo(
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture(name="mock_smile")
|
||||
def mock_smile():
|
||||
"""Create a Mock Smile for testing exceptions."""
|
||||
with patch(
|
||||
"homeassistant.components.plugwise.config_flow.Smile",
|
||||
) as smile_mock:
|
||||
smile_mock.ConnectionFailedError = ConnectionFailedError
|
||||
smile_mock.InvalidAuthentication = InvalidAuthentication
|
||||
smile_mock.InvalidSetupError = InvalidSetupError
|
||||
smile_mock.InvalidXMLError = InvalidXMLError
|
||||
smile_mock.ResponseError = ResponseError
|
||||
smile_mock.UnsupportedDeviceError = UnsupportedDeviceError
|
||||
smile_mock.return_value.connect.return_value = True
|
||||
yield smile_mock.return_value
|
||||
|
||||
|
||||
async def test_form(
|
||||
hass: HomeAssistant,
|
||||
mock_setup_entry: AsyncMock,
|
||||
@ -165,11 +148,12 @@ async def test_zeroconf_flow(
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={CONF_SOURCE: SOURCE_ZEROCONF},
|
||||
data=discovery,
|
||||
data=TEST_DISCOVERY,
|
||||
)
|
||||
assert result.get("type") is FlowResultType.FORM
|
||||
assert result.get("errors") == {}
|
||||
assert result.get("step_id") == "user"
|
||||
assert "flow_id" in result
|
||||
|
||||
result2 = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"],
|
||||
@ -183,7 +167,7 @@ async def test_zeroconf_flow(
|
||||
CONF_HOST: TEST_HOST,
|
||||
CONF_PASSWORD: TEST_PASSWORD,
|
||||
CONF_PORT: DEFAULT_PORT,
|
||||
CONF_USERNAME: username,
|
||||
CONF_USERNAME: TEST_USERNAME,
|
||||
PW_TYPE: API,
|
||||
}
|
||||
|
||||
@ -205,6 +189,7 @@ async def test_zeroconf_flow_stretch(
|
||||
assert result.get("type") is FlowResultType.FORM
|
||||
assert result.get("errors") == {}
|
||||
assert result.get("step_id") == "user"
|
||||
assert "flow_id" in result
|
||||
|
||||
result2 = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"],
|
||||
@ -276,7 +261,6 @@ async def test_zercoconf_discovery_update_configuration(
|
||||
(InvalidAuthentication, "invalid_auth"),
|
||||
(InvalidSetupError, "invalid_setup"),
|
||||
(InvalidXMLError, "response_error"),
|
||||
(ResponseError, "response_error"),
|
||||
(RuntimeError, "unknown"),
|
||||
(UnsupportedDeviceError, "unsupported"),
|
||||
],
|
||||
@ -296,6 +280,7 @@ async def test_flow_errors(
|
||||
assert result.get("type") is FlowResultType.FORM
|
||||
assert result.get("errors") == {}
|
||||
assert result.get("step_id") == "user"
|
||||
assert "flow_id" in result
|
||||
|
||||
mock_smile_config_flow.connect.side_effect = side_effect
|
||||
result2 = await hass.config_entries.flow.async_configure(
|
||||
|
@ -77,3 +77,12 @@ async def test_adam_select_regulation_mode(
|
||||
"heating",
|
||||
"on",
|
||||
)
|
||||
|
||||
|
||||
async def test_legacy_anna_select_entities(
|
||||
hass: HomeAssistant,
|
||||
mock_smile_legacy_anna: MagicMock,
|
||||
init_integration: MockConfigEntry,
|
||||
) -> None:
|
||||
"""Test not creating a select-entity for a legacy Anna without a thermostat-schedule."""
|
||||
assert not hass.states.get("select.anna_thermostat_schedule")
|
||||
|
@ -3,10 +3,10 @@
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
from homeassistant.components.plugwise.const import DOMAIN
|
||||
from homeassistant.const import Platform
|
||||
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
from homeassistant.helpers.entity_component import async_update_entity
|
||||
import homeassistant.helpers.entity_registry as er
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
@ -58,7 +58,7 @@ async def test_unique_id_migration_humidity(
|
||||
|
||||
# Entry to migrate
|
||||
entity_registry.async_get_or_create(
|
||||
Platform.SENSOR,
|
||||
SENSOR_DOMAIN,
|
||||
DOMAIN,
|
||||
"f61f1a2535f54f52ad006a3d18e459ca-relative_humidity",
|
||||
config_entry=mock_config_entry,
|
||||
@ -67,7 +67,7 @@ async def test_unique_id_migration_humidity(
|
||||
)
|
||||
# Entry not needing migration
|
||||
entity_registry.async_get_or_create(
|
||||
Platform.SENSOR,
|
||||
SENSOR_DOMAIN,
|
||||
DOMAIN,
|
||||
"f61f1a2535f54f52ad006a3d18e459ca-battery",
|
||||
config_entry=mock_config_entry,
|
||||
|
@ -11,11 +11,12 @@ from homeassistant.const import (
|
||||
SERVICE_TOGGLE,
|
||||
SERVICE_TURN_OFF,
|
||||
SERVICE_TURN_ON,
|
||||
STATE_OFF,
|
||||
STATE_ON,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import HomeAssistantError
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
import homeassistant.helpers.entity_registry as er
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
@ -49,7 +50,7 @@ async def test_adam_climate_switch_negative_testing(
|
||||
|
||||
assert mock_smile_adam.set_switch_state.call_count == 1
|
||||
mock_smile_adam.set_switch_state.assert_called_with(
|
||||
"78d1126fc4c743db81b61c20e88342a7", None, "relay", "off"
|
||||
"78d1126fc4c743db81b61c20e88342a7", None, "relay", STATE_OFF
|
||||
)
|
||||
|
||||
with pytest.raises(HomeAssistantError):
|
||||
@ -62,7 +63,7 @@ async def test_adam_climate_switch_negative_testing(
|
||||
|
||||
assert mock_smile_adam.set_switch_state.call_count == 2
|
||||
mock_smile_adam.set_switch_state.assert_called_with(
|
||||
"a28f588dc4a049a483fd03a30361ad3a", None, "relay", "on"
|
||||
"a28f588dc4a049a483fd03a30361ad3a", None, "relay", STATE_ON
|
||||
)
|
||||
|
||||
|
||||
@ -79,7 +80,7 @@ async def test_adam_climate_switch_changes(
|
||||
|
||||
assert mock_smile_adam.set_switch_state.call_count == 1
|
||||
mock_smile_adam.set_switch_state.assert_called_with(
|
||||
"78d1126fc4c743db81b61c20e88342a7", None, "relay", "off"
|
||||
"78d1126fc4c743db81b61c20e88342a7", None, "relay", STATE_OFF
|
||||
)
|
||||
|
||||
await hass.services.async_call(
|
||||
@ -91,7 +92,7 @@ async def test_adam_climate_switch_changes(
|
||||
|
||||
assert mock_smile_adam.set_switch_state.call_count == 2
|
||||
mock_smile_adam.set_switch_state.assert_called_with(
|
||||
"a28f588dc4a049a483fd03a30361ad3a", None, "relay", "off"
|
||||
"a28f588dc4a049a483fd03a30361ad3a", None, "relay", STATE_OFF
|
||||
)
|
||||
|
||||
await hass.services.async_call(
|
||||
@ -103,7 +104,7 @@ async def test_adam_climate_switch_changes(
|
||||
|
||||
assert mock_smile_adam.set_switch_state.call_count == 3
|
||||
mock_smile_adam.set_switch_state.assert_called_with(
|
||||
"a28f588dc4a049a483fd03a30361ad3a", None, "relay", "on"
|
||||
"a28f588dc4a049a483fd03a30361ad3a", None, "relay", STATE_ON
|
||||
)
|
||||
|
||||
|
||||
@ -132,7 +133,7 @@ async def test_stretch_switch_changes(
|
||||
)
|
||||
assert mock_stretch.set_switch_state.call_count == 1
|
||||
mock_stretch.set_switch_state.assert_called_with(
|
||||
"e1c884e7dede431dadee09506ec4f859", None, "relay", "off"
|
||||
"e1c884e7dede431dadee09506ec4f859", None, "relay", STATE_OFF
|
||||
)
|
||||
|
||||
await hass.services.async_call(
|
||||
@ -143,7 +144,7 @@ async def test_stretch_switch_changes(
|
||||
)
|
||||
assert mock_stretch.set_switch_state.call_count == 2
|
||||
mock_stretch.set_switch_state.assert_called_with(
|
||||
"cfe95cf3de1948c0b8955125bf754614", None, "relay", "off"
|
||||
"cfe95cf3de1948c0b8955125bf754614", None, "relay", STATE_OFF
|
||||
)
|
||||
|
||||
await hass.services.async_call(
|
||||
@ -154,7 +155,7 @@ async def test_stretch_switch_changes(
|
||||
)
|
||||
assert mock_stretch.set_switch_state.call_count == 3
|
||||
mock_stretch.set_switch_state.assert_called_with(
|
||||
"cfe95cf3de1948c0b8955125bf754614", None, "relay", "on"
|
||||
"cfe95cf3de1948c0b8955125bf754614", None, "relay", STATE_ON
|
||||
)
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user