mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 08:47:57 +00:00
Ensure Plugwise unique_id is correctly set (#40014)
* Ensure unique_id is correctly set * Removed unnec. line Co-authored-by: Tom Scholten <git@scholten.nu>
This commit is contained in:
parent
e3c51f0350
commit
eac9c3c4f2
@ -94,6 +94,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
|
||||
api.get_all_devices()
|
||||
|
||||
if entry.unique_id is None:
|
||||
if api.smile_version[0] != "1.8.0":
|
||||
hass.config_entries.async_update_entry(entry, unique_id=api.smile_hostname)
|
||||
|
||||
undo_listener = entry.add_update_listener(_update_listener)
|
||||
|
||||
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = {
|
||||
|
@ -96,6 +96,10 @@ class PlugwiseConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
if self.discovery_info:
|
||||
user_input[CONF_HOST] = self.discovery_info[CONF_HOST]
|
||||
|
||||
for entry in self._async_current_entries():
|
||||
if entry.data.get(CONF_HOST) == user_input[CONF_HOST]:
|
||||
return self.async_abort(reason="already_configured")
|
||||
|
||||
try:
|
||||
api = await validate_input(self.hass, user_input)
|
||||
|
||||
@ -107,7 +111,9 @@ class PlugwiseConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
_LOGGER.exception("Unexpected exception")
|
||||
errors["base"] = "unknown"
|
||||
if not errors:
|
||||
await self.async_set_unique_id(api.gateway_id)
|
||||
await self.async_set_unique_id(
|
||||
api.smile_hostname or api.gateway_id, raise_on_progress=False
|
||||
)
|
||||
self._abort_if_unique_id_configured()
|
||||
|
||||
return self.async_create_entry(title=api.smile_name, data=user_input)
|
||||
|
@ -73,6 +73,7 @@ def mock_smile_adam():
|
||||
smile_mock.return_value.heater_id = "90986d591dcd426cae3ec3e8111ff730"
|
||||
smile_mock.return_value.smile_version = "3.0.15"
|
||||
smile_mock.return_value.smile_type = "thermostat"
|
||||
smile_mock.return_value.smile_hostname = "smile98765"
|
||||
|
||||
smile_mock.return_value.connect.side_effect = AsyncMock(return_value=True)
|
||||
smile_mock.return_value.full_update_device.side_effect = AsyncMock(
|
||||
@ -112,6 +113,7 @@ def mock_smile_anna():
|
||||
smile_mock.return_value.heater_id = "1cbf783bb11e4a7c8a6843dee3a86927"
|
||||
smile_mock.return_value.smile_version = "4.0.15"
|
||||
smile_mock.return_value.smile_type = "thermostat"
|
||||
smile_mock.return_value.smile_hostname = "smile98765"
|
||||
|
||||
smile_mock.return_value.connect.side_effect = AsyncMock(return_value=True)
|
||||
smile_mock.return_value.full_update_device.side_effect = AsyncMock(
|
||||
@ -151,6 +153,7 @@ def mock_smile_p1():
|
||||
smile_mock.return_value.heater_id = None
|
||||
smile_mock.return_value.smile_version = "3.3.9"
|
||||
smile_mock.return_value.smile_type = "power"
|
||||
smile_mock.return_value.smile_hostname = "smile98765"
|
||||
|
||||
smile_mock.return_value.connect.side_effect = AsyncMock(return_value=True)
|
||||
smile_mock.return_value.full_update_device.side_effect = AsyncMock(
|
||||
|
@ -111,6 +111,34 @@ async def test_zeroconf_form(hass):
|
||||
assert len(mock_setup.mock_calls) == 1
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
result3 = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": SOURCE_ZEROCONF},
|
||||
data=TEST_DISCOVERY,
|
||||
)
|
||||
assert result3["type"] == data_entry_flow.RESULT_TYPE_FORM
|
||||
assert result3["errors"] == {}
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.plugwise.config_flow.Smile.connect",
|
||||
return_value=True,
|
||||
), patch(
|
||||
"homeassistant.components.plugwise.async_setup",
|
||||
return_value=True,
|
||||
) as mock_setup, patch(
|
||||
"homeassistant.components.plugwise.async_setup_entry",
|
||||
return_value=True,
|
||||
) as mock_setup_entry:
|
||||
result4 = await hass.config_entries.flow.async_configure(
|
||||
result3["flow_id"],
|
||||
{"password": TEST_PASSWORD},
|
||||
)
|
||||
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert result4["type"] == "abort"
|
||||
assert result4["reason"] == "already_configured"
|
||||
|
||||
|
||||
async def test_form_invalid_auth(hass, mock_smile):
|
||||
"""Test we handle invalid auth."""
|
||||
|
Loading…
x
Reference in New Issue
Block a user