mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 03:07:37 +00:00
parent
369de1cad3
commit
a3ffa0aed7
@ -34,6 +34,21 @@ class BPKConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
|
||||
VERSION = 1
|
||||
|
||||
async def async_step_import(self, config: dict[str, Any]) -> FlowResult:
|
||||
"""Import a configuration from config.yaml."""
|
||||
|
||||
if config.get(CONF_LATITUDE):
|
||||
config[CONF_LOCATION] = {
|
||||
CONF_LATITUDE: config[CONF_LATITUDE],
|
||||
CONF_LONGITUDE: config[CONF_LONGITUDE],
|
||||
}
|
||||
if not config.get(CONF_AREA):
|
||||
config[CONF_AREA] = "none"
|
||||
else:
|
||||
config[CONF_AREA] = config[CONF_AREA][0]
|
||||
|
||||
return await self.async_step_user(user_input=config)
|
||||
|
||||
async def async_step_user(
|
||||
self, user_input: dict[str, Any] | None = None
|
||||
) -> FlowResult:
|
||||
|
@ -5,19 +5,62 @@ from collections import defaultdict
|
||||
from datetime import timedelta
|
||||
|
||||
from brottsplatskartan import ATTRIBUTION, BrottsplatsKartan
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.components.sensor import SensorEntity
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE
|
||||
from homeassistant.components.sensor import (
|
||||
PLATFORM_SCHEMA as PARENT_PLATFORM_SCHEMA,
|
||||
SensorEntity,
|
||||
)
|
||||
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
|
||||
from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME
|
||||
from homeassistant.core import HomeAssistant
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.device_registry import DeviceEntryType
|
||||
from homeassistant.helpers.entity import DeviceInfo
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue
|
||||
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
|
||||
|
||||
from .const import CONF_APP_ID, CONF_AREA, DOMAIN, LOGGER
|
||||
from .const import AREAS, CONF_APP_ID, CONF_AREA, DEFAULT_NAME, DOMAIN, LOGGER
|
||||
|
||||
SCAN_INTERVAL = timedelta(minutes=30)
|
||||
|
||||
PLATFORM_SCHEMA = PARENT_PLATFORM_SCHEMA.extend(
|
||||
{
|
||||
vol.Inclusive(CONF_LATITUDE, "coordinates"): cv.latitude,
|
||||
vol.Inclusive(CONF_LONGITUDE, "coordinates"): cv.longitude,
|
||||
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
||||
vol.Optional(CONF_AREA, default=[]): vol.All(cv.ensure_list, [vol.In(AREAS)]),
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
async def async_setup_platform(
|
||||
hass: HomeAssistant,
|
||||
config: ConfigType,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
discovery_info: DiscoveryInfoType | None = None,
|
||||
) -> None:
|
||||
"""Set up the Brottsplatskartan platform."""
|
||||
|
||||
async_create_issue(
|
||||
hass,
|
||||
DOMAIN,
|
||||
"deprecated_yaml",
|
||||
breaks_in_ha_version="2023.11.0",
|
||||
is_fixable=False,
|
||||
severity=IssueSeverity.WARNING,
|
||||
translation_key="deprecated_yaml",
|
||||
)
|
||||
|
||||
hass.async_create_task(
|
||||
hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": SOURCE_IMPORT},
|
||||
data=config,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
||||
|
@ -16,6 +16,12 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"issues": {
|
||||
"deprecated_yaml": {
|
||||
"title": "The Brottsplatskartan YAML configuration is being removed",
|
||||
"description": "Configuring Brottsplatskartan using YAML is being removed.\n\nYour existing YAML configuration has been imported into the UI automatically.\n\nRemove the Brottsplatskartan YAML configuration from your configuration.yaml file and restart Home Assistant to fix this issue."
|
||||
}
|
||||
},
|
||||
"selector": {
|
||||
"areas": {
|
||||
"options": {
|
||||
|
@ -1,6 +1,8 @@
|
||||
"""Test the Brottsplatskartan config flow."""
|
||||
from __future__ import annotations
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
|
||||
from homeassistant import config_entries
|
||||
@ -9,6 +11,8 @@ from homeassistant.const import CONF_LATITUDE, CONF_LOCATION, CONF_LONGITUDE
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.data_entry_flow import FlowResultType
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
pytestmark = pytest.mark.usefixtures("mock_setup_entry")
|
||||
|
||||
|
||||
@ -99,3 +103,107 @@ async def test_form_area(hass: HomeAssistant) -> None:
|
||||
"area": "Stockholms län",
|
||||
"app_id": "ha-1234567890",
|
||||
}
|
||||
|
||||
|
||||
async def test_import_flow_success(hass: HomeAssistant) -> None:
|
||||
"""Test a successful import of yaml."""
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.brottsplatskartan.sensor.BrottsplatsKartan",
|
||||
):
|
||||
result2 = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": config_entries.SOURCE_IMPORT},
|
||||
data={},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert result2["type"] == FlowResultType.CREATE_ENTRY
|
||||
assert result2["title"] == "Brottsplatskartan HOME"
|
||||
assert result2["data"] == {
|
||||
"latitude": hass.config.latitude,
|
||||
"longitude": hass.config.longitude,
|
||||
"area": None,
|
||||
"app_id": "ha-1234567890",
|
||||
}
|
||||
|
||||
|
||||
async def test_import_flow_location_success(hass: HomeAssistant) -> None:
|
||||
"""Test a successful import of yaml with location."""
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.brottsplatskartan.sensor.BrottsplatsKartan",
|
||||
):
|
||||
result2 = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": config_entries.SOURCE_IMPORT},
|
||||
data={
|
||||
CONF_LATITUDE: 59.32,
|
||||
CONF_LONGITUDE: 18.06,
|
||||
},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert result2["type"] == FlowResultType.CREATE_ENTRY
|
||||
assert result2["title"] == "Brottsplatskartan 59.32, 18.06"
|
||||
assert result2["data"] == {
|
||||
"latitude": 59.32,
|
||||
"longitude": 18.06,
|
||||
"area": None,
|
||||
"app_id": "ha-1234567890",
|
||||
}
|
||||
|
||||
|
||||
async def test_import_flow_location_area_success(hass: HomeAssistant) -> None:
|
||||
"""Test a successful import of yaml with location and area."""
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.brottsplatskartan.sensor.BrottsplatsKartan",
|
||||
):
|
||||
result2 = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": config_entries.SOURCE_IMPORT},
|
||||
data={
|
||||
CONF_LATITUDE: 59.32,
|
||||
CONF_LONGITUDE: 18.06,
|
||||
CONF_AREA: ["Blekinge län"],
|
||||
},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert result2["type"] == FlowResultType.CREATE_ENTRY
|
||||
assert result2["title"] == "Brottsplatskartan Blekinge län"
|
||||
assert result2["data"] == {
|
||||
"latitude": None,
|
||||
"longitude": None,
|
||||
"area": "Blekinge län",
|
||||
"app_id": "ha-1234567890",
|
||||
}
|
||||
|
||||
|
||||
async def test_import_flow_already_exist(hass: HomeAssistant) -> None:
|
||||
"""Test import of yaml already exist."""
|
||||
|
||||
MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
data={
|
||||
"latitude": hass.config.latitude,
|
||||
"longitude": hass.config.longitude,
|
||||
"area": None,
|
||||
"app_id": "ha-1234567890",
|
||||
},
|
||||
unique_id="bpk-home",
|
||||
).add_to_hass(hass)
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.brottsplatskartan.sensor.BrottsplatsKartan",
|
||||
):
|
||||
result3 = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": config_entries.SOURCE_IMPORT},
|
||||
data={},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert result3["type"] == FlowResultType.ABORT
|
||||
assert result3["reason"] == "already_configured"
|
||||
|
Loading…
x
Reference in New Issue
Block a user