diff --git a/homeassistant/components/nuki/__init__.py b/homeassistant/components/nuki/__init__.py index 627cf20b16b..4af3e0d8ed4 100644 --- a/homeassistant/components/nuki/__init__.py +++ b/homeassistant/components/nuki/__init__.py @@ -1,7 +1,6 @@ """The nuki component.""" from datetime import timedelta -import logging import voluptuous as vol @@ -12,8 +11,6 @@ import homeassistant.helpers.config_validation as cv from .const import DEFAULT_PORT, DOMAIN -_LOGGER = logging.getLogger(__name__) - NUKI_PLATFORMS = ["lock"] UPDATE_INTERVAL = timedelta(seconds=30) @@ -27,16 +24,10 @@ NUKI_SCHEMA = vol.Schema( ) ) -CONFIG_SCHEMA = vol.Schema( - {DOMAIN: vol.Schema(NUKI_SCHEMA)}, - extra=vol.ALLOW_EXTRA, -) - async def async_setup(hass, config): """Set up the Nuki component.""" hass.data.setdefault(DOMAIN, {}) - _LOGGER.debug("Config: %s", config) for platform in NUKI_PLATFORMS: confs = config.get(platform) @@ -44,7 +35,6 @@ async def async_setup(hass, config): continue for conf in confs: - _LOGGER.debug("Conf: %s", conf) hass.async_create_task( hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_IMPORT}, data=conf diff --git a/homeassistant/components/nuki/lock.py b/homeassistant/components/nuki/lock.py index fe024405908..818784a2b2e 100644 --- a/homeassistant/components/nuki/lock.py +++ b/homeassistant/components/nuki/lock.py @@ -45,7 +45,6 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= async def async_setup_entry(hass, config_entry, async_add_entities): """Set up the Nuki lock platform.""" config = config_entry.data - _LOGGER.debug("Config: %s", config) def get_entities(): bridge = NukiBridge( diff --git a/tests/components/nuki/test_config_flow.py b/tests/components/nuki/test_config_flow.py index 45168e42c9d..bcdedad371a 100644 --- a/tests/components/nuki/test_config_flow.py +++ b/tests/components/nuki/test_config_flow.py @@ -1,10 +1,14 @@ """Test the nuki config flow.""" from unittest.mock import patch -from homeassistant import config_entries, setup -from homeassistant.components.nuki.config_flow import CannotConnect, InvalidAuth +from pynuki.bridge import InvalidCredentialsException +from requests.exceptions import RequestException + +from homeassistant import config_entries, data_entry_flow, setup from homeassistant.components.nuki.const import DOMAIN +from tests.common import MockConfigEntry + async def test_form(hass): """Test we get the form.""" @@ -12,7 +16,7 @@ async def test_form(hass): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_USER} ) - assert result["type"] == "form" + assert result["type"] == data_entry_flow.RESULT_TYPE_FORM assert result["errors"] == {} mock_info = {"ids": {"hardwareId": "0001"}} @@ -36,7 +40,7 @@ async def test_form(hass): ) await hass.async_block_till_done() - assert result2["type"] == "create_entry" + assert result2["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY assert result2["title"] == "0001" assert result2["data"] == { "host": "1.1.1.1", @@ -47,6 +51,39 @@ async def test_form(hass): assert len(mock_setup_entry.mock_calls) == 1 +async def test_import(hass): + """Test that the import works.""" + await setup.async_setup_component(hass, "persistent_notification", {}) + + mock_info = {"ids": {"hardwareId": "0001"}} + + with patch( + "homeassistant.components.nuki.config_flow.NukiBridge.info", + return_value=mock_info, + ), patch( + "homeassistant.components.nuki.async_setup", return_value=True + ) as mock_setup, patch( + "homeassistant.components.nuki.async_setup_entry", + return_value=True, + ) as mock_setup_entry: + result = await hass.config_entries.flow.async_init( + DOMAIN, + context={"source": config_entries.SOURCE_IMPORT}, + data={"host": "1.1.1.1", "port": 8080, "token": "test-token"}, + ) + assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY + assert result["title"] == "0001" + assert result["data"] == { + "host": "1.1.1.1", + "port": 8080, + "token": "test-token", + } + + await hass.async_block_till_done() + assert len(mock_setup.mock_calls) == 1 + assert len(mock_setup_entry.mock_calls) == 1 + + async def test_form_invalid_auth(hass): """Test we handle invalid auth.""" result = await hass.config_entries.flow.async_init( @@ -55,7 +92,7 @@ async def test_form_invalid_auth(hass): with patch( "homeassistant.components.nuki.config_flow.NukiBridge.info", - side_effect=InvalidAuth, + side_effect=InvalidCredentialsException, ): result2 = await hass.config_entries.flow.async_configure( result["flow_id"], @@ -66,7 +103,7 @@ async def test_form_invalid_auth(hass): }, ) - assert result2["type"] == "form" + assert result2["type"] == data_entry_flow.RESULT_TYPE_FORM assert result2["errors"] == {"base": "invalid_auth"} @@ -78,7 +115,7 @@ async def test_form_cannot_connect(hass): with patch( "homeassistant.components.nuki.config_flow.NukiBridge.info", - side_effect=CannotConnect, + side_effect=RequestException, ): result2 = await hass.config_entries.flow.async_configure( result["flow_id"], @@ -89,5 +126,59 @@ async def test_form_cannot_connect(hass): }, ) - assert result2["type"] == "form" + assert result2["type"] == data_entry_flow.RESULT_TYPE_FORM assert result2["errors"] == {"base": "cannot_connect"} + + +async def test_form_unknown_exception(hass): + """Test we handle unknown exceptions.""" + result = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": config_entries.SOURCE_USER} + ) + + with patch( + "homeassistant.components.nuki.config_flow.NukiBridge.info", + side_effect=Exception, + ): + result2 = await hass.config_entries.flow.async_configure( + result["flow_id"], + { + "host": "1.1.1.1", + "port": 8080, + "token": "test-token", + }, + ) + + assert result2["type"] == data_entry_flow.RESULT_TYPE_FORM + assert result2["errors"] == {"base": "unknown"} + + +async def test_form_already_configured(hass): + """Test we get the form.""" + await setup.async_setup_component(hass, "persistent_notification", {}) + entry = MockConfigEntry( + domain="nuki", + unique_id="0001", + data={"host": "1.1.1.1", "port": 8080, "token": "test-token"}, + ) + entry.add_to_hass(hass) + + result = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": config_entries.SOURCE_USER} + ) + + with patch( + "homeassistant.components.nuki.config_flow.NukiBridge.info", + return_value={"ids": {"hardwareId": "0001"}}, + ): + result2 = await hass.config_entries.flow.async_configure( + result["flow_id"], + { + "host": "1.1.1.1", + "port": 8080, + "token": "test-token", + }, + ) + + assert result2["type"] == data_entry_flow.RESULT_TYPE_ABORT + assert result2["reason"] == "already_configured"