mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 16:57:53 +00:00
Use dataclass for HassioServiceInfo (#60824)
Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
parent
e8b4b70747
commit
358922db56
@ -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(
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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
|
||||
|
@ -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):
|
||||
|
@ -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()
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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(
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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):
|
||||
|
Loading…
x
Reference in New Issue
Block a user