Update zwave_js stored add-on options (#51063)
* Update zwave_js entry data if add-on data changed * Fix tests * Add test
This commit is contained in:
parent
c868353459
commit
9319fc6263
2 changed files with 61 additions and 2 deletions
|
@ -51,6 +51,8 @@ from .const import (
|
||||||
ATTR_TYPE,
|
ATTR_TYPE,
|
||||||
ATTR_VALUE,
|
ATTR_VALUE,
|
||||||
ATTR_VALUE_RAW,
|
ATTR_VALUE_RAW,
|
||||||
|
CONF_ADDON_DEVICE,
|
||||||
|
CONF_ADDON_NETWORK_KEY,
|
||||||
CONF_DATA_COLLECTION_OPTED_IN,
|
CONF_DATA_COLLECTION_OPTED_IN,
|
||||||
CONF_INTEGRATION_CREATED_ADDON,
|
CONF_INTEGRATION_CREATED_ADDON,
|
||||||
CONF_NETWORK_KEY,
|
CONF_NETWORK_KEY,
|
||||||
|
@ -580,6 +582,17 @@ async def async_ensure_addon_running(hass: HomeAssistant, entry: ConfigEntry) ->
|
||||||
)
|
)
|
||||||
raise ConfigEntryNotReady
|
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
|
@callback
|
||||||
def async_ensure_addon_updated(hass: HomeAssistant) -> None:
|
def async_ensure_addon_updated(hass: HomeAssistant) -> None:
|
||||||
|
|
|
@ -654,6 +654,48 @@ async def test_addon_info_failure(
|
||||||
assert start_addon.call_count == 0
|
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(
|
@pytest.mark.parametrize(
|
||||||
"addon_version, update_available, update_calls, snapshot_calls, "
|
"addon_version, update_available, update_calls, snapshot_calls, "
|
||||||
"update_addon_side_effect, create_shapshot_side_effect",
|
"update_addon_side_effect, create_shapshot_side_effect",
|
||||||
|
@ -681,13 +723,15 @@ async def test_update_addon(
|
||||||
create_shapshot_side_effect,
|
create_shapshot_side_effect,
|
||||||
):
|
):
|
||||||
"""Test update the Z-Wave JS add-on during entry setup."""
|
"""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["version"] = addon_version
|
||||||
addon_info.return_value["update_available"] = update_available
|
addon_info.return_value["update_available"] = update_available
|
||||||
create_shapshot.side_effect = create_shapshot_side_effect
|
create_shapshot.side_effect = create_shapshot_side_effect
|
||||||
update_addon.side_effect = update_addon_side_effect
|
update_addon.side_effect = update_addon_side_effect
|
||||||
client.connect.side_effect = InvalidServerVersion("Invalid version")
|
client.connect.side_effect = InvalidServerVersion("Invalid version")
|
||||||
device = "/test"
|
|
||||||
network_key = "abc123"
|
|
||||||
entry = MockConfigEntry(
|
entry = MockConfigEntry(
|
||||||
domain=DOMAIN,
|
domain=DOMAIN,
|
||||||
title="Z-Wave JS",
|
title="Z-Wave JS",
|
||||||
|
@ -729,6 +773,8 @@ async def test_stop_addon(
|
||||||
stop_addon.side_effect = stop_addon_side_effect
|
stop_addon.side_effect = stop_addon_side_effect
|
||||||
device = "/test"
|
device = "/test"
|
||||||
network_key = "abc123"
|
network_key = "abc123"
|
||||||
|
addon_options["device"] = device
|
||||||
|
addon_options["network_key"] = network_key
|
||||||
entry = MockConfigEntry(
|
entry = MockConfigEntry(
|
||||||
domain=DOMAIN,
|
domain=DOMAIN,
|
||||||
title="Z-Wave JS",
|
title="Z-Wave JS",
|
||||||
|
|
Loading…
Add table
Reference in a new issue