Remove YAML configuration from vicare (#72408)
This commit is contained in:
parent
ffbec553d1
commit
6245d28907
4 changed files with 6 additions and 176 deletions
|
@ -7,19 +7,14 @@ import logging
|
|||
|
||||
from PyViCare.PyViCare import PyViCare
|
||||
from PyViCare.PyViCareDevice import Device
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import CONF_CLIENT_ID, CONF_PASSWORD, CONF_USERNAME
|
||||
from homeassistant.core import HomeAssistant
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.storage import STORAGE_DIR
|
||||
from homeassistant.helpers.typing import ConfigType
|
||||
|
||||
from .const import (
|
||||
CONF_CIRCUIT,
|
||||
CONF_HEATING_TYPE,
|
||||
DEFAULT_HEATING_TYPE,
|
||||
DEFAULT_SCAN_INTERVAL,
|
||||
DOMAIN,
|
||||
HEATING_TYPE_TO_CREATOR_METHOD,
|
||||
|
@ -39,50 +34,6 @@ class ViCareRequiredKeysMixin:
|
|||
value_getter: Callable[[Device], bool]
|
||||
|
||||
|
||||
CONFIG_SCHEMA = vol.Schema(
|
||||
vol.All(
|
||||
cv.deprecated(DOMAIN),
|
||||
{
|
||||
DOMAIN: vol.All(
|
||||
cv.deprecated(CONF_CIRCUIT),
|
||||
cv.deprecated(DOMAIN),
|
||||
vol.Schema(
|
||||
{
|
||||
vol.Required(CONF_USERNAME): cv.string,
|
||||
vol.Required(CONF_PASSWORD): cv.string,
|
||||
vol.Required(CONF_CLIENT_ID): cv.string,
|
||||
vol.Optional(
|
||||
CONF_CIRCUIT
|
||||
): int, # Ignored: All circuits are now supported. Will be removed when switching to Setup via UI.
|
||||
vol.Optional(
|
||||
CONF_HEATING_TYPE, default=DEFAULT_HEATING_TYPE.value
|
||||
): vol.In([e.value for e in HeatingType]),
|
||||
}
|
||||
),
|
||||
)
|
||||
},
|
||||
),
|
||||
extra=vol.ALLOW_EXTRA,
|
||||
)
|
||||
|
||||
|
||||
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
||||
"""Set up the ViCare component from yaml."""
|
||||
if DOMAIN not in config:
|
||||
# Setup via UI. No need to continue yaml-based setup
|
||||
return True
|
||||
|
||||
hass.async_create_task(
|
||||
hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": SOURCE_IMPORT},
|
||||
data=config[DOMAIN],
|
||||
)
|
||||
)
|
||||
|
||||
return True
|
||||
|
||||
|
||||
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
"""Set up from config entry."""
|
||||
_LOGGER.debug("Setting up ViCare component")
|
||||
|
|
|
@ -16,7 +16,6 @@ from homeassistant.helpers.device_registry import format_mac
|
|||
|
||||
from . import vicare_login
|
||||
from .const import (
|
||||
CONF_CIRCUIT,
|
||||
CONF_HEATING_TYPE,
|
||||
DEFAULT_HEATING_TYPE,
|
||||
DOMAIN,
|
||||
|
@ -32,7 +31,9 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
|||
|
||||
VERSION = 1
|
||||
|
||||
async def async_step_user(self, user_input: dict[str, Any] | None = None):
|
||||
async def async_step_user(
|
||||
self, user_input: dict[str, Any] | None = None
|
||||
) -> FlowResult:
|
||||
"""Invoke when a user initiates a flow via the user interface."""
|
||||
if self._async_current_entries():
|
||||
return self.async_abort(reason="single_instance_allowed")
|
||||
|
@ -75,17 +76,3 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
|||
return self.async_abort(reason="single_instance_allowed")
|
||||
|
||||
return await self.async_step_user()
|
||||
|
||||
async def async_step_import(self, import_info):
|
||||
"""Handle a flow initiated by a YAML config import."""
|
||||
if self._async_current_entries():
|
||||
return self.async_abort(reason="single_instance_allowed")
|
||||
|
||||
# Remove now unsupported config parameters
|
||||
import_info.pop(CONF_CIRCUIT, None)
|
||||
|
||||
# CONF_HEATING_TYPE is now required but was optional in yaml config. Add if missing.
|
||||
if import_info.get(CONF_HEATING_TYPE) is None:
|
||||
import_info[CONF_HEATING_TYPE] = DEFAULT_HEATING_TYPE.value
|
||||
|
||||
return await self.async_step_user(import_info)
|
||||
|
|
|
@ -13,10 +13,4 @@ ENTRY_CONFIG: Final[dict[str, str]] = {
|
|||
CONF_HEATING_TYPE: "auto",
|
||||
}
|
||||
|
||||
ENTRY_CONFIG_NO_HEATING_TYPE: Final[dict[str, str]] = {
|
||||
CONF_USERNAME: "foo@bar.com",
|
||||
CONF_PASSWORD: "1234",
|
||||
CONF_CLIENT_ID: "5678",
|
||||
}
|
||||
|
||||
MOCK_MAC = "B874241B7B9"
|
||||
|
|
|
@ -5,10 +5,10 @@ from PyViCare.PyViCareUtils import PyViCareInvalidCredentialsError
|
|||
|
||||
from homeassistant import config_entries, data_entry_flow
|
||||
from homeassistant.components import dhcp
|
||||
from homeassistant.components.vicare.const import CONF_CIRCUIT, DOMAIN, VICARE_NAME
|
||||
from homeassistant.components.vicare.const import DOMAIN
|
||||
from homeassistant.const import CONF_CLIENT_ID, CONF_PASSWORD, CONF_USERNAME
|
||||
|
||||
from . import ENTRY_CONFIG, ENTRY_CONFIG_NO_HEATING_TYPE, MOCK_MAC
|
||||
from . import ENTRY_CONFIG, MOCK_MAC
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
|
@ -25,8 +25,6 @@ async def test_form(hass):
|
|||
"homeassistant.components.vicare.config_flow.vicare_login",
|
||||
return_value=None,
|
||||
), patch(
|
||||
"homeassistant.components.vicare.async_setup", return_value=True
|
||||
) as mock_setup, patch(
|
||||
"homeassistant.components.vicare.async_setup_entry",
|
||||
return_value=True,
|
||||
) as mock_setup_entry:
|
||||
|
@ -43,89 +41,9 @@ async def test_form(hass):
|
|||
assert result2["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||||
assert result2["title"] == "ViCare"
|
||||
assert result2["data"] == ENTRY_CONFIG
|
||||
assert len(mock_setup.mock_calls) == 1
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
|
||||
async def test_import(hass):
|
||||
"""Test that the import works."""
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.vicare.config_flow.vicare_login",
|
||||
return_value=True,
|
||||
), patch(
|
||||
"homeassistant.components.vicare.async_setup", return_value=True
|
||||
) as mock_setup, patch(
|
||||
"homeassistant.components.vicare.async_setup_entry",
|
||||
return_value=True,
|
||||
) as mock_setup_entry:
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": config_entries.SOURCE_IMPORT},
|
||||
data=ENTRY_CONFIG,
|
||||
)
|
||||
assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||||
assert result["title"] == VICARE_NAME
|
||||
assert result["data"] == ENTRY_CONFIG
|
||||
|
||||
await hass.async_block_till_done()
|
||||
assert len(mock_setup.mock_calls) == 1
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
|
||||
async def test_import_removes_circuit(hass):
|
||||
"""Test that the import works."""
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.vicare.config_flow.vicare_login",
|
||||
return_value=True,
|
||||
), patch(
|
||||
"homeassistant.components.vicare.async_setup", return_value=True
|
||||
) as mock_setup, patch(
|
||||
"homeassistant.components.vicare.async_setup_entry",
|
||||
return_value=True,
|
||||
) as mock_setup_entry:
|
||||
ENTRY_CONFIG[CONF_CIRCUIT] = 1
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": config_entries.SOURCE_IMPORT},
|
||||
data=ENTRY_CONFIG,
|
||||
)
|
||||
assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||||
assert result["title"] == VICARE_NAME
|
||||
assert result["data"] == ENTRY_CONFIG
|
||||
|
||||
await hass.async_block_till_done()
|
||||
assert len(mock_setup.mock_calls) == 1
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
|
||||
async def test_import_adds_heating_type(hass):
|
||||
"""Test that the import works."""
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.vicare.config_flow.vicare_login",
|
||||
return_value=True,
|
||||
), patch(
|
||||
"homeassistant.components.vicare.async_setup", return_value=True
|
||||
) as mock_setup, patch(
|
||||
"homeassistant.components.vicare.async_setup_entry",
|
||||
return_value=True,
|
||||
) as mock_setup_entry:
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": config_entries.SOURCE_IMPORT},
|
||||
data=ENTRY_CONFIG_NO_HEATING_TYPE,
|
||||
)
|
||||
assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||||
assert result["title"] == VICARE_NAME
|
||||
assert result["data"] == ENTRY_CONFIG
|
||||
|
||||
await hass.async_block_till_done()
|
||||
assert len(mock_setup.mock_calls) == 1
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
|
||||
async def test_invalid_login(hass) -> None:
|
||||
"""Test a flow with an invalid Vicare login."""
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
|
@ -171,8 +89,6 @@ async def test_form_dhcp(hass):
|
|||
"homeassistant.components.vicare.config_flow.vicare_login",
|
||||
return_value=None,
|
||||
), patch(
|
||||
"homeassistant.components.vicare.async_setup", return_value=True
|
||||
) as mock_setup, patch(
|
||||
"homeassistant.components.vicare.async_setup_entry",
|
||||
return_value=True,
|
||||
) as mock_setup_entry:
|
||||
|
@ -189,27 +105,9 @@ async def test_form_dhcp(hass):
|
|||
assert result2["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||||
assert result2["title"] == "ViCare"
|
||||
assert result2["data"] == ENTRY_CONFIG
|
||||
assert len(mock_setup.mock_calls) == 1
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
|
||||
async def test_import_single_instance_allowed(hass):
|
||||
"""Test that configuring more than one instance is rejected."""
|
||||
mock_entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
data=ENTRY_CONFIG,
|
||||
)
|
||||
mock_entry.add_to_hass(hass)
|
||||
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": config_entries.SOURCE_IMPORT},
|
||||
data=ENTRY_CONFIG,
|
||||
)
|
||||
assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT
|
||||
assert result["reason"] == "single_instance_allowed"
|
||||
|
||||
|
||||
async def test_dhcp_single_instance_allowed(hass):
|
||||
"""Test that configuring more than one instance is rejected."""
|
||||
mock_entry = MockConfigEntry(
|
||||
|
|
Loading…
Add table
Reference in a new issue