mirror of
https://github.com/home-assistant/core.git
synced 2026-04-25 21:47:21 +00:00
Add tests for Tuya dynamic add/remove device (#168824)
This commit is contained in:
@@ -44,6 +44,22 @@ class MockDeviceListener(DeviceListener):
|
||||
self.update_device(device, updated_status_properties, dp_timestamps)
|
||||
await self.hass.async_block_till_done()
|
||||
|
||||
async def async_send_add_device(
|
||||
self, manager: Manager, device: CustomerDevice
|
||||
) -> None:
|
||||
"""Mock add device from the manager."""
|
||||
manager.device_map[device.id] = device
|
||||
self.add_device(device)
|
||||
await self.hass.async_block_till_done()
|
||||
|
||||
async def async_send_remove_device(
|
||||
self, manager: Manager, device: CustomerDevice
|
||||
) -> None:
|
||||
"""Mock remove device from the manager."""
|
||||
manager.device_map.pop(device.id, None)
|
||||
self.remove_device(device.id)
|
||||
await self.hass.async_block_till_done()
|
||||
|
||||
async def async_mock_online(self, device: CustomerDevice) -> None:
|
||||
"""Mock online event from the manager."""
|
||||
device.online = True
|
||||
|
||||
@@ -18,7 +18,13 @@ from homeassistant.components.tuya.diagnostics import _REDACTED_DPCODES
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import device_registry as dr, entity_registry as er
|
||||
|
||||
from . import DEVICE_MOCKS, create_device, create_manager, initialize_entry
|
||||
from . import (
|
||||
DEVICE_MOCKS,
|
||||
MockDeviceListener,
|
||||
create_device,
|
||||
create_manager,
|
||||
initialize_entry,
|
||||
)
|
||||
|
||||
from tests.common import MockConfigEntry, async_load_json_object_fixture
|
||||
|
||||
@@ -136,6 +142,70 @@ async def test_device_registry(
|
||||
)
|
||||
|
||||
|
||||
async def test_dynamic_add_device(
|
||||
hass: HomeAssistant,
|
||||
mock_config_entry: MockConfigEntry,
|
||||
mock_manager: Manager,
|
||||
mock_listener: MockDeviceListener,
|
||||
device_registry: dr.DeviceRegistry,
|
||||
) -> None:
|
||||
"""Ensure add device event works correctly."""
|
||||
# Initialize with a single device
|
||||
main_device = await create_device(hass, "mcs_8yhypbo7")
|
||||
second_device = await create_device(hass, "clkg_y7j64p60glp8qpx7")
|
||||
await initialize_entry(hass, mock_manager, mock_config_entry, [main_device])
|
||||
all_entries = dr.async_entries_for_config_entry(
|
||||
device_registry, mock_config_entry.entry_id
|
||||
)
|
||||
assert len(all_entries) == 1
|
||||
|
||||
# Trigger add second device from the manager
|
||||
await mock_listener.async_send_add_device(mock_manager, second_device)
|
||||
|
||||
# Should now have two devices in the registry
|
||||
all_entries = dr.async_entries_for_config_entry(
|
||||
device_registry, mock_config_entry.entry_id
|
||||
)
|
||||
assert len(all_entries) == 2
|
||||
assert any(
|
||||
(DOMAIN, second_device.id) in device_registry_entry.identifiers
|
||||
for device_registry_entry in all_entries
|
||||
)
|
||||
|
||||
|
||||
async def test_dynamic_remove_device(
|
||||
hass: HomeAssistant,
|
||||
mock_config_entry: MockConfigEntry,
|
||||
mock_manager: Manager,
|
||||
mock_listener: MockDeviceListener,
|
||||
device_registry: dr.DeviceRegistry,
|
||||
) -> None:
|
||||
"""Ensure remove device event works correctly."""
|
||||
# Initialize with two devices
|
||||
main_device = await create_device(hass, "mcs_8yhypbo7")
|
||||
second_device = await create_device(hass, "clkg_y7j64p60glp8qpx7")
|
||||
await initialize_entry(
|
||||
hass, mock_manager, mock_config_entry, [main_device, second_device]
|
||||
)
|
||||
all_entries = dr.async_entries_for_config_entry(
|
||||
device_registry, mock_config_entry.entry_id
|
||||
)
|
||||
assert len(all_entries) == 2
|
||||
|
||||
# Trigger remove second device from the manager
|
||||
await mock_listener.async_send_remove_device(mock_manager, second_device)
|
||||
|
||||
# Only the main device should remain
|
||||
all_entries = dr.async_entries_for_config_entry(
|
||||
device_registry, mock_config_entry.entry_id
|
||||
)
|
||||
assert len(all_entries) == 1
|
||||
assert (
|
||||
device_registry.async_get_device(identifiers={(DOMAIN, main_device.id)})
|
||||
in all_entries
|
||||
)
|
||||
|
||||
|
||||
async def test_fixtures_valid(hass: HomeAssistant) -> None:
|
||||
"""Ensure Tuya fixture files are valid."""
|
||||
# We want to ensure that the fixture files do not contain
|
||||
|
||||
Reference in New Issue
Block a user