Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
"""Adds config flow for Trafikverket Weather integration."""
from __future__ import annotations

from typing import Any

from pytrafikverket.trafikverket_weather import TrafikverketWeather
import voluptuous as vol

Expand All @@ -14,13 +12,6 @@

from .const import CONF_STATION, DOMAIN

DATA_SCHEMA = vol.Schema(
{
vol.Required(CONF_API_KEY): cv.string,
vol.Required(CONF_STATION): cv.string,
}
)


class TVWeatherConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
"""Handle a config flow for Trafikverket Weatherstation integration."""
Expand All @@ -39,18 +30,8 @@ async def validate_input(self, sensor_api: str, station: str) -> str:
return str(err)
return "connected"

async def async_step_import(self, config: dict[str, Any]) -> FlowResult:
"""Import a configuration from config.yaml."""

self.context.update(
{"title_placeholders": {CONF_STATION: f"YAML import {DOMAIN}"}}
)

self._async_abort_entries_match({CONF_STATION: config[CONF_STATION]})
return await self.async_step_user(user_input=config)

async def async_step_user(
self, user_input: dict[str, Any] | None = None
self, user_input: dict[str, str] | None = None
) -> FlowResult:
"""Handle the initial step."""
errors = {}
Expand Down Expand Up @@ -80,6 +61,11 @@ async def async_step_user(

return self.async_show_form(
step_id="user",
data_schema=DATA_SCHEMA,
data_schema=vol.Schema(
{
vol.Required(CONF_API_KEY): cv.string,
vol.Required(CONF_STATION): cv.string,
}
),
errors=errors,
)
39 changes: 1 addition & 38 deletions homeassistant/components/trafikverket_weatherstation/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,16 @@

import aiohttp
from pytrafikverket.trafikverket_weather import TrafikverketWeather, WeatherStationInfo
import voluptuous as vol

from homeassistant.components.sensor import (
PLATFORM_SCHEMA as PARENT_PLATFORM_SCHEMA,
SensorDeviceClass,
SensorEntity,
SensorEntityDescription,
SensorStateClass,
)
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
CONF_API_KEY,
CONF_MONITORED_CONDITIONS,
CONF_NAME,
DEGREE,
LENGTH_MILLIMETERS,
PERCENTAGE,
Expand All @@ -30,11 +26,9 @@
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers.aiohttp_client import async_get_clientsession
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.typing import ConfigType, DiscoveryInfoType
from homeassistant.util import Throttle

from .const import (
Expand Down Expand Up @@ -151,37 +145,6 @@ class TrafikverketSensorEntityDescription(
),
)

SENSOR_KEYS = [desc.key for desc in SENSOR_TYPES]

PLATFORM_SCHEMA = PARENT_PLATFORM_SCHEMA.extend(
{
vol.Required(CONF_NAME): cv.string,
vol.Required(CONF_API_KEY): cv.string,
vol.Required(CONF_STATION): cv.string,
vol.Required(CONF_MONITORED_CONDITIONS, default=[]): [vol.In(SENSOR_KEYS)],
}
)


async def async_setup_platform(
hass: HomeAssistant,
config: ConfigType,
async_add_entities: AddEntitiesCallback,
discovery_info: DiscoveryInfoType | None = None,
) -> None:
"""Import Trafikverket Weather configuration from YAML."""
_LOGGER.warning(
# Config flow added in Home Assistant Core 2021.12, remove import flow in 2022.4
"Loading Trafikverket Weather via platform setup is deprecated; Please remove it from your configuration"
)
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,10 @@
import pytest

from homeassistant import config_entries
from homeassistant.const import CONF_API_KEY, CONF_NAME
from homeassistant.const import CONF_API_KEY
from homeassistant.core import HomeAssistant
from homeassistant.data_entry_flow import RESULT_TYPE_FORM

from tests.common import MockConfigEntry

DOMAIN = "trafikverket_weatherstation"
CONF_STATION = "station"

Expand Down Expand Up @@ -49,67 +47,6 @@ async def test_form(hass: HomeAssistant) -> None:
assert len(mock_setup_entry.mock_calls) == 1


async def test_import_flow_success(hass: HomeAssistant) -> None:
"""Test a successful import of yaml."""

with patch(
"homeassistant.components.trafikverket_weatherstation.config_flow.TrafikverketWeather.async_get_weather",
), patch(
"homeassistant.components.trafikverket_weatherstation.async_setup_entry",
return_value=True,
) as mock_setup_entry:
result2 = await hass.config_entries.flow.async_init(
DOMAIN,
context={"source": config_entries.SOURCE_IMPORT},
data={
CONF_NAME: "Vallby",
CONF_API_KEY: "1234567890",
CONF_STATION: "Vallby",
},
)
await hass.async_block_till_done()

assert result2["type"] == "create_entry"
assert result2["title"] == "Vallby"
assert result2["data"] == {
"api_key": "1234567890",
"station": "Vallby",
}
assert len(mock_setup_entry.mock_calls) == 1


async def test_import_flow_already_exist(hass: HomeAssistant) -> None:
"""Test import of yaml already exist."""

MockConfigEntry(
domain=DOMAIN,
data={
CONF_API_KEY: "1234567890",
CONF_STATION: "Vallby",
},
).add_to_hass(hass)

with patch(
"homeassistant.components.trafikverket_weatherstation.async_setup_entry",
return_value=True,
), patch(
"homeassistant.components.trafikverket_weatherstation.config_flow.TrafikverketWeather.async_get_weather",
):
result3 = await hass.config_entries.flow.async_init(
DOMAIN,
context={"source": config_entries.SOURCE_IMPORT},
data={
CONF_NAME: "Vallby",
CONF_API_KEY: "1234567890",
CONF_STATION: "Vallby",
},
)
await hass.async_block_till_done()

assert result3["type"] == "abort"
assert result3["reason"] == "already_configured"


@pytest.mark.parametrize(
"error_message,base_error",
[
Expand Down