Use dataclass for HassioServiceInfo (#60824)

Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
epenet 2021-12-03 14:05:56 +01:00 committed by GitHub
parent e8b4b70747
commit 358922db56
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 131 additions and 150 deletions

View File

@ -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(

View File

@ -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()

View File

@ -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()

View File

@ -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

View File

@ -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):

View File

@ -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()

View File

@ -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()

View File

@ -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.

View File

@ -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(

View File

@ -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:

View File

@ -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

View File

@ -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,

View File

@ -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"

View File

@ -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,

View File

@ -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

View File

@ -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,

View File

@ -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"

View File

@ -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

View File

@ -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()

View File

@ -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"

View File

@ -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):