diff --git a/homeassistant/components/wled/config_flow.py b/homeassistant/components/wled/config_flow.py index 99630f5781c..1dda368a2b0 100644 --- a/homeassistant/components/wled/config_flow.py +++ b/homeassistant/components/wled/config_flow.py @@ -6,7 +6,7 @@ from typing import Any import voluptuous as vol from wled import WLED, Device, WLEDConnectionError -from homeassistant.components import zeroconf +from homeassistant.components import onboarding, zeroconf from homeassistant.config_entries import ConfigEntry, ConfigFlow, OptionsFlow from homeassistant.const import CONF_HOST, CONF_MAC from homeassistant.core import callback @@ -97,7 +97,7 @@ class WLEDFlowHandler(ConfigFlow, domain=DOMAIN): self, user_input: dict[str, Any] | None = None ) -> FlowResult: """Handle a flow initiated by zeroconf.""" - if user_input is not None: + if user_input is not None or not onboarding.async_is_onboarded(self.hass): return self.async_create_entry( title=self.discovered_device.info.name, data={ diff --git a/tests/components/wled/conftest.py b/tests/components/wled/conftest.py index f89d92aaa16..d0b5b24a8fb 100644 --- a/tests/components/wled/conftest.py +++ b/tests/components/wled/conftest.py @@ -1,7 +1,7 @@ """Fixtures for WLED integration tests.""" from collections.abc import Generator import json -from unittest.mock import MagicMock, patch +from unittest.mock import AsyncMock, MagicMock, patch import pytest from wled import Device as WLEDDevice @@ -25,10 +25,22 @@ def mock_config_entry() -> MockConfigEntry: @pytest.fixture -def mock_setup_entry() -> Generator[None, None, None]: +def mock_setup_entry() -> Generator[None, AsyncMock, None]: """Mock setting up a config entry.""" - with patch("homeassistant.components.wled.async_setup_entry", return_value=True): - yield + with patch( + "homeassistant.components.wled.async_setup_entry", return_value=True + ) as mock_setup: + yield mock_setup + + +@pytest.fixture +def mock_onboarding() -> Generator[None, MagicMock, None]: + """Mock that Home Assistant is currently onboarding.""" + with patch( + "homeassistant.components.onboarding.async_is_onboarded", + return_value=False, + ) as mock_onboarding: + yield mock_onboarding @pytest.fixture diff --git a/tests/components/wled/test_config_flow.py b/tests/components/wled/test_config_flow.py index c23f35534b8..e1cf08069da 100644 --- a/tests/components/wled/test_config_flow.py +++ b/tests/components/wled/test_config_flow.py @@ -1,5 +1,5 @@ """Tests for the WLED config flow.""" -from unittest.mock import MagicMock +from unittest.mock import AsyncMock, MagicMock from wled import WLEDConnectionError @@ -18,7 +18,7 @@ from tests.common import MockConfigEntry async def test_full_user_flow_implementation( - hass: HomeAssistant, mock_wled_config_flow: MagicMock, mock_setup_entry: None + hass: HomeAssistant, mock_wled_config_flow: MagicMock, mock_setup_entry: AsyncMock ) -> None: """Test the full manual user flow from start to finish.""" result = await hass.config_entries.flow.async_init( @@ -43,7 +43,7 @@ async def test_full_user_flow_implementation( async def test_full_zeroconf_flow_implementation( - hass: HomeAssistant, mock_wled_config_flow: MagicMock, mock_setup_entry: None + hass: HomeAssistant, mock_wled_config_flow: MagicMock, mock_setup_entry: AsyncMock ) -> None: """Test the full manual user flow from start to finish.""" result = await hass.config_entries.flow.async_init( @@ -84,6 +84,38 @@ async def test_full_zeroconf_flow_implementation( assert result2["result"].unique_id == "aabbccddeeff" +async def test_zeroconf_during_onboarding( + hass: HomeAssistant, + mock_wled_config_flow: MagicMock, + mock_setup_entry: AsyncMock, + mock_onboarding: MagicMock, +) -> None: + """Test we create a config entry when discovered during onboarding.""" + result = await hass.config_entries.flow.async_init( + DOMAIN, + context={"source": SOURCE_ZEROCONF}, + data=zeroconf.ZeroconfServiceInfo( + host="192.168.1.123", + addresses=["192.168.1.123"], + hostname="example.local.", + name="mock_name", + port=None, + properties={CONF_MAC: "aabbccddeeff"}, + type="mock_type", + ), + ) + + assert result.get("title") == "WLED RGB Light" + assert result.get("type") == RESULT_TYPE_CREATE_ENTRY + + assert result.get("data") == {CONF_HOST: "192.168.1.123"} + assert "result" in result + assert result["result"].unique_id == "aabbccddeeff" + + assert len(mock_setup_entry.mock_calls) == 1 + assert len(mock_onboarding.mock_calls) == 1 + + async def test_connection_error( hass: HomeAssistant, mock_wled_config_flow: MagicMock ) -> None: