mirror of
https://github.com/home-assistant/core.git
synced 2026-08-07 13:55:32 +01:00
86 lines
2.6 KiB
Python
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
|