Remove YAML configuration from vicare (#72408)

This commit is contained in:
epenet 2022-05-24 20:28:09 +02:00 committed by GitHub
parent ffbec553d1
commit 6245d28907
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 6 additions and 176 deletions

View file

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

View file

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

View file

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

View file

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