mirror of
https://github.com/home-assistant/core.git
synced 2025-07-14 08:47:10 +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
f0ce65af7d
commit
8b4e193614
@ -94,6 +94,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||||||
|
|
||||||
api.get_all_devices()
|
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)
|
undo_listener = entry.add_update_listener(_update_listener)
|
||||||
|
|
||||||
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = {
|
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = {
|
||||||
|
@ -96,6 +96,10 @@ class PlugwiseConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
|||||||
if self.discovery_info:
|
if self.discovery_info:
|
||||||
user_input[CONF_HOST] = self.discovery_info[CONF_HOST]
|
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:
|
try:
|
||||||
api = await validate_input(self.hass, user_input)
|
api = await validate_input(self.hass, user_input)
|
||||||
|
|
||||||
@ -107,7 +111,9 @@ class PlugwiseConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
|||||||
_LOGGER.exception("Unexpected exception")
|
_LOGGER.exception("Unexpected exception")
|
||||||
errors["base"] = "unknown"
|
errors["base"] = "unknown"
|
||||||
if not errors:
|
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()
|
self._abort_if_unique_id_configured()
|
||||||
|
|
||||||
return self.async_create_entry(title=api.smile_name, data=user_input)
|
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.heater_id = "90986d591dcd426cae3ec3e8111ff730"
|
||||||
smile_mock.return_value.smile_version = "3.0.15"
|
smile_mock.return_value.smile_version = "3.0.15"
|
||||||
smile_mock.return_value.smile_type = "thermostat"
|
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.connect.side_effect = AsyncMock(return_value=True)
|
||||||
smile_mock.return_value.full_update_device.side_effect = AsyncMock(
|
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.heater_id = "1cbf783bb11e4a7c8a6843dee3a86927"
|
||||||
smile_mock.return_value.smile_version = "4.0.15"
|
smile_mock.return_value.smile_version = "4.0.15"
|
||||||
smile_mock.return_value.smile_type = "thermostat"
|
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.connect.side_effect = AsyncMock(return_value=True)
|
||||||
smile_mock.return_value.full_update_device.side_effect = AsyncMock(
|
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.heater_id = None
|
||||||
smile_mock.return_value.smile_version = "3.3.9"
|
smile_mock.return_value.smile_version = "3.3.9"
|
||||||
smile_mock.return_value.smile_type = "power"
|
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.connect.side_effect = AsyncMock(return_value=True)
|
||||||
smile_mock.return_value.full_update_device.side_effect = AsyncMock(
|
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.mock_calls) == 1
|
||||||
assert len(mock_setup_entry.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):
|
async def test_form_invalid_auth(hass, mock_smile):
|
||||||
"""Test we handle invalid auth."""
|
"""Test we handle invalid auth."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user