Update zwave_js stored add-on options (#51063)

* Update zwave_js entry data if add-on data changed

* Fix tests

* Add test
pull/51065/head^2
Martin Hjelmare 2021-05-25 14:37:34 +02:00 committed by GitHub
parent c868353459
commit 9319fc6263
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 61 additions and 2 deletions

View File

@ -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:

View File

@ -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",