Skip to content

Commit 92b988a

Browse files
joostlekballoob
authored andcommitted
Abort Nanoleaf discovery flows with user flow (home-assistant#150818)
1 parent 1ca6c4b commit 92b988a

File tree

2 files changed

+66
-2
lines changed

2 files changed

+66
-2
lines changed

homeassistant/components/nanoleaf/config_flow.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@
1010
from aionanoleaf import InvalidToken, Nanoleaf, Unauthorized, Unavailable
1111
import voluptuous as vol
1212

13-
from homeassistant.config_entries import SOURCE_REAUTH, ConfigFlow, ConfigFlowResult
13+
from homeassistant.config_entries import (
14+
SOURCE_REAUTH,
15+
SOURCE_USER,
16+
ConfigFlow,
17+
ConfigFlowResult,
18+
)
1419
from homeassistant.const import CONF_HOST, CONF_TOKEN
1520
from homeassistant.helpers.aiohttp_client import async_get_clientsession
1621
from homeassistant.helpers.json import save_json
@@ -200,7 +205,9 @@ async def async_setup_finish(
200205
return self.async_abort(reason="unknown")
201206
name = self.nanoleaf.name
202207

203-
await self.async_set_unique_id(name)
208+
await self.async_set_unique_id(
209+
name, raise_on_progress=self.source != SOURCE_USER
210+
)
204211
self._abort_if_unique_id_configured({CONF_HOST: self.nanoleaf.host})
205212

206213
if discovery_integration_import:

tests/components/nanoleaf/test_config_flow.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
from homeassistant import config_entries
1212
from homeassistant.components.nanoleaf.const import DOMAIN
13+
from homeassistant.config_entries import SOURCE_USER
1314
from homeassistant.const import CONF_HOST, CONF_TOKEN
1415
from homeassistant.core import HomeAssistant
1516
from homeassistant.data_entry_flow import FlowResultType
@@ -463,3 +464,59 @@ async def test_ssdp_discovery(hass: HomeAssistant) -> None:
463464
}
464465

465466
assert len(mock_setup_entry.mock_calls) == 1
467+
468+
469+
async def test_abort_discovery_flow_with_user_flow(hass: HomeAssistant) -> None:
470+
"""Test abort discovery flow if user flow is already in progress."""
471+
with (
472+
patch(
473+
"homeassistant.components.nanoleaf.config_flow.load_json_object",
474+
return_value={},
475+
),
476+
patch(
477+
"homeassistant.components.nanoleaf.config_flow.Nanoleaf",
478+
return_value=_mock_nanoleaf(TEST_HOST, TEST_TOKEN),
479+
),
480+
patch(
481+
"homeassistant.components.nanoleaf.async_setup_entry",
482+
return_value=True,
483+
),
484+
):
485+
result = await hass.config_entries.flow.async_init(
486+
DOMAIN,
487+
context={"source": config_entries.SOURCE_SSDP},
488+
data=SsdpServiceInfo(
489+
ssdp_usn="mock_usn",
490+
ssdp_st="mock_st",
491+
upnp={},
492+
ssdp_headers={
493+
"_host": TEST_HOST,
494+
"nl-devicename": TEST_NAME,
495+
"nl-deviceid": TEST_DEVICE_ID,
496+
},
497+
),
498+
)
499+
500+
assert result["type"] is FlowResultType.FORM
501+
assert result["errors"] is None
502+
assert result["step_id"] == "link"
503+
504+
result = await hass.config_entries.flow.async_init(
505+
DOMAIN,
506+
context={"source": SOURCE_USER},
507+
)
508+
assert len(hass.config_entries.flow.async_progress(DOMAIN)) == 2
509+
assert result["type"] is FlowResultType.FORM
510+
assert result["step_id"] == "user"
511+
512+
result = await hass.config_entries.flow.async_configure(
513+
result["flow_id"], {CONF_HOST: TEST_HOST}
514+
)
515+
assert result["type"] is FlowResultType.FORM
516+
assert result["step_id"] == "link"
517+
518+
result = await hass.config_entries.flow.async_configure(result["flow_id"], {})
519+
assert result["type"] is FlowResultType.CREATE_ENTRY
520+
521+
# Verify the discovery flow was aborted
522+
assert not hass.config_entries.flow.async_progress(DOMAIN)

0 commit comments

Comments
 (0)