Update zwave_js stored add-on options (#51063)
* Update zwave_js entry data if add-on data changed * Fix tests * Add testpull/51065/head^2
parent
c868353459
commit
9319fc6263
|
@ -51,6 +51,8 @@ from .const import (
|
|||
ATTR_TYPE,
|
||||
ATTR_VALUE,
|
||||
ATTR_VALUE_RAW,
|
||||
CONF_ADDON_DEVICE,
|
||||
CONF_ADDON_NETWORK_KEY,
|
||||
CONF_DATA_COLLECTION_OPTED_IN,
|
||||
CONF_INTEGRATION_CREATED_ADDON,
|
||||
CONF_NETWORK_KEY,
|
||||
|
@ -580,6 +582,17 @@ async def async_ensure_addon_running(hass: HomeAssistant, entry: ConfigEntry) ->
|
|||
)
|
||||
raise ConfigEntryNotReady
|
||||
|
||||
addon_options = addon_info.options
|
||||
addon_device = addon_options[CONF_ADDON_DEVICE]
|
||||
addon_network_key = addon_options[CONF_ADDON_NETWORK_KEY]
|
||||
updates = {}
|
||||
if usb_path != addon_device:
|
||||
updates[CONF_USB_PATH] = addon_device
|
||||
if network_key != addon_network_key:
|
||||
updates[CONF_NETWORK_KEY] = addon_network_key
|
||||
if updates:
|
||||
hass.config_entries.async_update_entry(entry, data={**entry.data, **updates})
|
||||
|
||||
|
||||
@callback
|
||||
def async_ensure_addon_updated(hass: HomeAssistant) -> None:
|
||||
|
|
|
@ -654,6 +654,48 @@ async def test_addon_info_failure(
|
|||
assert start_addon.call_count == 0
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"old_device, new_device, old_network_key, new_network_key",
|
||||
[("/old_test", "/new_test", "old123", "new123")],
|
||||
)
|
||||
async def test_addon_options_changed(
|
||||
hass,
|
||||
client,
|
||||
addon_installed,
|
||||
addon_running,
|
||||
install_addon,
|
||||
addon_options,
|
||||
start_addon,
|
||||
old_device,
|
||||
new_device,
|
||||
old_network_key,
|
||||
new_network_key,
|
||||
):
|
||||
"""Test update config entry data on entry setup if add-on options changed."""
|
||||
addon_options["device"] = new_device
|
||||
addon_options["network_key"] = new_network_key
|
||||
entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
title="Z-Wave JS",
|
||||
data={
|
||||
"url": "ws://host1:3001",
|
||||
"use_addon": True,
|
||||
"usb_path": old_device,
|
||||
"network_key": old_network_key,
|
||||
},
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
|
||||
await hass.config_entries.async_setup(entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert entry.state == ConfigEntryState.LOADED
|
||||
assert entry.data["usb_path"] == new_device
|
||||
assert entry.data["network_key"] == new_network_key
|
||||
assert install_addon.call_count == 0
|
||||
assert start_addon.call_count == 0
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"addon_version, update_available, update_calls, snapshot_calls, "
|
||||
"update_addon_side_effect, create_shapshot_side_effect",
|
||||
|
@ -681,13 +723,15 @@ async def test_update_addon(
|
|||
create_shapshot_side_effect,
|
||||
):
|
||||
"""Test update the Z-Wave JS add-on during entry setup."""
|
||||
device = "/test"
|
||||
network_key = "abc123"
|
||||
addon_options["device"] = device
|
||||
addon_options["network_key"] = network_key
|
||||
addon_info.return_value["version"] = addon_version
|
||||
addon_info.return_value["update_available"] = update_available
|
||||
create_shapshot.side_effect = create_shapshot_side_effect
|
||||
update_addon.side_effect = update_addon_side_effect
|
||||
client.connect.side_effect = InvalidServerVersion("Invalid version")
|
||||
device = "/test"
|
||||
network_key = "abc123"
|
||||
entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
title="Z-Wave JS",
|
||||
|
@ -729,6 +773,8 @@ async def test_stop_addon(
|
|||
stop_addon.side_effect = stop_addon_side_effect
|
||||
device = "/test"
|
||||
network_key = "abc123"
|
||||
addon_options["device"] = device
|
||||
addon_options["network_key"] = network_key
|
||||
entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
title="Z-Wave JS",
|
||||
|
|
Loading…
Reference in New Issue