From 358922db5642a94d73a1ca582293fc63da9f5b99 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Fri, 3 Dec 2021 14:05:56 +0100 Subject: [PATCH] Use dataclass for HassioServiceInfo (#60824) Co-authored-by: epenet --- .../components/adguard/config_flow.py | 5 +- .../components/almond/config_flow.py | 5 +- .../components/deconz/config_flow.py | 15 ++-- homeassistant/components/hassio/__init__.py | 2 +- homeassistant/components/hassio/discovery.py | 27 +----- .../components/motioneye/config_flow.py | 5 +- homeassistant/components/mqtt/config_flow.py | 6 +- homeassistant/components/ozw/config_flow.py | 5 +- .../components/vlc_telnet/config_flow.py | 9 +- .../components/zwave_js/config_flow.py | 8 +- homeassistant/config_entries.py | 5 +- tests/components/adguard/test_config_flow.py | 2 +- tests/components/almond/test_config_flow.py | 4 +- tests/components/deconz/test_config_flow.py | 2 +- tests/components/hassio/test_discovery.py | 82 +++++++------------ .../components/motioneye/test_config_flow.py | 2 +- tests/components/mqtt/test_config_flow.py | 23 ++++-- tests/components/ozw/test_config_flow.py | 2 +- .../components/vlc_telnet/test_config_flow.py | 39 +++++---- tests/components/zwave_js/test_config_flow.py | 30 ++++--- tests/test_config_entries.py | 3 +- 21 files changed, 131 insertions(+), 150 deletions(-) diff --git a/homeassistant/components/adguard/config_flow.py b/homeassistant/components/adguard/config_flow.py index aa85345179e..aadbed49980 100644 --- a/homeassistant/components/adguard/config_flow.py +++ b/homeassistant/components/adguard/config_flow.py @@ -6,6 +6,7 @@ from typing import Any from adguardhome import AdGuardHome, AdGuardHomeConnectionError import voluptuous as vol +from homeassistant.components.hassio import HassioServiceInfo from homeassistant.config_entries import ConfigFlow from homeassistant.const import ( CONF_HOST, @@ -104,14 +105,14 @@ class AdGuardHomeFlowHandler(ConfigFlow, domain=DOMAIN): }, ) - async def async_step_hassio(self, discovery_info: dict[str, Any]) -> FlowResult: + async def async_step_hassio(self, discovery_info: HassioServiceInfo) -> FlowResult: """Prepare configuration for a Hass.io AdGuard Home add-on. This flow is triggered by the discovery component. """ await self._async_handle_discovery_without_unique_id() - self._hassio_discovery = discovery_info + self._hassio_discovery = discovery_info.config return await self.async_step_hassio_confirm() async def async_step_hassio_confirm( diff --git a/homeassistant/components/almond/config_flow.py b/homeassistant/components/almond/config_flow.py index 32d90f7b03b..ba6fcb6d83c 100644 --- a/homeassistant/components/almond/config_flow.py +++ b/homeassistant/components/almond/config_flow.py @@ -12,6 +12,7 @@ import voluptuous as vol from yarl import URL from homeassistant import config_entries, core, data_entry_flow +from homeassistant.components.hassio import HassioServiceInfo from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import aiohttp_client, config_entry_oauth2_flow @@ -94,12 +95,12 @@ class AlmondFlowHandler(config_entry_oauth2_flow.AbstractOAuth2FlowHandler): data={"type": TYPE_LOCAL, "host": user_input["host"]}, ) - async def async_step_hassio(self, discovery_info): + async def async_step_hassio(self, discovery_info: HassioServiceInfo) -> FlowResult: """Receive a Hass.io discovery.""" if self._async_current_entries(): return self.async_abort(reason="single_instance_allowed") - self.hassio_discovery = discovery_info + self.hassio_discovery = discovery_info.config return await self.async_step_hassio_confirm() diff --git a/homeassistant/components/deconz/config_flow.py b/homeassistant/components/deconz/config_flow.py index ca8e95f70ce..473cbd72971 100644 --- a/homeassistant/components/deconz/config_flow.py +++ b/homeassistant/components/deconz/config_flow.py @@ -20,6 +20,7 @@ import voluptuous as vol from homeassistant import config_entries from homeassistant.components import ssdp from homeassistant.components.deconz.gateway import DeconzGateway +from homeassistant.components.hassio import HassioServiceInfo from homeassistant.config_entries import ConfigEntry, ConfigFlow, OptionsFlow from homeassistant.const import CONF_API_KEY, CONF_HOST, CONF_PORT from homeassistant.core import HomeAssistant, callback @@ -233,25 +234,25 @@ class DeconzFlowHandler(ConfigFlow, domain=DOMAIN): return await self.async_step_link() - async def async_step_hassio(self, discovery_info: dict[str, Any]) -> FlowResult: + async def async_step_hassio(self, discovery_info: HassioServiceInfo) -> FlowResult: """Prepare configuration for a Hass.io deCONZ bridge. This flow is triggered by the discovery component. """ - LOGGER.debug("deCONZ HASSIO discovery %s", pformat(discovery_info)) + LOGGER.debug("deCONZ HASSIO discovery %s", pformat(discovery_info.config)) - self.bridge_id = normalize_bridge_id(discovery_info[CONF_SERIAL]) + self.bridge_id = normalize_bridge_id(discovery_info.config[CONF_SERIAL]) await self.async_set_unique_id(self.bridge_id) self._abort_if_unique_id_configured( updates={ - CONF_HOST: discovery_info[CONF_HOST], - CONF_PORT: discovery_info[CONF_PORT], - CONF_API_KEY: discovery_info[CONF_API_KEY], + CONF_HOST: discovery_info.config[CONF_HOST], + CONF_PORT: discovery_info.config[CONF_PORT], + CONF_API_KEY: discovery_info.config[CONF_API_KEY], } ) - self._hassio_discovery = discovery_info + self._hassio_discovery = discovery_info.config return await self.async_step_hassio_confirm() diff --git a/homeassistant/components/hassio/__init__.py b/homeassistant/components/hassio/__init__.py index a6f130e0656..7991c50563c 100644 --- a/homeassistant/components/hassio/__init__.py +++ b/homeassistant/components/hassio/__init__.py @@ -57,7 +57,7 @@ from .const import ( DOMAIN, SupervisorEntityModel, ) -from .discovery import async_setup_discovery_view +from .discovery import HassioServiceInfo, async_setup_discovery_view # noqa: F401 from .handler import HassIO, HassioAPIError, api_data from .http import HassIOView from .ingress import async_setup_ingress_view diff --git a/homeassistant/components/hassio/discovery.py b/homeassistant/components/hassio/discovery.py index 67090d78a96..587457f2ca2 100644 --- a/homeassistant/components/hassio/discovery.py +++ b/homeassistant/components/hassio/discovery.py @@ -2,7 +2,6 @@ from __future__ import annotations import asyncio -from collections.abc import Mapping from dataclasses import dataclass import logging from typing import Any @@ -15,7 +14,6 @@ from homeassistant.components.http import HomeAssistantView from homeassistant.const import ATTR_NAME, ATTR_SERVICE, EVENT_HOMEASSISTANT_START from homeassistant.core import HomeAssistant, callback from homeassistant.data_entry_flow import BaseServiceInfo -from homeassistant.helpers.frame import report from .const import ATTR_ADDON, ATTR_CONFIG, ATTR_DISCOVERY, ATTR_UUID from .handler import HassioAPIError @@ -27,26 +25,7 @@ _LOGGER = logging.getLogger(__name__) class HassioServiceInfo(BaseServiceInfo): """Prepared info from hassio entries.""" - config: Mapping[str, Any] - - # Used to prevent log flooding. To be removed in 2022.6 - _warning_logged: bool = False - - def __getitem__(self, name: str) -> Any: - """ - Allow property access by name for compatibility reason. - - Deprecated, and will be removed in version 2022.6. - """ - if not self._warning_logged: - report( - f"accessed discovery_info['{name}'] instead of discovery_info.config['{name}']; this will fail in version 2022.6", - exclude_integrations={"hassio"}, - error_if_core=False, - level=logging.DEBUG, - ) - self._warning_logged = True - return self.config[name] + config: dict[str, Any] @callback @@ -121,7 +100,9 @@ class HassIODiscovery(HomeAssistantView): # Use config flow await self.hass.config_entries.flow.async_init( - service, context={"source": config_entries.SOURCE_HASSIO}, data=config_data + service, + context={"source": config_entries.SOURCE_HASSIO}, + data=HassioServiceInfo(config=config_data), ) async def async_process_del(self, data): diff --git a/homeassistant/components/motioneye/config_flow.py b/homeassistant/components/motioneye/config_flow.py index 54b4a9f0b09..e90a6068ebc 100644 --- a/homeassistant/components/motioneye/config_flow.py +++ b/homeassistant/components/motioneye/config_flow.py @@ -10,6 +10,7 @@ from motioneye_client.client import ( ) import voluptuous as vol +from homeassistant.components.hassio import HassioServiceInfo from homeassistant.config_entries import ( SOURCE_REAUTH, ConfigEntry, @@ -162,9 +163,9 @@ class MotionEyeConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a reauthentication flow.""" return await self.async_step_user(config_data) - async def async_step_hassio(self, discovery_info: dict[str, Any]) -> FlowResult: + async def async_step_hassio(self, discovery_info: HassioServiceInfo) -> FlowResult: """Handle Supervisor discovery.""" - self._hassio_discovery = discovery_info + self._hassio_discovery = discovery_info.config await self._async_handle_discovery_without_unique_id() return await self.async_step_hassio_confirm() diff --git a/homeassistant/components/mqtt/config_flow.py b/homeassistant/components/mqtt/config_flow.py index 172657ded98..84322ddc1ee 100644 --- a/homeassistant/components/mqtt/config_flow.py +++ b/homeassistant/components/mqtt/config_flow.py @@ -5,6 +5,7 @@ import queue import voluptuous as vol from homeassistant import config_entries +from homeassistant.components.hassio import HassioServiceInfo from homeassistant.const import ( CONF_DISCOVERY, CONF_HOST, @@ -14,6 +15,7 @@ from homeassistant.const import ( CONF_PROTOCOL, CONF_USERNAME, ) +from homeassistant.data_entry_flow import FlowResult from .const import ( ATTR_PAYLOAD, @@ -93,11 +95,11 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): return self.async_create_entry(title="configuration.yaml", data={}) - async def async_step_hassio(self, discovery_info): + async def async_step_hassio(self, discovery_info: HassioServiceInfo) -> FlowResult: """Receive a Hass.io discovery.""" await self._async_handle_discovery_without_unique_id() - self._hassio_discovery = discovery_info + self._hassio_discovery = discovery_info.config return await self.async_step_hassio_confirm() diff --git a/homeassistant/components/ozw/config_flow.py b/homeassistant/components/ozw/config_flow.py index c1dbbe2e093..e39a3e2ba89 100644 --- a/homeassistant/components/ozw/config_flow.py +++ b/homeassistant/components/ozw/config_flow.py @@ -4,8 +4,9 @@ import logging import voluptuous as vol from homeassistant import config_entries +from homeassistant.components.hassio import HassioServiceInfo from homeassistant.core import callback -from homeassistant.data_entry_flow import AbortFlow +from homeassistant.data_entry_flow import AbortFlow, FlowResult from .const import CONF_INTEGRATION_CREATED_ADDON, CONF_USE_ADDON, DOMAIN @@ -48,7 +49,7 @@ class DomainConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): return await self.async_step_on_supervisor() - async def async_step_hassio(self, discovery_info): + async def async_step_hassio(self, discovery_info: HassioServiceInfo) -> FlowResult: """Receive configuration from add-on discovery info. This flow is triggered by the OpenZWave add-on. diff --git a/homeassistant/components/vlc_telnet/config_flow.py b/homeassistant/components/vlc_telnet/config_flow.py index e86ab635517..bb503229ebb 100644 --- a/homeassistant/components/vlc_telnet/config_flow.py +++ b/homeassistant/components/vlc_telnet/config_flow.py @@ -9,6 +9,7 @@ from aiovlc.exceptions import AuthError, ConnectError import voluptuous as vol from homeassistant import core, exceptions +from homeassistant.components.hassio import HassioServiceInfo from homeassistant.config_entries import ConfigEntry, ConfigFlow from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PASSWORD, CONF_PORT from homeassistant.data_entry_flow import FlowResult @@ -151,13 +152,13 @@ class VLCTelnetConfigFlow(ConfigFlow, domain=DOMAIN): errors=errors, ) - async def async_step_hassio(self, discovery_info: dict[str, Any]) -> FlowResult: + async def async_step_hassio(self, discovery_info: HassioServiceInfo) -> FlowResult: """Handle the discovery step via hassio.""" await self.async_set_unique_id("hassio") - self._abort_if_unique_id_configured(discovery_info) + self._abort_if_unique_id_configured(discovery_info.config) - self.hassio_discovery = discovery_info - self.context["title_placeholders"] = {"host": discovery_info[CONF_HOST]} + self.hassio_discovery = discovery_info.config + self.context["title_placeholders"] = {"host": discovery_info.config[CONF_HOST]} return await self.async_step_hassio_confirm() async def async_step_hassio_confirm( diff --git a/homeassistant/components/zwave_js/config_flow.py b/homeassistant/components/zwave_js/config_flow.py index 7b59cce36a9..32f406d7476 100644 --- a/homeassistant/components/zwave_js/config_flow.py +++ b/homeassistant/components/zwave_js/config_flow.py @@ -13,7 +13,7 @@ from zwave_js_server.version import VersionInfo, get_server_version from homeassistant import config_entries, exceptions from homeassistant.components import usb -from homeassistant.components.hassio import is_hassio +from homeassistant.components.hassio import HassioServiceInfo, is_hassio from homeassistant.const import CONF_NAME, CONF_URL from homeassistant.core import HomeAssistant, callback from homeassistant.data_entry_flow import ( @@ -430,7 +430,7 @@ class ConfigFlow(BaseZwaveJSFlow, config_entries.ConfigFlow, domain=DOMAIN): step_id="manual", data_schema=get_manual_schema(user_input), errors=errors ) - async def async_step_hassio(self, discovery_info: dict[str, Any]) -> FlowResult: + async def async_step_hassio(self, discovery_info: HassioServiceInfo) -> FlowResult: """Receive configuration from add-on discovery info. This flow is triggered by the Z-Wave JS add-on. @@ -438,7 +438,9 @@ class ConfigFlow(BaseZwaveJSFlow, config_entries.ConfigFlow, domain=DOMAIN): if self._async_in_progress(): return self.async_abort(reason="already_in_progress") - self.ws_address = f"ws://{discovery_info['host']}:{discovery_info['port']}" + self.ws_address = ( + f"ws://{discovery_info.config['host']}:{discovery_info.config['port']}" + ) try: version_info = await async_get_version_info(self.hass, self.ws_address) except CannotConnect: diff --git a/homeassistant/config_entries.py b/homeassistant/config_entries.py index 3fa905daf48..c6ad8d0a587 100644 --- a/homeassistant/config_entries.py +++ b/homeassistant/config_entries.py @@ -34,6 +34,7 @@ import homeassistant.util.uuid as uuid_util if TYPE_CHECKING: from homeassistant.components.dhcp import DhcpServiceInfo + from homeassistant.components.hassio import HassioServiceInfo from homeassistant.components.mqtt.discovery import MqttServiceInfo from homeassistant.components.ssdp import SsdpServiceInfo from homeassistant.components.usb import UsbServiceInfo @@ -1353,10 +1354,10 @@ class ConfigFlow(data_entry_flow.FlowHandler): ) async def async_step_hassio( - self, discovery_info: DiscoveryInfoType + self, discovery_info: HassioServiceInfo ) -> data_entry_flow.FlowResult: """Handle a flow initialized by HASS IO discovery.""" - return await self.async_step_discovery(discovery_info) + return await self.async_step_discovery(discovery_info.config) async def async_step_homekit( self, discovery_info: ZeroconfServiceInfo diff --git a/tests/components/adguard/test_config_flow.py b/tests/components/adguard/test_config_flow.py index b87d0796a54..f5b30308a52 100644 --- a/tests/components/adguard/test_config_flow.py +++ b/tests/components/adguard/test_config_flow.py @@ -3,7 +3,7 @@ import aiohttp from homeassistant import config_entries, data_entry_flow from homeassistant.components.adguard.const import DOMAIN -from homeassistant.components.hassio.discovery import HassioServiceInfo +from homeassistant.components.hassio import HassioServiceInfo from homeassistant.config_entries import SOURCE_USER from homeassistant.const import ( CONF_HOST, diff --git a/tests/components/almond/test_config_flow.py b/tests/components/almond/test_config_flow.py index 5e4283fb611..32f49cff043 100644 --- a/tests/components/almond/test_config_flow.py +++ b/tests/components/almond/test_config_flow.py @@ -6,7 +6,7 @@ from unittest.mock import patch from homeassistant import config_entries, data_entry_flow, setup from homeassistant.components.almond import config_flow from homeassistant.components.almond.const import DOMAIN -from homeassistant.components.hassio.discovery import HassioServiceInfo +from homeassistant.components.hassio import HassioServiceInfo from homeassistant.const import CONF_CLIENT_ID, CONF_CLIENT_SECRET from homeassistant.helpers import config_entry_oauth2_flow @@ -90,7 +90,7 @@ async def test_abort_if_existing_entry(hass): assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT assert result["reason"] == "single_instance_allowed" - result = await flow.async_step_hassio({}) + result = await flow.async_step_hassio(HassioServiceInfo(config={})) assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT assert result["reason"] == "single_instance_allowed" diff --git a/tests/components/deconz/test_config_flow.py b/tests/components/deconz/test_config_flow.py index a87a9df408b..ecfb324207f 100644 --- a/tests/components/deconz/test_config_flow.py +++ b/tests/components/deconz/test_config_flow.py @@ -18,7 +18,7 @@ from homeassistant.components.deconz.const import ( CONF_MASTER_GATEWAY, DOMAIN as DECONZ_DOMAIN, ) -from homeassistant.components.hassio.discovery import HassioServiceInfo +from homeassistant.components.hassio import HassioServiceInfo from homeassistant.components.ssdp import ATTR_UPNP_MANUFACTURER_URL, ATTR_UPNP_SERIAL from homeassistant.config_entries import ( SOURCE_HASSIO, diff --git a/tests/components/hassio/test_discovery.py b/tests/components/hassio/test_discovery.py index de424c4d339..71f5f8acf96 100644 --- a/tests/components/hassio/test_discovery.py +++ b/tests/components/hassio/test_discovery.py @@ -2,7 +2,7 @@ from http import HTTPStatus from unittest.mock import Mock, patch -from homeassistant.components.hassio.discovery import HassioServiceInfo +from homeassistant.components.hassio import HassioServiceInfo from homeassistant.components.hassio.handler import HassioAPIError from homeassistant.const import EVENT_HOMEASSISTANT_START from homeassistant.setup import async_setup_component @@ -49,14 +49,16 @@ async def test_hassio_discovery_startup(hass, aioclient_mock, hassio_client): assert aioclient_mock.call_count == 2 assert mock_mqtt.called mock_mqtt.assert_called_with( - { - "broker": "mock-broker", - "port": 1883, - "username": "mock-user", - "password": "mock-pass", - "protocol": "3.1.1", - "addon": "Mosquitto Test", - } + HassioServiceInfo( + config={ + "broker": "mock-broker", + "port": 1883, + "username": "mock-user", + "password": "mock-pass", + "protocol": "3.1.1", + "addon": "Mosquitto Test", + } + ) ) @@ -110,14 +112,16 @@ async def test_hassio_discovery_startup_done(hass, aioclient_mock, hassio_client assert aioclient_mock.call_count == 2 assert mock_mqtt.called mock_mqtt.assert_called_with( - { - "broker": "mock-broker", - "port": 1883, - "username": "mock-user", - "password": "mock-pass", - "protocol": "3.1.1", - "addon": "Mosquitto Test", - } + HassioServiceInfo( + config={ + "broker": "mock-broker", + "port": 1883, + "username": "mock-user", + "password": "mock-pass", + "protocol": "3.1.1", + "addon": "Mosquitto Test", + } + ) ) @@ -160,38 +164,14 @@ async def test_hassio_discovery_webhook(hass, aioclient_mock, hassio_client): assert aioclient_mock.call_count == 2 assert mock_mqtt.called mock_mqtt.assert_called_with( - { - "broker": "mock-broker", - "port": 1883, - "username": "mock-user", - "password": "mock-pass", - "protocol": "3.1.1", - "addon": "Mosquitto Test", - } + HassioServiceInfo( + config={ + "broker": "mock-broker", + "port": 1883, + "username": "mock-user", + "password": "mock-pass", + "protocol": "3.1.1", + "addon": "Mosquitto Test", + } + ) ) - - -async def test_service_info_compatibility(hass, caplog): - """Test compatibility with old-style dict. - - To be removed in 2022.6 - """ - discovery_info = HassioServiceInfo( - config={ - "broker": "mock-broker", - "port": 1883, - "username": "mock-user", - "password": "mock-pass", - "protocol": "3.1.1", - "addon": "Mosquitto Test", - } - ) - - # Ensure first call get logged - assert discovery_info["broker"] == "mock-broker" - assert "Detected code that accessed discovery_info['broker']" in caplog.text - - # Ensure second call doesn't get logged - caplog.clear() - assert discovery_info["broker"] == "mock-broker" - assert "Detected code that accessed discovery_info['broker']" not in caplog.text diff --git a/tests/components/motioneye/test_config_flow.py b/tests/components/motioneye/test_config_flow.py index 35988ed8fbb..57def069d59 100644 --- a/tests/components/motioneye/test_config_flow.py +++ b/tests/components/motioneye/test_config_flow.py @@ -8,7 +8,7 @@ from motioneye_client.client import ( ) from homeassistant import config_entries, data_entry_flow -from homeassistant.components.hassio.discovery import HassioServiceInfo +from homeassistant.components.hassio import HassioServiceInfo from homeassistant.components.motioneye.const import ( CONF_ADMIN_PASSWORD, CONF_ADMIN_USERNAME, diff --git a/tests/components/mqtt/test_config_flow.py b/tests/components/mqtt/test_config_flow.py index 208541d702c..befdc139eeb 100644 --- a/tests/components/mqtt/test_config_flow.py +++ b/tests/components/mqtt/test_config_flow.py @@ -7,6 +7,7 @@ import voluptuous as vol from homeassistant import config_entries, data_entry_flow from homeassistant.components import mqtt +from homeassistant.components.hassio import HassioServiceInfo from homeassistant.core import HomeAssistant from homeassistant.setup import async_setup_component @@ -124,7 +125,9 @@ async def test_hassio_ignored(hass: HomeAssistant) -> None: result = await hass.config_entries.flow.async_init( mqtt.DOMAIN, - data={"addon": "Mosquitto", "host": "mock-mosquitto", "port": "1883"}, + data=HassioServiceInfo( + config={"addon": "Mosquitto", "host": "mock-mosquitto", "port": "1883"} + ), context={"source": config_entries.SOURCE_HASSIO}, ) assert result @@ -140,14 +143,16 @@ async def test_hassio_confirm( result = await hass.config_entries.flow.async_init( "mqtt", - data={ - "addon": "Mock Addon", - "host": "mock-broker", - "port": 1883, - "username": "mock-user", - "password": "mock-pass", - "protocol": "3.1.1", - }, + data=HassioServiceInfo( + config={ + "addon": "Mock Addon", + "host": "mock-broker", + "port": 1883, + "username": "mock-user", + "password": "mock-pass", + "protocol": "3.1.1", + } + ), context={"source": config_entries.SOURCE_HASSIO}, ) assert result["type"] == "form" diff --git a/tests/components/ozw/test_config_flow.py b/tests/components/ozw/test_config_flow.py index f06c315500f..9c65372ca98 100644 --- a/tests/components/ozw/test_config_flow.py +++ b/tests/components/ozw/test_config_flow.py @@ -4,7 +4,7 @@ from unittest.mock import patch import pytest from homeassistant import config_entries -from homeassistant.components.hassio.discovery import HassioServiceInfo +from homeassistant.components.hassio import HassioServiceInfo from homeassistant.components.hassio.handler import HassioAPIError from homeassistant.components.ozw.config_flow import TITLE from homeassistant.components.ozw.const import DOMAIN diff --git a/tests/components/vlc_telnet/test_config_flow.py b/tests/components/vlc_telnet/test_config_flow.py index 5ef8b6c0400..6a0659b6360 100644 --- a/tests/components/vlc_telnet/test_config_flow.py +++ b/tests/components/vlc_telnet/test_config_flow.py @@ -8,6 +8,7 @@ from aiovlc.exceptions import AuthError, ConnectError import pytest from homeassistant import config_entries +from homeassistant.components.hassio import HassioServiceInfo from homeassistant.components.vlc_telnet.const import DOMAIN from homeassistant.core import HomeAssistant from homeassistant.data_entry_flow import ( @@ -278,13 +279,15 @@ async def test_hassio_flow(hass: HomeAssistant) -> None: "homeassistant.components.vlc_telnet.async_setup_entry", return_value=True, ) as mock_setup_entry: - test_data = { - "password": "test-password", - "host": "1.1.1.1", - "port": 8888, - "name": "custom name", - "addon": "vlc", - } + test_data = HassioServiceInfo( + config={ + "password": "test-password", + "host": "1.1.1.1", + "port": 8888, + "name": "custom name", + "addon": "vlc", + } + ) result = await hass.config_entries.flow.async_init( DOMAIN, @@ -298,8 +301,8 @@ async def test_hassio_flow(hass: HomeAssistant) -> None: result2 = await hass.config_entries.flow.async_configure(result["flow_id"], {}) assert result2["type"] == RESULT_TYPE_CREATE_ENTRY - assert result2["title"] == test_data["name"] - assert result2["data"] == test_data + assert result2["title"] == test_data.config["name"] + assert result2["data"] == test_data.config assert len(mock_setup_entry.mock_calls) == 1 @@ -320,7 +323,7 @@ async def test_hassio_already_configured(hass: HomeAssistant) -> None: result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_HASSIO}, - data=entry_data, + data=HassioServiceInfo(config=entry_data), ) await hass.async_block_till_done() @@ -354,13 +357,15 @@ async def test_hassio_errors( result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_HASSIO}, - data={ - "password": "test-password", - "host": "1.1.1.1", - "port": 8888, - "name": "custom name", - "addon": "vlc", - }, + data=HassioServiceInfo( + config={ + "password": "test-password", + "host": "1.1.1.1", + "port": 8888, + "name": "custom name", + "addon": "vlc", + } + ), ) await hass.async_block_till_done() diff --git a/tests/components/zwave_js/test_config_flow.py b/tests/components/zwave_js/test_config_flow.py index 0542457a23b..bf5dda3ade2 100644 --- a/tests/components/zwave_js/test_config_flow.py +++ b/tests/components/zwave_js/test_config_flow.py @@ -8,20 +8,18 @@ from zwave_js_server.version import VersionInfo from homeassistant import config_entries from homeassistant.components import usb -from homeassistant.components.hassio.discovery import HassioServiceInfo +from homeassistant.components.hassio import HassioServiceInfo from homeassistant.components.hassio.handler import HassioAPIError from homeassistant.components.zwave_js.config_flow import SERVER_VERSION_TIMEOUT, TITLE from homeassistant.components.zwave_js.const import DOMAIN from tests.common import MockConfigEntry -ADDON_DISCOVERY_INFO = HassioServiceInfo( - config={ - "addon": "Z-Wave JS", - "host": "host1", - "port": 3001, - } -) +ADDON_DISCOVERY_INFO = { + "addon": "Z-Wave JS", + "host": "host1", + "port": 3001, +} USB_DISCOVERY_INFO = usb.UsbServiceInfo( @@ -285,7 +283,7 @@ async def test_supervisor_discovery( result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_HASSIO}, - data=ADDON_DISCOVERY_INFO, + data=HassioServiceInfo(config=ADDON_DISCOVERY_INFO), ) with patch( @@ -325,7 +323,7 @@ async def test_supervisor_discovery_cannot_connect( result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_HASSIO}, - data=ADDON_DISCOVERY_INFO, + data=HassioServiceInfo(config=ADDON_DISCOVERY_INFO), ) assert result["type"] == "abort" @@ -347,7 +345,7 @@ async def test_clean_discovery_on_user_create( result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_HASSIO}, - data=ADDON_DISCOVERY_INFO, + data=HassioServiceInfo(config=ADDON_DISCOVERY_INFO), ) assert result["type"] == "form" @@ -410,7 +408,7 @@ async def test_abort_discovery_with_existing_entry( result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_HASSIO}, - data=ADDON_DISCOVERY_INFO, + data=HassioServiceInfo(config=ADDON_DISCOVERY_INFO), ) assert result["type"] == "abort" @@ -434,7 +432,7 @@ async def test_abort_hassio_discovery_with_existing_flow( result2 = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_HASSIO}, - data=ADDON_DISCOVERY_INFO, + data=HassioServiceInfo(config=ADDON_DISCOVERY_INFO), ) assert result2["type"] == "abort" @@ -629,7 +627,7 @@ async def test_discovery_addon_not_running( result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_HASSIO}, - data=ADDON_DISCOVERY_INFO, + data=HassioServiceInfo(config=ADDON_DISCOVERY_INFO), ) assert result["step_id"] == "hassio_confirm" @@ -711,7 +709,7 @@ async def test_discovery_addon_not_installed( result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_HASSIO}, - data=ADDON_DISCOVERY_INFO, + data=HassioServiceInfo(config=ADDON_DISCOVERY_INFO), ) assert result["step_id"] == "hassio_confirm" @@ -792,7 +790,7 @@ async def test_abort_usb_discovery_with_existing_flow(hass, supervisor, addon_op result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_HASSIO}, - data=ADDON_DISCOVERY_INFO, + data=HassioServiceInfo(config=ADDON_DISCOVERY_INFO), ) assert result["type"] == "form" diff --git a/tests/test_config_entries.py b/tests/test_config_entries.py index 6b710caed90..0e743fda91e 100644 --- a/tests/test_config_entries.py +++ b/tests/test_config_entries.py @@ -7,6 +7,7 @@ from unittest.mock import AsyncMock, Mock, patch import pytest from homeassistant import config_entries, data_entry_flow, loader +from homeassistant.components.hassio import HassioServiceInfo from homeassistant.const import EVENT_HOMEASSISTANT_STARTED, EVENT_HOMEASSISTANT_STOP from homeassistant.core import CoreState, callback from homeassistant.data_entry_flow import RESULT_TYPE_ABORT, BaseServiceInfo @@ -2356,7 +2357,7 @@ async def test_async_setup_update_entry(hass): (config_entries.SOURCE_HOMEKIT, BaseServiceInfo()), (config_entries.SOURCE_DHCP, BaseServiceInfo()), (config_entries.SOURCE_ZEROCONF, BaseServiceInfo()), - (config_entries.SOURCE_HASSIO, {}), + (config_entries.SOURCE_HASSIO, HassioServiceInfo(config={})), ), ) async def test_flow_with_default_discovery(hass, manager, discovery_source):