mirror of
https://github.com/home-assistant/core.git
synced 2025-07-14 16:57:10 +00:00
Add snapshot tests to moehlenhoff_alpha2 (#117967)
* Add tests to moehlenhoff_alpha2 * Adjust coverage * Adjust coverage * Adjust coverage * Adjust patch * Adjust
This commit is contained in:
parent
bbe8e69795
commit
bc51a4c524
@ -805,9 +805,7 @@ omit =
|
||||
homeassistant/components/modem_callerid/button.py
|
||||
homeassistant/components/modem_callerid/sensor.py
|
||||
homeassistant/components/moehlenhoff_alpha2/__init__.py
|
||||
homeassistant/components/moehlenhoff_alpha2/binary_sensor.py
|
||||
homeassistant/components/moehlenhoff_alpha2/climate.py
|
||||
homeassistant/components/moehlenhoff_alpha2/sensor.py
|
||||
homeassistant/components/monzo/__init__.py
|
||||
homeassistant/components/monzo/api.py
|
||||
homeassistant/components/motion_blinds/__init__.py
|
||||
|
@ -1 +1,41 @@
|
||||
"""Tests for the moehlenhoff_alpha2 integration."""
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
import xmltodict
|
||||
|
||||
from homeassistant.components.moehlenhoff_alpha2.const import DOMAIN
|
||||
from homeassistant.const import CONF_HOST
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from tests.common import MockConfigEntry, load_fixture
|
||||
|
||||
MOCK_BASE_HOST = "fake-base-host"
|
||||
|
||||
|
||||
async def mock_update_data(self):
|
||||
"""Mock moehlenhoff_alpha2.Alpha2Base.update_data."""
|
||||
data = xmltodict.parse(load_fixture("static2.xml", DOMAIN))
|
||||
for _type in ("HEATAREA", "HEATCTRL", "IODEVICE"):
|
||||
if not isinstance(data["Devices"]["Device"][_type], list):
|
||||
data["Devices"]["Device"][_type] = [data["Devices"]["Device"][_type]]
|
||||
self.static_data = data
|
||||
|
||||
|
||||
async def init_integration(hass: HomeAssistant) -> MockConfigEntry:
|
||||
"""Mock integration setup."""
|
||||
with patch(
|
||||
"homeassistant.components.moehlenhoff_alpha2.Alpha2Base.update_data",
|
||||
mock_update_data,
|
||||
):
|
||||
entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
data={
|
||||
CONF_HOST: MOCK_BASE_HOST,
|
||||
},
|
||||
entry_id="6fa019921cf8e7a3f57a3c2ed001a10d",
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
await hass.config_entries.async_setup(entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
return entry
|
||||
|
268
tests/components/moehlenhoff_alpha2/fixtures/static2.xml
Normal file
268
tests/components/moehlenhoff_alpha2/fixtures/static2.xml
Normal file
@ -0,0 +1,268 @@
|
||||
<Devices>
|
||||
<Device>
|
||||
<ID>Alpha2Test</ID>
|
||||
<TYPE>EZRCTRL1</TYPE>
|
||||
<NAME>Alpha2Test</NAME>
|
||||
<ORIGIN>Alpha2Test</ORIGIN>
|
||||
<CID>03E8</CID>
|
||||
<ERRORCOUNT>0</ERRORCOUNT>
|
||||
<DATETIME>2021-03-28T22:32:01</DATETIME>
|
||||
<DAYOFWEEK>7</DAYOFWEEK>
|
||||
<TIMEZONE>1</TIMEZONE>
|
||||
<NTPTIMESYNC>1</NTPTIMESYNC>
|
||||
<VERS_SW_STM>02.02</VERS_SW_STM>
|
||||
<VERS_SW_ETH>02.10</VERS_SW_ETH>
|
||||
<VERS_HW>01</VERS_HW>
|
||||
<TEMPERATUREUNIT>0</TEMPERATUREUNIT>
|
||||
<SUMMERWINTER>1</SUMMERWINTER>
|
||||
<TPS>0</TPS>
|
||||
<LIMITER>0</LIMITER>
|
||||
<MASTERID>MASTERID</MASTERID>
|
||||
<CHANGEOVER>0</CHANGEOVER>
|
||||
<COOLING>0</COOLING>
|
||||
<MODE>0</MODE>
|
||||
<OPERATIONMODE_ACTOR>0</OPERATIONMODE_ACTOR>
|
||||
<ANTIFREEZE>1</ANTIFREEZE>
|
||||
<ANTIFREEZE_TEMP>8.0</ANTIFREEZE_TEMP>
|
||||
<FIRSTOPEN_TIME>10</FIRSTOPEN_TIME>
|
||||
<SMARTSTART>0</SMARTSTART>
|
||||
<LOCK_MODE>?</LOCK_MODE>
|
||||
<ECO_DIFF>2.0</ECO_DIFF>
|
||||
<ECO_INPUTMODE>0</ECO_INPUTMODE>
|
||||
<ECO_INPUT_STATE>0</ECO_INPUT_STATE>
|
||||
<T_HEAT_VACATION>16.0</T_HEAT_VACATION>
|
||||
<VACATION>
|
||||
<VACATION_STATE>0</VACATION_STATE>
|
||||
<START_DATE>2021-00-00</START_DATE>
|
||||
<START_TIME>12:00:00</START_TIME>
|
||||
<END_DATE>2021-00-00</END_DATE>
|
||||
<END_TIME>12:00:00</END_TIME>
|
||||
</VACATION>
|
||||
<NETWORK>
|
||||
<MAC>88:EE:10:01:10:01</MAC>
|
||||
<DHCP>1</DHCP>
|
||||
<IPV6ACTIVE>0</IPV6ACTIVE>
|
||||
<IPV4ACTUAL>192.168.130.171</IPV4ACTUAL>
|
||||
<IPV4SET>192.168.100.100</IPV4SET>
|
||||
<IPV6ACTUAL/>
|
||||
<IPV6SET/>
|
||||
<NETMASKACTUAL>255.255.255.0</NETMASKACTUAL>
|
||||
<NETMASKSET>255.255.255.0</NETMASKSET>
|
||||
<DNS>192.168.130.10</DNS>
|
||||
<GATEWAY>192.168.130.1</GATEWAY>
|
||||
</NETWORK>
|
||||
<CLOUD>
|
||||
<USERID>4724520342C455A5</USERID>
|
||||
<PASSWORD>406AEFC55B49673275B4A526E1E903</PASSWORD>
|
||||
<M2MSERVERPORT>55555</M2MSERVERPORT>
|
||||
<M2MLOCALPORT>53900</M2MLOCALPORT>
|
||||
<M2MHTTPPORT>53900</M2MHTTPPORT>
|
||||
<M2MHTTPSPORT>57995</M2MHTTPSPORT>
|
||||
<M2MSERVERADDRESS>www.ezr-cloud1.de</M2MSERVERADDRESS>
|
||||
<M2MACTIVE>1</M2MACTIVE>
|
||||
<M2MSTATE>Online</M2MSTATE>
|
||||
</CLOUD>
|
||||
<KWLCTRL>
|
||||
<KWL_CONTROL_VISIBLE>0</KWL_CONTROL_VISIBLE>
|
||||
<KWL_PRESENT>0</KWL_PRESENT>
|
||||
<KWL_CONNECTION>0</KWL_CONNECTION>
|
||||
<KWL_URL>---</KWL_URL>
|
||||
<KWL_PORT>7777</KWL_PORT>
|
||||
<KWL_STATUS>0</KWL_STATUS>
|
||||
<KWL_FLOWCTRL>0</KWL_FLOWCTRL>
|
||||
</KWLCTRL>
|
||||
<CODE>
|
||||
<EXPERT>42BA517ADAE755A4</EXPERT>
|
||||
</CODE>
|
||||
<PROGRAM>
|
||||
<SHIFT_PROGRAM nr="1" shiftingtime="1">
|
||||
<START>05:30</START>
|
||||
<END>21:00</END>
|
||||
</SHIFT_PROGRAM>
|
||||
<SHIFT_PROGRAM nr="2" shiftingtime="1">
|
||||
<START>04:30</START>
|
||||
<END>08:30</END>
|
||||
</SHIFT_PROGRAM>
|
||||
<SHIFT_PROGRAM nr="2" shiftingtime="2">
|
||||
<START>17:30</START>
|
||||
<END>21:30</END>
|
||||
</SHIFT_PROGRAM>
|
||||
<SHIFT_PROGRAM nr="3" shiftingtime="1">
|
||||
<START>06:30</START>
|
||||
<END>10:00</END>
|
||||
</SHIFT_PROGRAM>
|
||||
<SHIFT_PROGRAM nr="3" shiftingtime="2">
|
||||
<START>18:00</START>
|
||||
<END>22:30</END>
|
||||
</SHIFT_PROGRAM>
|
||||
<SHIFT_PROGRAM nr="4" shiftingtime="1">
|
||||
<START>07:30</START>
|
||||
<END>17:30</END>
|
||||
</SHIFT_PROGRAM>
|
||||
</PROGRAM>
|
||||
<PUMP_OUTPUT>
|
||||
<LOCALGLOBAL>0</LOCALGLOBAL>
|
||||
<PUMP_ISACTIVE>0</PUMP_ISACTIVE>
|
||||
<PUMP_OUTPUT_TYPE>0</PUMP_OUTPUT_TYPE>
|
||||
<PUMP_LEADTIME>2</PUMP_LEADTIME>
|
||||
<PUMP_STOPPINGTIME>2</PUMP_STOPPINGTIME>
|
||||
<PUMP_OPERATIONMODE>0</PUMP_OPERATIONMODE>
|
||||
<MINRUNTIME>30</MINRUNTIME>
|
||||
<MINSTANDSTILL>20</MINSTANDSTILL>
|
||||
</PUMP_OUTPUT>
|
||||
<RELAIS>
|
||||
<FUNCTION>0</FUNCTION>
|
||||
<RELAIS_ISACTIVE>1</RELAIS_ISACTIVE>
|
||||
<RELAIS_LEADTIME>0</RELAIS_LEADTIME>
|
||||
<RELAIS_STOPPINGTIME>0</RELAIS_STOPPINGTIME>
|
||||
<RELAIS_OPERATIONMODE>0</RELAIS_OPERATIONMODE>
|
||||
<RELAIS_BOILERMODE>?</RELAIS_BOILERMODE>
|
||||
</RELAIS>
|
||||
<CHANGEOVER_FUNC>
|
||||
<CHANGEOVER_FUNC_MODE>0</CHANGEOVER_FUNC_MODE>
|
||||
</CHANGEOVER_FUNC>
|
||||
<EMERGENCYMODE>
|
||||
<EMERGENCYMODE_TIME>180</EMERGENCYMODE_TIME>
|
||||
<PWMCYCLE>15</PWMCYCLE>
|
||||
<PWMHEAT>25</PWMHEAT>
|
||||
<PWMCOOL>0</PWMCOOL>
|
||||
</EMERGENCYMODE>
|
||||
<VALVEPROTECT>
|
||||
<VALVEPROTECT_TIME>14</VALVEPROTECT_TIME>
|
||||
<DURATION>5</DURATION>
|
||||
</VALVEPROTECT>
|
||||
<PUMPPROTECT>
|
||||
<PUMPPROTECT_TIME>3</PUMPPROTECT_TIME>
|
||||
<DURATION>5</DURATION>
|
||||
</PUMPPROTECT>
|
||||
<HEATAREA nr="1">
|
||||
<HEATAREA_NAME>Büro</HEATAREA_NAME>
|
||||
<HEATAREA_MODE>1</HEATAREA_MODE>
|
||||
<T_ACTUAL>21.1</T_ACTUAL>
|
||||
<T_ACTUAL_EXT>21.1</T_ACTUAL_EXT>
|
||||
<T_TARGET>21.0</T_TARGET>
|
||||
<T_TARGET_BASE>0.2</T_TARGET_BASE>
|
||||
<HEATAREA_STATE>0</HEATAREA_STATE>
|
||||
<PROGRAM_SOURCE>0</PROGRAM_SOURCE>
|
||||
<PROGRAM_WEEK>2</PROGRAM_WEEK>
|
||||
<PROGRAM_WEEKEND>0</PROGRAM_WEEKEND>
|
||||
<PARTY>0</PARTY>
|
||||
<PARTY_REMAININGTIME>0</PARTY_REMAININGTIME>
|
||||
<PRESENCE>0</PRESENCE>
|
||||
<T_TARGET_MIN>5.0</T_TARGET_MIN>
|
||||
<T_TARGET_MAX>30.0</T_TARGET_MAX>
|
||||
<RPM_MOTOR>0</RPM_MOTOR>
|
||||
<OFFSET>0.0</OFFSET>
|
||||
<T_HEAT_DAY>21.0</T_HEAT_DAY>
|
||||
<T_HEAT_NIGHT>19.0</T_HEAT_NIGHT>
|
||||
<T_COOL_DAY>21.0</T_COOL_DAY>
|
||||
<T_COOL_NIGHT>23.0</T_COOL_NIGHT>
|
||||
<T_FLOOR_DAY>3.0</T_FLOOR_DAY>
|
||||
<T_FLOOR_MAX>21.0</T_FLOOR_MAX>
|
||||
<HEATINGSYSTEM>0</HEATINGSYSTEM>
|
||||
<BLOCK_HC>0</BLOCK_HC>
|
||||
<ISLOCKED>0</ISLOCKED>
|
||||
<LOCK_CODE>BEF20EE23B04455A5C</LOCK_CODE>
|
||||
<LOCK_AVAILABLE>0</LOCK_AVAILABLE>
|
||||
<LIGHT>0</LIGHT>
|
||||
<SENSOR_EXT>0</SENSOR_EXT>
|
||||
<T_TARGET_ADJUSTABLE>1</T_TARGET_ADJUSTABLE>
|
||||
</HEATAREA>
|
||||
<HEATCTRL nr="1">
|
||||
<INUSE>1</INUSE>
|
||||
<HEATAREA_NR>1</HEATAREA_NR>
|
||||
<ACTOR>1</ACTOR>
|
||||
<ACTOR_PERCENT>28</ACTOR_PERCENT>
|
||||
<HEATCTRL_STATE>1</HEATCTRL_STATE>
|
||||
</HEATCTRL>
|
||||
<HEATCTRL nr="2">
|
||||
<INUSE>0</INUSE>
|
||||
<HEATAREA_NR>0</HEATAREA_NR>
|
||||
<ACTOR>0</ACTOR>
|
||||
<ACTOR_PERCENT>0</ACTOR_PERCENT>
|
||||
<HEATCTRL_STATE>0</HEATCTRL_STATE>
|
||||
</HEATCTRL>
|
||||
<HEATCTRL nr="3">
|
||||
<INUSE>0</INUSE>
|
||||
<HEATAREA_NR>0</HEATAREA_NR>
|
||||
<ACTOR>0</ACTOR>
|
||||
<ACTOR_PERCENT>0</ACTOR_PERCENT>
|
||||
<HEATCTRL_STATE>0</HEATCTRL_STATE>
|
||||
</HEATCTRL>
|
||||
<HEATCTRL nr="4">
|
||||
<INUSE>0</INUSE>
|
||||
<HEATAREA_NR>0</HEATAREA_NR>
|
||||
<ACTOR>0</ACTOR>
|
||||
<ACTOR_PERCENT>0</ACTOR_PERCENT>
|
||||
<HEATCTRL_STATE>0</HEATCTRL_STATE>
|
||||
</HEATCTRL>
|
||||
<HEATCTRL nr="5">
|
||||
<INUSE>0</INUSE>
|
||||
<HEATAREA_NR>0</HEATAREA_NR>
|
||||
<ACTOR>0</ACTOR>
|
||||
<ACTOR_PERCENT>0</ACTOR_PERCENT>
|
||||
<HEATCTRL_STATE>0</HEATCTRL_STATE>
|
||||
</HEATCTRL>
|
||||
<HEATCTRL nr="6">
|
||||
<INUSE>0</INUSE>
|
||||
<HEATAREA_NR>0</HEATAREA_NR>
|
||||
<ACTOR>0</ACTOR>
|
||||
<ACTOR_PERCENT>0</ACTOR_PERCENT>
|
||||
<HEATCTRL_STATE>0</HEATCTRL_STATE>
|
||||
</HEATCTRL>
|
||||
<HEATCTRL nr="7">
|
||||
<INUSE>0</INUSE>
|
||||
<HEATAREA_NR>0</HEATAREA_NR>
|
||||
<ACTOR>0</ACTOR>
|
||||
<ACTOR_PERCENT>0</ACTOR_PERCENT>
|
||||
<HEATCTRL_STATE>0</HEATCTRL_STATE>
|
||||
</HEATCTRL>
|
||||
<HEATCTRL nr="8">
|
||||
<INUSE>0</INUSE>
|
||||
<HEATAREA_NR>0</HEATAREA_NR>
|
||||
<ACTOR>0</ACTOR>
|
||||
<ACTOR_PERCENT>0</ACTOR_PERCENT>
|
||||
<HEATCTRL_STATE>0</HEATCTRL_STATE>
|
||||
</HEATCTRL>
|
||||
<HEATCTRL nr="9">
|
||||
<INUSE>0</INUSE>
|
||||
<HEATAREA_NR>0</HEATAREA_NR>
|
||||
<ACTOR>0</ACTOR>
|
||||
<ACTOR_PERCENT>0</ACTOR_PERCENT>
|
||||
<HEATCTRL_STATE>0</HEATCTRL_STATE>
|
||||
</HEATCTRL>
|
||||
<HEATCTRL nr="10">
|
||||
<INUSE>0</INUSE>
|
||||
<HEATAREA_NR>0</HEATAREA_NR>
|
||||
<ACTOR>0</ACTOR>
|
||||
<ACTOR_PERCENT>0</ACTOR_PERCENT>
|
||||
<HEATCTRL_STATE>0</HEATCTRL_STATE>
|
||||
</HEATCTRL>
|
||||
<HEATCTRL nr="11">
|
||||
<INUSE>0</INUSE>
|
||||
<HEATAREA_NR>0</HEATAREA_NR>
|
||||
<ACTOR>0</ACTOR>
|
||||
<ACTOR_PERCENT>0</ACTOR_PERCENT>
|
||||
<HEATCTRL_STATE>0</HEATCTRL_STATE>
|
||||
</HEATCTRL>
|
||||
<HEATCTRL nr="12">
|
||||
<INUSE>0</INUSE>
|
||||
<HEATAREA_NR>0</HEATAREA_NR>
|
||||
<ACTOR>0</ACTOR>
|
||||
<ACTOR_PERCENT>0</ACTOR_PERCENT>
|
||||
<HEATCTRL_STATE>0</HEATCTRL_STATE>
|
||||
</HEATCTRL>
|
||||
<IODEVICE nr="1">
|
||||
<IODEVICE_TYPE>0</IODEVICE_TYPE>
|
||||
<IODEVICE_ID>1</IODEVICE_ID>
|
||||
<IODEVICE_VERS_HW>1</IODEVICE_VERS_HW>
|
||||
<IODEVICE_VERS_SW>02.10</IODEVICE_VERS_SW>
|
||||
<HEATAREA_NR>1</HEATAREA_NR>
|
||||
<SIGNALSTRENGTH>2</SIGNALSTRENGTH>
|
||||
<BATTERY>2</BATTERY>
|
||||
<IODEVICE_STATE>0</IODEVICE_STATE>
|
||||
<IODEVICE_COMERROR>0</IODEVICE_COMERROR>
|
||||
<ISON>1</ISON>
|
||||
</IODEVICE>
|
||||
</Device>
|
||||
</Devices>
|
@ -0,0 +1,48 @@
|
||||
# serializer version: 1
|
||||
# name: test_binary_sensors[binary_sensor.buro_io_device_1_battery-entry]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
}),
|
||||
'area_id': None,
|
||||
'capabilities': None,
|
||||
'config_entry_id': <ANY>,
|
||||
'device_class': None,
|
||||
'device_id': <ANY>,
|
||||
'disabled_by': None,
|
||||
'domain': 'binary_sensor',
|
||||
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
|
||||
'entity_id': 'binary_sensor.buro_io_device_1_battery',
|
||||
'has_entity_name': False,
|
||||
'hidden_by': None,
|
||||
'icon': None,
|
||||
'id': <ANY>,
|
||||
'labels': set({
|
||||
}),
|
||||
'name': None,
|
||||
'options': dict({
|
||||
}),
|
||||
'original_device_class': <BinarySensorDeviceClass.BATTERY: 'battery'>,
|
||||
'original_icon': None,
|
||||
'original_name': 'Büro IO device 1 battery',
|
||||
'platform': 'moehlenhoff_alpha2',
|
||||
'previous_unique_id': None,
|
||||
'supported_features': 0,
|
||||
'translation_key': None,
|
||||
'unique_id': 'Alpha2Test:1:battery',
|
||||
'unit_of_measurement': None,
|
||||
})
|
||||
# ---
|
||||
# name: test_binary_sensors[binary_sensor.buro_io_device_1_battery-state]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'device_class': 'battery',
|
||||
'friendly_name': 'Büro IO device 1 battery',
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'binary_sensor.buro_io_device_1_battery',
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': 'off',
|
||||
})
|
||||
# ---
|
@ -0,0 +1,47 @@
|
||||
# serializer version: 1
|
||||
# name: test_buttons[button.sync_time-entry]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
}),
|
||||
'area_id': None,
|
||||
'capabilities': None,
|
||||
'config_entry_id': <ANY>,
|
||||
'device_class': None,
|
||||
'device_id': <ANY>,
|
||||
'disabled_by': None,
|
||||
'domain': 'button',
|
||||
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
|
||||
'entity_id': 'button.sync_time',
|
||||
'has_entity_name': False,
|
||||
'hidden_by': None,
|
||||
'icon': None,
|
||||
'id': <ANY>,
|
||||
'labels': set({
|
||||
}),
|
||||
'name': None,
|
||||
'options': dict({
|
||||
}),
|
||||
'original_device_class': None,
|
||||
'original_icon': None,
|
||||
'original_name': 'Sync time',
|
||||
'platform': 'moehlenhoff_alpha2',
|
||||
'previous_unique_id': None,
|
||||
'supported_features': 0,
|
||||
'translation_key': None,
|
||||
'unique_id': '6fa019921cf8e7a3f57a3c2ed001a10d:sync_time',
|
||||
'unit_of_measurement': None,
|
||||
})
|
||||
# ---
|
||||
# name: test_buttons[button.sync_time-state]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'friendly_name': 'Sync time',
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'button.sync_time',
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': 'unknown',
|
||||
})
|
||||
# ---
|
@ -0,0 +1,77 @@
|
||||
# serializer version: 1
|
||||
# name: test_climate[climate.buro-entry]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
}),
|
||||
'area_id': None,
|
||||
'capabilities': dict({
|
||||
'hvac_modes': list([
|
||||
<HVACMode.HEAT: 'heat'>,
|
||||
<HVACMode.COOL: 'cool'>,
|
||||
]),
|
||||
'max_temp': 30.0,
|
||||
'min_temp': 5.0,
|
||||
'preset_modes': list([
|
||||
'auto',
|
||||
'day',
|
||||
'night',
|
||||
]),
|
||||
'target_temp_step': 0.2,
|
||||
}),
|
||||
'config_entry_id': <ANY>,
|
||||
'device_class': None,
|
||||
'device_id': <ANY>,
|
||||
'disabled_by': None,
|
||||
'domain': 'climate',
|
||||
'entity_category': None,
|
||||
'entity_id': 'climate.buro',
|
||||
'has_entity_name': False,
|
||||
'hidden_by': None,
|
||||
'icon': None,
|
||||
'id': <ANY>,
|
||||
'labels': set({
|
||||
}),
|
||||
'name': None,
|
||||
'options': dict({
|
||||
}),
|
||||
'original_device_class': None,
|
||||
'original_icon': None,
|
||||
'original_name': 'Büro',
|
||||
'platform': 'moehlenhoff_alpha2',
|
||||
'previous_unique_id': None,
|
||||
'supported_features': <ClimateEntityFeature: 17>,
|
||||
'translation_key': None,
|
||||
'unique_id': 'Alpha2Test:1',
|
||||
'unit_of_measurement': None,
|
||||
})
|
||||
# ---
|
||||
# name: test_climate[climate.buro-state]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'current_temperature': 21.1,
|
||||
'friendly_name': 'Büro',
|
||||
'hvac_action': <HVACAction.HEATING: 'heating'>,
|
||||
'hvac_modes': list([
|
||||
<HVACMode.HEAT: 'heat'>,
|
||||
<HVACMode.COOL: 'cool'>,
|
||||
]),
|
||||
'max_temp': 30.0,
|
||||
'min_temp': 5.0,
|
||||
'preset_mode': 'day',
|
||||
'preset_modes': list([
|
||||
'auto',
|
||||
'day',
|
||||
'night',
|
||||
]),
|
||||
'supported_features': <ClimateEntityFeature: 17>,
|
||||
'target_temp_step': 0.2,
|
||||
'temperature': 21.0,
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'climate.buro',
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': 'heat',
|
||||
})
|
||||
# ---
|
@ -0,0 +1,48 @@
|
||||
# serializer version: 1
|
||||
# name: test_sensors[sensor.buro_heat_control_1_valve_opening-entry]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
}),
|
||||
'area_id': None,
|
||||
'capabilities': None,
|
||||
'config_entry_id': <ANY>,
|
||||
'device_class': None,
|
||||
'device_id': <ANY>,
|
||||
'disabled_by': None,
|
||||
'domain': 'sensor',
|
||||
'entity_category': None,
|
||||
'entity_id': 'sensor.buro_heat_control_1_valve_opening',
|
||||
'has_entity_name': False,
|
||||
'hidden_by': None,
|
||||
'icon': None,
|
||||
'id': <ANY>,
|
||||
'labels': set({
|
||||
}),
|
||||
'name': None,
|
||||
'options': dict({
|
||||
}),
|
||||
'original_device_class': None,
|
||||
'original_icon': None,
|
||||
'original_name': 'Büro heat control 1 valve opening',
|
||||
'platform': 'moehlenhoff_alpha2',
|
||||
'previous_unique_id': None,
|
||||
'supported_features': 0,
|
||||
'translation_key': None,
|
||||
'unique_id': 'Alpha2Test:1:valve_opening',
|
||||
'unit_of_measurement': '%',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensors[sensor.buro_heat_control_1_valve_opening-state]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'friendly_name': 'Büro heat control 1 valve opening',
|
||||
'unit_of_measurement': '%',
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'sensor.buro_heat_control_1_valve_opening',
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '28',
|
||||
})
|
||||
# ---
|
28
tests/components/moehlenhoff_alpha2/test_binary_sensor.py
Normal file
28
tests/components/moehlenhoff_alpha2/test_binary_sensor.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""Tests for the Moehlenhoff Alpha2 binary sensors."""
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
from syrupy import SnapshotAssertion
|
||||
|
||||
from homeassistant.const import Platform
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
|
||||
from . import init_integration
|
||||
|
||||
from tests.common import snapshot_platform
|
||||
|
||||
|
||||
async def test_binary_sensors(
|
||||
hass: HomeAssistant,
|
||||
entity_registry: er.EntityRegistry,
|
||||
snapshot: SnapshotAssertion,
|
||||
) -> None:
|
||||
"""Test binary sensors."""
|
||||
with patch(
|
||||
"homeassistant.components.moehlenhoff_alpha2.PLATFORMS",
|
||||
[Platform.BINARY_SENSOR],
|
||||
):
|
||||
entry = await init_integration(hass)
|
||||
|
||||
await snapshot_platform(hass, entity_registry, snapshot, entry.entry_id)
|
28
tests/components/moehlenhoff_alpha2/test_button.py
Normal file
28
tests/components/moehlenhoff_alpha2/test_button.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""Tests for the Moehlenhoff Alpha2 buttons."""
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
from syrupy import SnapshotAssertion
|
||||
|
||||
from homeassistant.const import Platform
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
|
||||
from . import init_integration
|
||||
|
||||
from tests.common import snapshot_platform
|
||||
|
||||
|
||||
async def test_buttons(
|
||||
hass: HomeAssistant,
|
||||
entity_registry: er.EntityRegistry,
|
||||
snapshot: SnapshotAssertion,
|
||||
) -> None:
|
||||
"""Test buttons."""
|
||||
with patch(
|
||||
"homeassistant.components.moehlenhoff_alpha2.PLATFORMS",
|
||||
[Platform.BUTTON],
|
||||
):
|
||||
entry = await init_integration(hass)
|
||||
|
||||
await snapshot_platform(hass, entity_registry, snapshot, entry.entry_id)
|
28
tests/components/moehlenhoff_alpha2/test_climate.py
Normal file
28
tests/components/moehlenhoff_alpha2/test_climate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""Tests for the Moehlenhoff Alpha2 climate."""
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
from syrupy import SnapshotAssertion
|
||||
|
||||
from homeassistant.const import Platform
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
|
||||
from . import init_integration
|
||||
|
||||
from tests.common import snapshot_platform
|
||||
|
||||
|
||||
async def test_climate(
|
||||
hass: HomeAssistant,
|
||||
entity_registry: er.EntityRegistry,
|
||||
snapshot: SnapshotAssertion,
|
||||
) -> None:
|
||||
"""Test climate."""
|
||||
with patch(
|
||||
"homeassistant.components.moehlenhoff_alpha2.PLATFORMS",
|
||||
[Platform.CLIMATE],
|
||||
):
|
||||
entry = await init_integration(hass)
|
||||
|
||||
await snapshot_platform(hass, entity_registry, snapshot, entry.entry_id)
|
@ -7,21 +7,10 @@ from homeassistant.components.moehlenhoff_alpha2.const import DOMAIN
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.data_entry_flow import FlowResultType
|
||||
|
||||
from . import MOCK_BASE_HOST, mock_update_data
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
MOCK_BASE_ID = "fake-base-id"
|
||||
MOCK_BASE_NAME = "fake-base-name"
|
||||
MOCK_BASE_HOST = "fake-base-host"
|
||||
|
||||
|
||||
async def mock_update_data(self):
|
||||
"""Mock moehlenhoff_alpha2.Alpha2Base.update_data."""
|
||||
self.static_data = {
|
||||
"Devices": {
|
||||
"Device": {"ID": MOCK_BASE_ID, "NAME": MOCK_BASE_NAME, "HEATAREA": []}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async def test_form(hass: HomeAssistant) -> None:
|
||||
"""Test we get the form."""
|
||||
@ -33,7 +22,10 @@ async def test_form(hass: HomeAssistant) -> None:
|
||||
assert not result["errors"]
|
||||
|
||||
with (
|
||||
patch("moehlenhoff_alpha2.Alpha2Base.update_data", mock_update_data),
|
||||
patch(
|
||||
"homeassistant.components.moehlenhoff_alpha2.config_flow.Alpha2Base.update_data",
|
||||
mock_update_data,
|
||||
),
|
||||
patch(
|
||||
"homeassistant.components.moehlenhoff_alpha2.async_setup_entry",
|
||||
return_value=True,
|
||||
@ -46,7 +38,7 @@ async def test_form(hass: HomeAssistant) -> None:
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert result2["type"] is FlowResultType.CREATE_ENTRY
|
||||
assert result2["title"] == MOCK_BASE_NAME
|
||||
assert result2["title"] == "Alpha2Test"
|
||||
assert result2["data"] == {"host": MOCK_BASE_HOST}
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
|
28
tests/components/moehlenhoff_alpha2/test_sensor.py
Normal file
28
tests/components/moehlenhoff_alpha2/test_sensor.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""Tests for the Moehlenhoff Alpha2 sensors."""
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
from syrupy import SnapshotAssertion
|
||||
|
||||
from homeassistant.const import Platform
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
|
||||
from . import init_integration
|
||||
|
||||
from tests.common import snapshot_platform
|
||||
|
||||
|
||||
async def test_sensors(
|
||||
hass: HomeAssistant,
|
||||
entity_registry: er.EntityRegistry,
|
||||
snapshot: SnapshotAssertion,
|
||||
) -> None:
|
||||
"""Test sensors."""
|
||||
with patch(
|
||||
"homeassistant.components.moehlenhoff_alpha2.PLATFORMS",
|
||||
[Platform.SENSOR],
|
||||
):
|
||||
entry = await init_integration(hass)
|
||||
|
||||
await snapshot_platform(hass, entity_registry, snapshot, entry.entry_id)
|
Loading…
x
Reference in New Issue
Block a user