From 1c15544d7ad776abbb616387529c6c0191f3b008 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Sun, 21 Nov 2021 22:50:29 +0100 Subject: [PATCH] Use ZeroconfServiceInfo in smappee (#60096) --- .../components/smappee/config_flow.py | 17 ++- tests/components/smappee/test_config_flow.py | 130 +++++++++--------- 2 files changed, 77 insertions(+), 70 deletions(-) diff --git a/homeassistant/components/smappee/config_flow.py b/homeassistant/components/smappee/config_flow.py index b13e540bae3..2fb5abaa05e 100644 --- a/homeassistant/components/smappee/config_flow.py +++ b/homeassistant/components/smappee/config_flow.py @@ -4,12 +4,13 @@ import logging from pysmappee import helper, mqtt import voluptuous as vol +from homeassistant.components import zeroconf from homeassistant.const import CONF_HOST, CONF_IP_ADDRESS +from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import config_entry_oauth2_flow from . import api from .const import ( - CONF_HOSTNAME, CONF_SERIALNUMBER, DOMAIN, ENV_CLOUD, @@ -36,14 +37,20 @@ class SmappeeFlowHandler( """Return logger.""" return logging.getLogger(__name__) - async def async_step_zeroconf(self, discovery_info): + async def async_step_zeroconf( + self, discovery_info: zeroconf.ZeroconfServiceInfo + ) -> FlowResult: """Handle zeroconf discovery.""" - if not discovery_info[CONF_HOSTNAME].startswith(SUPPORTED_LOCAL_DEVICES): + if not discovery_info[zeroconf.ATTR_HOSTNAME].startswith( + SUPPORTED_LOCAL_DEVICES + ): return self.async_abort(reason="invalid_mdns") serial_number = ( - discovery_info[CONF_HOSTNAME].replace(".local.", "").replace("Smappee", "") + discovery_info[zeroconf.ATTR_HOSTNAME] + .replace(".local.", "") + .replace("Smappee", "") ) # Check if already configured (local) @@ -56,7 +63,7 @@ class SmappeeFlowHandler( self.context.update( { - CONF_IP_ADDRESS: discovery_info["host"], + CONF_IP_ADDRESS: discovery_info[zeroconf.ATTR_HOST], CONF_SERIALNUMBER: serial_number, "title_placeholders": {"name": serial_number}, } diff --git a/tests/components/smappee/test_config_flow.py b/tests/components/smappee/test_config_flow.py index d8efe8b2903..f6f988a3caa 100644 --- a/tests/components/smappee/test_config_flow.py +++ b/tests/components/smappee/test_config_flow.py @@ -3,8 +3,8 @@ from http import HTTPStatus from unittest.mock import patch from homeassistant import data_entry_flow, setup +from homeassistant.components import zeroconf from homeassistant.components.smappee.const import ( - CONF_HOSTNAME, CONF_SERIALNUMBER, DOMAIN, ENV_CLOUD, @@ -55,14 +55,14 @@ async def test_show_zeroconf_connection_error_form(hass): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_ZEROCONF}, - data={ - "host": "1.2.3.4", - "port": 22, - CONF_HOSTNAME: "Smappee1006000212.local.", - "type": "_ssh._tcp.local.", - "name": "Smappee1006000212._ssh._tcp.local.", - "properties": {"_raw": {}}, - }, + data=zeroconf.ZeroconfServiceInfo( + host="1.2.3.4", + port=22, + hostname="Smappee1006000212.local.", + type="_ssh._tcp.local.", + name="Smappee1006000212._ssh._tcp.local.", + properties={"_raw": {}}, + ), ) assert result["description_placeholders"] == {CONF_SERIALNUMBER: "1006000212"} @@ -84,14 +84,14 @@ async def test_show_zeroconf_connection_error_form_next_generation(hass): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_ZEROCONF}, - data={ - "host": "1.2.3.4", - "port": 22, - CONF_HOSTNAME: "Smappee5001000212.local.", - "type": "_ssh._tcp.local.", - "name": "Smappee5001000212._ssh._tcp.local.", - "properties": {"_raw": {}}, - }, + data=zeroconf.ZeroconfServiceInfo( + host="1.2.3.4", + port=22, + hostname="Smappee5001000212.local.", + type="_ssh._tcp.local.", + name="Smappee5001000212._ssh._tcp.local.", + properties={"_raw": {}}, + ), ) assert result["description_placeholders"] == {CONF_SERIALNUMBER: "5001000212"} @@ -166,14 +166,14 @@ async def test_zeroconf_wrong_mdns(hass): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_ZEROCONF}, - data={ - "host": "1.2.3.4", - "port": 22, - CONF_HOSTNAME: "example.local.", - "type": "_ssh._tcp.local.", - "name": "example._ssh._tcp.local.", - "properties": {"_raw": {}}, - }, + data=zeroconf.ZeroconfServiceInfo( + host="1.2.3.4", + port=22, + hostname="example.local.", + type="_ssh._tcp.local.", + name="example._ssh._tcp.local.", + properties={"_raw": {}}, + ), ) assert result["reason"] == "invalid_mdns" @@ -276,14 +276,14 @@ async def test_zeroconf_device_exists_abort(hass): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_ZEROCONF}, - data={ - "host": "1.2.3.4", - "port": 22, - CONF_HOSTNAME: "Smappee1006000212.local.", - "type": "_ssh._tcp.local.", - "name": "Smappee1006000212._ssh._tcp.local.", - "properties": {"_raw": {}}, - }, + data=zeroconf.ZeroconfServiceInfo( + host="1.2.3.4", + port=22, + hostname="Smappee1006000212.local.", + type="_ssh._tcp.local.", + name="Smappee1006000212._ssh._tcp.local.", + properties={"_raw": {}}, + ), ) assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT assert result["reason"] == "already_configured" @@ -325,14 +325,14 @@ async def test_zeroconf_abort_if_cloud_device_exists(hass): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_ZEROCONF}, - data={ - "host": "1.2.3.4", - "port": 22, - CONF_HOSTNAME: "Smappee1006000212.local.", - "type": "_ssh._tcp.local.", - "name": "Smappee1006000212._ssh._tcp.local.", - "properties": {"_raw": {}}, - }, + data=zeroconf.ZeroconfServiceInfo( + host="1.2.3.4", + port=22, + hostname="Smappee1006000212.local.", + type="_ssh._tcp.local.", + name="Smappee1006000212._ssh._tcp.local.", + properties={"_raw": {}}, + ), ) assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT assert result["reason"] == "already_configured_device" @@ -344,14 +344,14 @@ async def test_zeroconf_confirm_abort_if_cloud_device_exists(hass): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_ZEROCONF}, - data={ - "host": "1.2.3.4", - "port": 22, - CONF_HOSTNAME: "Smappee1006000212.local.", - "type": "_ssh._tcp.local.", - "name": "Smappee1006000212._ssh._tcp.local.", - "properties": {"_raw": {}}, - }, + data=zeroconf.ZeroconfServiceInfo( + host="1.2.3.4", + port=22, + hostname="Smappee1006000212.local.", + type="_ssh._tcp.local.", + name="Smappee1006000212._ssh._tcp.local.", + properties={"_raw": {}}, + ), ) config_entry = MockConfigEntry( @@ -463,14 +463,14 @@ async def test_full_zeroconf_flow(hass): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_ZEROCONF}, - data={ - "host": "1.2.3.4", - "port": 22, - CONF_HOSTNAME: "Smappee1006000212.local.", - "type": "_ssh._tcp.local.", - "name": "Smappee1006000212._ssh._tcp.local.", - "properties": {"_raw": {}}, - }, + data=zeroconf.ZeroconfServiceInfo( + host="1.2.3.4", + port=22, + hostname="Smappee1006000212.local.", + type="_ssh._tcp.local.", + name="Smappee1006000212._ssh._tcp.local.", + properties={"_raw": {}}, + ), ) assert result["type"] == data_entry_flow.RESULT_TYPE_FORM assert result["step_id"] == "zeroconf_confirm" @@ -538,14 +538,14 @@ async def test_full_zeroconf_flow_next_generation(hass): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_ZEROCONF}, - data={ - "host": "1.2.3.4", - "port": 22, - CONF_HOSTNAME: "Smappee5001000212.local.", - "type": "_ssh._tcp.local.", - "name": "Smappee5001000212._ssh._tcp.local.", - "properties": {"_raw": {}}, - }, + data=zeroconf.ZeroconfServiceInfo( + host="1.2.3.4", + port=22, + hostname="Smappee5001000212.local.", + type="_ssh._tcp.local.", + name="Smappee5001000212._ssh._tcp.local.", + properties={"_raw": {}}, + ), ) assert result["type"] == data_entry_flow.RESULT_TYPE_FORM assert result["step_id"] == "zeroconf_confirm"