mirror of
https://github.com/home-assistant/core.git
synced 2026-08-07 22:05:35 +01:00
72 lines
2.2 KiB
Python
72 lines
2.2 KiB
Python
"""Tests for the Acmeda integration."""
|
|
|
|
from collections.abc import Generator
|
|
from unittest.mock import AsyncMock, MagicMock, patch
|
|
|
|
import aiopulse
|
|
import pytest
|
|
|
|
from homeassistant.components.acmeda.const import DOMAIN
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers import device_registry as dr
|
|
|
|
from tests.common import MockConfigEntry
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_roller() -> MagicMock:
|
|
"""Return a mocked Acmeda roller."""
|
|
roller = MagicMock()
|
|
roller.id = 1234567890123
|
|
roller.name = "Roller"
|
|
roller.battery = 50
|
|
roller.type = 1
|
|
roller.closed_percent = 50
|
|
return roller
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_hub(mock_roller: MagicMock) -> Generator[MagicMock]:
|
|
"""Mock the aiopulse Hub client."""
|
|
with patch("homeassistant.components.acmeda.hub.aiopulse.Hub") as hub_class:
|
|
hub = hub_class.return_value
|
|
hub.id = "hub-id"
|
|
hub.host = "127.0.0.1"
|
|
hub.rollers = {mock_roller.id: mock_roller}
|
|
hub.run = AsyncMock()
|
|
hub.stop = AsyncMock()
|
|
yield hub
|
|
|
|
|
|
async def test_update_devices_renames_device(
|
|
hass: HomeAssistant,
|
|
mock_config_entry: MockConfigEntry,
|
|
device_registry: dr.DeviceRegistry,
|
|
mock_hub: MagicMock,
|
|
mock_roller: MagicMock,
|
|
) -> None:
|
|
"""Test a roller rename is propagated to the device registry."""
|
|
assert await hass.config_entries.async_setup(mock_config_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
# The integration subscribes a callback which the hub invokes once it has
|
|
# fetched roller updates; grab it and simulate the hub reporting an update.
|
|
notify_update = mock_hub.callback_subscribe.call_args[0][0]
|
|
await notify_update(aiopulse.UpdateType.rollers)
|
|
await hass.async_block_till_done()
|
|
|
|
device = device_registry.async_get_device_by_identifier(
|
|
(DOMAIN, str(mock_roller.id)), mock_config_entry.entry_id
|
|
)
|
|
assert device is not None
|
|
assert device.name == "Roller"
|
|
|
|
mock_roller.name = "Living room blind"
|
|
await notify_update(aiopulse.UpdateType.rollers)
|
|
await hass.async_block_till_done()
|
|
|
|
device = device_registry.async_get_device_by_identifier(
|
|
(DOMAIN, str(mock_roller.id)), mock_config_entry.entry_id
|
|
)
|
|
assert device.name == "Living room blind"
|