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:
epenet 2024-05-23 11:54:20 +02:00 committed by GitHub
parent bbe8e69795
commit bc51a4c524
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 647 additions and 17 deletions

View File

@ -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

View File

@ -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

View 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>

View File

@ -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',
})
# ---

View File

@ -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',
})
# ---

View File

@ -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',
})
# ---

View File

@ -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',
})
# ---

View 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)

View 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)

View 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)

View File

@ -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

View 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)