Files
core/tests/components/lupusec/test_init.py
T

86 lines
2.6 KiB
Python

"""Tests for the Lupusec integration setup."""
from unittest.mock import MagicMock, patch
import lupupy.constants as CONST
from homeassistant.components.lupusec.const import DOMAIN
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr
from tests.common import MockConfigEntry
MOCK_DATA = {
CONF_HOST: "test-host.lan",
CONF_USERNAME: "test-username",
CONF_PASSWORD: "test-password",
}
def _mock_lupusec_system() -> MagicMock:
"""Return a mocked Lupusec system with an alarm and one binary sensor."""
system = MagicMock()
system.model = 2
alarm = MagicMock()
alarm.name = "Alarm Panel"
alarm.device_id = "0"
alarm.is_standby = True
alarm.is_away = False
alarm.is_home = False
alarm.is_alarm_triggered = False
system.get_alarm.return_value = alarm
sensor = MagicMock()
sensor.device_id = "sensor_1"
sensor.name = "Front Door"
sensor.type = "Türkontakt"
sensor.generic_type = "door"
sensor.is_on = False
system.get_devices.side_effect = lambda generic_type: (
[] if generic_type == CONST.TYPE_SWITCH else [sensor]
)
return system
async def test_child_device_links_to_parent(
hass: HomeAssistant, device_registry: dr.DeviceRegistry
) -> None:
"""Test the child device is linked to the alarm panel via via_device_id.
Only the binary_sensor platform is forwarded, so the alarm panel (parent)
device is not created by the sibling alarm_control_panel platform. The child
can therefore only resolve its via_device_id if the parent was registered at
setup, before the platforms were forwarded.
"""
entry = MockConfigEntry(domain=DOMAIN, title=MOCK_DATA[CONF_HOST], data=MOCK_DATA)
entry.add_to_hass(hass)
with (
patch(
"homeassistant.components.lupusec.lupupy.Lupusec",
return_value=_mock_lupusec_system(),
),
patch(
"homeassistant.components.lupusec.PLATFORMS",
[Platform.BINARY_SENSOR],
),
):
assert await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()
parent = device_registry.async_get_device_by_identifier(
(DOMAIN, entry.entry_id), entry.entry_id
)
assert parent is not None
assert parent.name == "Alarm Panel"
assert parent.model == "Lupusec-XT2"
child = device_registry.async_get_device_by_identifier(
(DOMAIN, "sensor_1"), entry.entry_id
)
assert child is not None
assert child.via_device_id == parent.id