mirror of
https://github.com/home-assistant/core.git
synced 2025-07-12 15:57:06 +00:00
Abort config flow if Airly measuring station does not exist (#85652)
* Abort if there is no sensor in the area * Add test * Increase test coverage
This commit is contained in:
parent
87aacf9fbe
commit
6baa905448
@ -46,7 +46,7 @@ class AirlyFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
|||||||
user_input["longitude"],
|
user_input["longitude"],
|
||||||
)
|
)
|
||||||
if not location_point_valid:
|
if not location_point_valid:
|
||||||
await test_location(
|
location_nearest_valid = await test_location(
|
||||||
websession,
|
websession,
|
||||||
user_input["api_key"],
|
user_input["api_key"],
|
||||||
user_input["latitude"],
|
user_input["latitude"],
|
||||||
@ -60,6 +60,8 @@ class AirlyFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
|||||||
errors["base"] = "wrong_location"
|
errors["base"] = "wrong_location"
|
||||||
else:
|
else:
|
||||||
if not location_point_valid:
|
if not location_point_valid:
|
||||||
|
if not location_nearest_valid:
|
||||||
|
return self.async_abort(reason="wrong_location")
|
||||||
use_nearest = True
|
use_nearest = True
|
||||||
return self.async_create_entry(
|
return self.async_create_entry(
|
||||||
title=user_input[CONF_NAME],
|
title=user_input[CONF_NAME],
|
||||||
|
@ -16,7 +16,8 @@
|
|||||||
"invalid_api_key": "[%key:common::config_flow::error::invalid_api_key%]"
|
"invalid_api_key": "[%key:common::config_flow::error::invalid_api_key%]"
|
||||||
},
|
},
|
||||||
"abort": {
|
"abort": {
|
||||||
"already_configured": "[%key:common::config_flow::abort::already_configured_location%]"
|
"already_configured": "[%key:common::config_flow::abort::already_configured_location%]",
|
||||||
|
"wrong_location": "No Airly measuring stations in this area."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"system_health": {
|
"system_health": {
|
||||||
|
@ -62,6 +62,22 @@ async def test_invalid_location(hass, aioclient_mock):
|
|||||||
assert result["errors"] == {"base": "wrong_location"}
|
assert result["errors"] == {"base": "wrong_location"}
|
||||||
|
|
||||||
|
|
||||||
|
async def test_invalid_location_for_point_and_nearest(hass, aioclient_mock):
|
||||||
|
"""Test an abort when the location is wrong for the point and nearest methods."""
|
||||||
|
|
||||||
|
aioclient_mock.get(API_POINT_URL, text=load_fixture("no_station.json", "airly"))
|
||||||
|
|
||||||
|
aioclient_mock.get(API_NEAREST_URL, text=load_fixture("no_station.json", "airly"))
|
||||||
|
|
||||||
|
with patch("homeassistant.components.airly.async_setup_entry", return_value=True):
|
||||||
|
result = await hass.config_entries.flow.async_init(
|
||||||
|
DOMAIN, context={"source": SOURCE_USER}, data=CONFIG
|
||||||
|
)
|
||||||
|
|
||||||
|
assert result["type"] == data_entry_flow.FlowResultType.ABORT
|
||||||
|
assert result["reason"] == "wrong_location"
|
||||||
|
|
||||||
|
|
||||||
async def test_duplicate_error(hass, aioclient_mock):
|
async def test_duplicate_error(hass, aioclient_mock):
|
||||||
"""Test that errors are shown when duplicates are added."""
|
"""Test that errors are shown when duplicates are added."""
|
||||||
aioclient_mock.get(API_POINT_URL, text=load_fixture("valid_station.json", "airly"))
|
aioclient_mock.get(API_POINT_URL, text=load_fixture("valid_station.json", "airly"))
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
"""Test sensor of Airly integration."""
|
"""Test sensor of Airly integration."""
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
from http import HTTPStatus
|
||||||
|
|
||||||
|
from airly.exceptions import AirlyError
|
||||||
|
|
||||||
from homeassistant.components.airly.sensor import ATTRIBUTION
|
from homeassistant.components.airly.sensor import ATTRIBUTION
|
||||||
from homeassistant.components.sensor import (
|
from homeassistant.components.sensor import (
|
||||||
@ -195,7 +198,9 @@ async def test_availability(hass, aioclient_mock):
|
|||||||
assert state.state == "68.3"
|
assert state.state == "68.3"
|
||||||
|
|
||||||
aioclient_mock.clear_requests()
|
aioclient_mock.clear_requests()
|
||||||
aioclient_mock.get(API_POINT_URL, exc=ConnectionError())
|
aioclient_mock.get(
|
||||||
|
API_POINT_URL, exc=AirlyError(HTTPStatus.NOT_FOUND, {"message": "Not found"})
|
||||||
|
)
|
||||||
future = utcnow() + timedelta(minutes=60)
|
future = utcnow() + timedelta(minutes=60)
|
||||||
async_fire_time_changed(hass, future)
|
async_fire_time_changed(hass, future)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user