mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 21:27:38 +00:00
parent
c357b3ae65
commit
89956adf2e
@ -69,3 +69,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: HeosConfigEntry) -> bool
|
|||||||
async def async_unload_entry(hass: HomeAssistant, entry: HeosConfigEntry) -> bool:
|
async def async_unload_entry(hass: HomeAssistant, entry: HeosConfigEntry) -> bool:
|
||||||
"""Unload a config entry."""
|
"""Unload a config entry."""
|
||||||
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
|
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
|
||||||
|
|
||||||
|
|
||||||
|
async def async_remove_config_entry_device(
|
||||||
|
hass: HomeAssistant, entry: HeosConfigEntry, device: dr.DeviceEntry
|
||||||
|
) -> bool:
|
||||||
|
"""Remove config entry from device if no longer present."""
|
||||||
|
return not any(
|
||||||
|
(domain, key)
|
||||||
|
for domain, key in device.identifiers
|
||||||
|
if domain == DOMAIN and int(key) in entry.runtime_data.heos.players
|
||||||
|
)
|
||||||
|
@ -58,7 +58,7 @@ rules:
|
|||||||
icon-translations: done
|
icon-translations: done
|
||||||
reconfiguration-flow: done
|
reconfiguration-flow: done
|
||||||
repair-issues: todo
|
repair-issues: todo
|
||||||
stale-devices: todo
|
stale-devices: done
|
||||||
# Platinum
|
# Platinum
|
||||||
async-dependency: done
|
async-dependency: done
|
||||||
inject-websession:
|
inject-websession:
|
||||||
|
@ -11,10 +11,12 @@ from homeassistant.config_entries import SOURCE_REAUTH, ConfigEntryState
|
|||||||
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME
|
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers import device_registry as dr
|
from homeassistant.helpers import device_registry as dr
|
||||||
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
from . import MockHeos
|
from . import MockHeos
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
|
from tests.typing import WebSocketGenerator
|
||||||
|
|
||||||
|
|
||||||
async def test_async_setup_entry_loads_platforms(
|
async def test_async_setup_entry_loads_platforms(
|
||||||
@ -226,3 +228,30 @@ async def test_device_id_migration_both_present(
|
|||||||
await hass.async_block_till_done(wait_background_tasks=True)
|
await hass.async_block_till_done(wait_background_tasks=True)
|
||||||
assert device_registry.async_get_device({(DOMAIN, 1)}) is None # type: ignore[arg-type]
|
assert device_registry.async_get_device({(DOMAIN, 1)}) is None # type: ignore[arg-type]
|
||||||
assert device_registry.async_get_device({(DOMAIN, "1")}) is not None
|
assert device_registry.async_get_device({(DOMAIN, "1")}) is not None
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
("player_id", "expected_result"),
|
||||||
|
[("1", False), ("5", True)],
|
||||||
|
ids=("Present device", "Stale device"),
|
||||||
|
)
|
||||||
|
async def test_remove_config_entry_device(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
config_entry: MockConfigEntry,
|
||||||
|
device_registry: dr.DeviceRegistry,
|
||||||
|
hass_ws_client: WebSocketGenerator,
|
||||||
|
player_id: str,
|
||||||
|
expected_result: bool,
|
||||||
|
) -> None:
|
||||||
|
"""Test manually removing an stale device."""
|
||||||
|
assert await async_setup_component(hass, "config", {})
|
||||||
|
config_entry.add_to_hass(hass)
|
||||||
|
assert await hass.config_entries.async_setup(config_entry.entry_id)
|
||||||
|
|
||||||
|
device_entry = device_registry.async_get_or_create(
|
||||||
|
config_entry_id=config_entry.entry_id, identifiers={(DOMAIN, player_id)}
|
||||||
|
)
|
||||||
|
|
||||||
|
ws_client = await hass_ws_client(hass)
|
||||||
|
response = await ws_client.remove_device(device_entry.id, config_entry.entry_id)
|
||||||
|
assert response["success"] == expected_result
|
||||||
|
Loading…
x
Reference in New Issue
Block a user