Remove old system ID format from SimpliSafe base stations (#82993)
parent
4239923ea2
commit
671e6b3832
|
@ -296,7 +296,8 @@ def _async_register_base_station(
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Register a new bridge."""
|
"""Register a new bridge."""
|
||||||
device_registry = dr.async_get(hass)
|
device_registry = dr.async_get(hass)
|
||||||
device_registry.async_get_or_create(
|
|
||||||
|
base_station = device_registry.async_get_or_create(
|
||||||
config_entry_id=entry.entry_id,
|
config_entry_id=entry.entry_id,
|
||||||
identifiers={(DOMAIN, str(system.system_id))},
|
identifiers={(DOMAIN, str(system.system_id))},
|
||||||
manufacturer="SimpliSafe",
|
manufacturer="SimpliSafe",
|
||||||
|
@ -304,6 +305,20 @@ def _async_register_base_station(
|
||||||
name=system.address,
|
name=system.address,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Check for an old system ID format and remove it:
|
||||||
|
if old_base_station := device_registry.async_get_device(
|
||||||
|
{(DOMAIN, system.system_id)} # type: ignore[arg-type]
|
||||||
|
):
|
||||||
|
# Update the new base station with any properties the user might have configured
|
||||||
|
# on the old base station:
|
||||||
|
device_registry.async_update_device(
|
||||||
|
base_station.id,
|
||||||
|
area_id=old_base_station.area_id,
|
||||||
|
disabled_by=old_base_station.disabled_by,
|
||||||
|
name_by_user=old_base_station.name_by_user,
|
||||||
|
)
|
||||||
|
device_registry.async_remove_device(old_base_station.id)
|
||||||
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def _async_standardize_config_entry(hass: HomeAssistant, entry: ConfigEntry) -> None:
|
def _async_standardize_config_entry(hass: HomeAssistant, entry: ConfigEntry) -> None:
|
||||||
|
|
|
@ -15,7 +15,7 @@ from tests.common import MockConfigEntry, load_fixture
|
||||||
|
|
||||||
CODE = "12345"
|
CODE = "12345"
|
||||||
PASSWORD = "password"
|
PASSWORD = "password"
|
||||||
SYSTEM_ID = "system_123"
|
SYSTEM_ID = 12345
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(name="api")
|
@pytest.fixture(name="api")
|
||||||
|
@ -79,7 +79,8 @@ def data_settings_fixture():
|
||||||
@pytest.fixture(name="data_subscription", scope="package")
|
@pytest.fixture(name="data_subscription", scope="package")
|
||||||
def data_subscription_fixture():
|
def data_subscription_fixture():
|
||||||
"""Define subscription data."""
|
"""Define subscription data."""
|
||||||
return json.loads(load_fixture("subscription_data.json", "simplisafe"))
|
data = json.loads(load_fixture("subscription_data.json", "simplisafe"))
|
||||||
|
return {SYSTEM_ID: data}
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(name="reauth_config")
|
@pytest.fixture(name="reauth_config")
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
{
|
{
|
||||||
"system_123": {
|
|
||||||
"uid": 12345,
|
"uid": 12345,
|
||||||
"sid": "system_123",
|
"sid": 12345,
|
||||||
"sStatus": 20,
|
"sStatus": 20,
|
||||||
"activated": 1445034752,
|
"activated": 1445034752,
|
||||||
"planSku": "SSEDSM2",
|
"planSku": "SSEDSM2",
|
||||||
|
@ -331,5 +330,4 @@
|
||||||
"billInterval": 2628000,
|
"billInterval": 2628000,
|
||||||
"pinUnlockedBy": "pin",
|
"pinUnlockedBy": "pin",
|
||||||
"autoActivation": null
|
"autoActivation": null
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ async def test_entry_diagnostics(hass, config_entry, hass_client, setup_simplisa
|
||||||
"disabled_by": None,
|
"disabled_by": None,
|
||||||
},
|
},
|
||||||
"subscription_data": {
|
"subscription_data": {
|
||||||
"system_123": {
|
"12345": {
|
||||||
"uid": REDACTED,
|
"uid": REDACTED,
|
||||||
"sid": REDACTED,
|
"sid": REDACTED,
|
||||||
"sStatus": 20,
|
"sStatus": 20,
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
"""Define tests for SimpliSafe setup."""
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from homeassistant.components.simplisafe import DOMAIN
|
||||||
|
from homeassistant.helpers import device_registry as dr
|
||||||
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
|
|
||||||
|
async def test_base_station_migration(hass, api, config, config_entry):
|
||||||
|
"""Test that errors are shown when duplicates are added."""
|
||||||
|
old_identifers = (DOMAIN, 12345)
|
||||||
|
new_identifiers = (DOMAIN, "12345")
|
||||||
|
|
||||||
|
device_registry = dr.async_get(hass)
|
||||||
|
device_registry.async_get_or_create(
|
||||||
|
config_entry_id=config_entry.entry_id,
|
||||||
|
identifiers={old_identifers},
|
||||||
|
manufacturer="SimpliSafe",
|
||||||
|
name="old",
|
||||||
|
)
|
||||||
|
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.simplisafe.config_flow.API.async_from_auth",
|
||||||
|
return_value=api,
|
||||||
|
), patch(
|
||||||
|
"homeassistant.components.simplisafe.API.async_from_auth",
|
||||||
|
return_value=api,
|
||||||
|
), patch(
|
||||||
|
"homeassistant.components.simplisafe.API.async_from_refresh_token",
|
||||||
|
return_value=api,
|
||||||
|
), patch(
|
||||||
|
"homeassistant.components.simplisafe.SimpliSafe._async_start_websocket_loop"
|
||||||
|
), patch(
|
||||||
|
"homeassistant.components.simplisafe.PLATFORMS", []
|
||||||
|
):
|
||||||
|
assert await async_setup_component(hass, DOMAIN, config)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert device_registry.async_get_device(identifiers={old_identifers}) is None
|
||||||
|
assert device_registry.async_get_device(identifiers={new_identifiers}) is not None
|
Loading…
Reference in New Issue