core/tests/components/coolmaster/test_init.py

72 lines
2.6 KiB
Python

"""The test for the Coolmaster integration."""
from homeassistant.components.coolmaster.const import DOMAIN
from homeassistant.config_entries import ConfigEntry, ConfigEntryState
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr
from homeassistant.setup import async_setup_component
from tests.typing import WebSocketGenerator
async def test_load_entry(
hass: HomeAssistant,
load_int: ConfigEntry,
) -> None:
"""Test Coolmaster initial load."""
# 2 units times 4 entities (climate, binary_sensor, sensor, button).
assert hass.states.async_entity_ids_count() == 8
assert load_int.state is ConfigEntryState.LOADED
async def test_unload_entry(
hass: HomeAssistant,
load_int: ConfigEntry,
) -> None:
"""Test Coolmaster unloading an entry."""
await hass.config_entries.async_unload(load_int.entry_id)
await hass.async_block_till_done()
assert load_int.state is ConfigEntryState.NOT_LOADED
async def test_registry_cleanup(
hass: HomeAssistant,
load_int: ConfigEntry,
hass_ws_client: WebSocketGenerator,
) -> None:
"""Test being able to remove a disconnected device."""
entry_id = load_int.entry_id
device_registry = dr.async_get(hass)
live_id = "L1.100"
dead_id = "L2.200"
assert len(dr.async_entries_for_config_entry(device_registry, entry_id)) == 2
device_registry.async_get_or_create(
config_entry_id=entry_id,
identifiers={(DOMAIN, dead_id)},
manufacturer="CoolAutomation",
model="CoolMasterNet",
name=dead_id,
sw_version="1.0",
)
assert len(dr.async_entries_for_config_entry(device_registry, entry_id)) == 3
assert await async_setup_component(hass, "config", {})
client = await hass_ws_client(hass)
# Try to remove "L1.100" - fails since it is live
device = device_registry.async_get_device(identifiers={(DOMAIN, live_id)})
assert device is not None
response = await client.remove_device(device.id, entry_id)
assert not response["success"]
assert len(dr.async_entries_for_config_entry(device_registry, entry_id)) == 3
assert device_registry.async_get_device(identifiers={(DOMAIN, live_id)}) is not None
# Try to remove "L2.200" - succeeds since it is dead
device = device_registry.async_get_device(identifiers={(DOMAIN, dead_id)})
assert device is not None
response = await client.remove_device(device.id, entry_id)
assert response["success"]
assert len(dr.async_entries_for_config_entry(device_registry, entry_id)) == 2
assert device_registry.async_get_device(identifiers={(DOMAIN, dead_id)}) is None