From 92f4f99d41932dac17a19e44350605be29d1c1f6 Mon Sep 17 00:00:00 2001 From: G Johansson Date: Fri, 4 Feb 2022 00:05:56 +0100 Subject: [PATCH] Add back resolvers config flow dnsip (#65570) --- homeassistant/components/dnsip/config_flow.py | 17 ++++++- homeassistant/components/dnsip/strings.json | 4 +- .../components/dnsip/translations/en.json | 4 +- tests/components/dnsip/test_config_flow.py | 44 +++++++++++++++++++ 4 files changed, 65 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/dnsip/config_flow.py b/homeassistant/components/dnsip/config_flow.py index bedcc5f821c..2db0034b697 100644 --- a/homeassistant/components/dnsip/config_flow.py +++ b/homeassistant/components/dnsip/config_flow.py @@ -33,6 +33,13 @@ DATA_SCHEMA = vol.Schema( vol.Required(CONF_HOSTNAME, default=DEFAULT_HOSTNAME): cv.string, } ) +DATA_SCHEMA_ADV = vol.Schema( + { + vol.Required(CONF_HOSTNAME, default=DEFAULT_HOSTNAME): cv.string, + vol.Optional(CONF_RESOLVER, default=DEFAULT_RESOLVER): cv.string, + vol.Optional(CONF_RESOLVER_IPV6, default=DEFAULT_RESOLVER_IPV6): cv.string, + } +) async def async_validate_hostname( @@ -94,8 +101,8 @@ class DnsIPConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): hostname = user_input[CONF_HOSTNAME] name = DEFAULT_NAME if hostname == DEFAULT_HOSTNAME else hostname - resolver = DEFAULT_RESOLVER - resolver_ipv6 = DEFAULT_RESOLVER_IPV6 + resolver = user_input.get(CONF_RESOLVER, DEFAULT_RESOLVER) + resolver_ipv6 = user_input.get(CONF_RESOLVER_IPV6, DEFAULT_RESOLVER_IPV6) validate = await async_validate_hostname(hostname, resolver, resolver_ipv6) @@ -119,6 +126,12 @@ class DnsIPConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): }, ) + if self.show_advanced_options is True: + return self.async_show_form( + step_id="user", + data_schema=DATA_SCHEMA_ADV, + errors=errors, + ) return self.async_show_form( step_id="user", data_schema=DATA_SCHEMA, diff --git a/homeassistant/components/dnsip/strings.json b/homeassistant/components/dnsip/strings.json index 06672e6fb68..cd95c9db27f 100644 --- a/homeassistant/components/dnsip/strings.json +++ b/homeassistant/components/dnsip/strings.json @@ -3,7 +3,9 @@ "step": { "user": { "data": { - "hostname": "The hostname for which to perform the DNS query" + "hostname": "The hostname for which to perform the DNS query", + "resolver": "Resolver for IPV4 lookup", + "resolver_ipv6": "Resolver for IPV6 lookup" } } }, diff --git a/homeassistant/components/dnsip/translations/en.json b/homeassistant/components/dnsip/translations/en.json index 7b2e2f9e6c7..2c773375860 100644 --- a/homeassistant/components/dnsip/translations/en.json +++ b/homeassistant/components/dnsip/translations/en.json @@ -6,7 +6,9 @@ "step": { "user": { "data": { - "hostname": "The hostname for which to perform the DNS query" + "hostname": "The hostname for which to perform the DNS query", + "resolver": "Resolver for IPV4 lookup", + "resolver_ipv6": "Resolver for IPV6 lookup" } } } diff --git a/tests/components/dnsip/test_config_flow.py b/tests/components/dnsip/test_config_flow.py index 59dcb81aa94..f4684eb1cc4 100644 --- a/tests/components/dnsip/test_config_flow.py +++ b/tests/components/dnsip/test_config_flow.py @@ -7,6 +7,7 @@ from aiodns.error import DNSError import pytest from homeassistant import config_entries +from homeassistant.components.dnsip.config_flow import DATA_SCHEMA, DATA_SCHEMA_ADV from homeassistant.components.dnsip.const import ( CONF_HOSTNAME, CONF_IPV4, @@ -47,6 +48,7 @@ async def test_form(hass: HomeAssistant) -> None: DOMAIN, context={"source": config_entries.SOURCE_USER} ) assert result["type"] == "form" + assert result["data_schema"] == DATA_SCHEMA assert result["errors"] == {} with patch( @@ -79,6 +81,48 @@ async def test_form(hass: HomeAssistant) -> None: assert len(mock_setup_entry.mock_calls) == 1 +async def test_form_adv(hass: HomeAssistant) -> None: + """Test we get the form with advanced options on.""" + + result = await hass.config_entries.flow.async_init( + DOMAIN, + context={"source": config_entries.SOURCE_USER, "show_advanced_options": True}, + ) + + assert result["data_schema"] == DATA_SCHEMA_ADV + + with patch( + "homeassistant.components.dnsip.config_flow.aiodns.DNSResolver", + return_value=RetrieveDNS(), + ), patch( + "homeassistant.components.dnsip.async_setup_entry", + return_value=True, + ) as mock_setup_entry: + result2 = await hass.config_entries.flow.async_configure( + result["flow_id"], + { + CONF_HOSTNAME: "home-assistant.io", + CONF_RESOLVER: "8.8.8.8", + CONF_RESOLVER_IPV6: "2620:0:ccc::2", + }, + ) + await hass.async_block_till_done() + + assert result2["type"] == RESULT_TYPE_CREATE_ENTRY + assert result2["title"] == "home-assistant.io" + assert result2["data"] == { + "hostname": "home-assistant.io", + "name": "home-assistant.io", + "ipv4": True, + "ipv6": True, + } + assert result2["options"] == { + "resolver": "8.8.8.8", + "resolver_ipv6": "2620:0:ccc::2", + } + assert len(mock_setup_entry.mock_calls) == 1 + + async def test_form_error(hass: HomeAssistant) -> None: """Test validate url fails.""" result = await hass.config_entries.flow.async_init(