From 967f4efc56c11f292105f47f7a2323f17170930b Mon Sep 17 00:00:00 2001 From: Kevin Stillhammer Date: Mon, 23 May 2022 16:50:05 +0200 Subject: [PATCH] Cleanup config flow and tests for here_travel_time (#72364) --- .../components/here_travel_time/__init__.py | 18 ------------ .../here_travel_time/config_flow.py | 28 +++++++++++++++---- .../here_travel_time/test_config_flow.py | 16 +++++++++-- .../components/here_travel_time/test_init.py | 2 ++ .../here_travel_time/test_sensor.py | 9 ++++++ 5 files changed, 46 insertions(+), 27 deletions(-) diff --git a/homeassistant/components/here_travel_time/__init__.py b/homeassistant/components/here_travel_time/__init__.py index 310fe97fad8..da091e0bdbf 100644 --- a/homeassistant/components/here_travel_time/__init__.py +++ b/homeassistant/components/here_travel_time/__init__.py @@ -41,11 +41,9 @@ from .const import ( CONF_ORIGIN_LATITUDE, CONF_ORIGIN_LONGITUDE, CONF_ROUTE_MODE, - CONF_TRAFFIC_MODE, DEFAULT_SCAN_INTERVAL, DOMAIN, NO_ROUTE_ERROR_MESSAGE, - ROUTE_MODE_FASTEST, TRAFFIC_MODE_ENABLED, TRAVEL_MODES_VEHICLE, ) @@ -60,7 +58,6 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> b """Set up HERE Travel Time from a config entry.""" api_key = config_entry.data[CONF_API_KEY] here_client = RoutingApi(api_key) - setup_options(hass, config_entry) arrival = ( dt.parse_time(config_entry.options[CONF_ARRIVAL_TIME]) @@ -98,21 +95,6 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> b return True -def setup_options(hass: HomeAssistant, config_entry: ConfigEntry) -> None: - """Set up options for a config entry if not set.""" - if not config_entry.options: - hass.config_entries.async_update_entry( - config_entry, - options={ - CONF_TRAFFIC_MODE: TRAFFIC_MODE_ENABLED, - CONF_ROUTE_MODE: ROUTE_MODE_FASTEST, - CONF_ARRIVAL_TIME: None, - CONF_DEPARTURE_TIME: None, - CONF_UNIT_SYSTEM: hass.config.units.name, - }, - ) - - async def async_unload_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool: """Unload a config entry.""" unload_ok = await hass.config_entries.async_unload_platforms( diff --git a/homeassistant/components/here_travel_time/config_flow.py b/homeassistant/components/here_travel_time/config_flow.py index 502eee68546..e8a05796b66 100644 --- a/homeassistant/components/here_travel_time/config_flow.py +++ b/homeassistant/components/here_travel_time/config_flow.py @@ -15,7 +15,7 @@ from homeassistant.const import ( CONF_NAME, CONF_UNIT_SYSTEM, ) -from homeassistant.core import callback +from homeassistant.core import HomeAssistant, callback from homeassistant.data_entry_flow import FlowResult import homeassistant.helpers.config_validation as cv from homeassistant.helpers.selector import ( @@ -128,12 +128,25 @@ def get_user_step_schema(data: dict[str, Any]) -> vol.Schema: ) +def default_options(hass: HomeAssistant) -> dict[str, str | None]: + """Get the default options.""" + return { + CONF_TRAFFIC_MODE: TRAFFIC_MODE_ENABLED, + CONF_ROUTE_MODE: ROUTE_MODE_FASTEST, + CONF_ARRIVAL_TIME: None, + CONF_DEPARTURE_TIME: None, + CONF_UNIT_SYSTEM: hass.config.units.name, + } + + class HERETravelTimeConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): """Handle a config flow for HERE Travel Time.""" VERSION = 1 - _config: dict[str, Any] = {} + def __init__(self) -> None: + """Init Config Flow.""" + self._config: dict[str, Any] = {} @staticmethod @callback @@ -211,7 +224,9 @@ class HERETravelTimeConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): "longitude" ] return self.async_create_entry( - title=self._config[CONF_NAME], data=self._config + title=self._config[CONF_NAME], + data=self._config, + options=default_options(self.hass), ) schema = vol.Schema( {"destination": selector({LocationSelector.selector_type: {}})} @@ -230,7 +245,9 @@ class HERETravelTimeConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): CONF_DESTINATION_ENTITY_ID ] return self.async_create_entry( - title=self._config[CONF_NAME], data=self._config + title=self._config[CONF_NAME], + data=self._config, + options=default_options(self.hass), ) schema = vol.Schema( {CONF_DESTINATION_ENTITY_ID: selector({EntitySelector.selector_type: {}})} @@ -301,11 +318,10 @@ class HERETravelTimeConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): class HERETravelTimeOptionsFlow(config_entries.OptionsFlow): """Handle HERE Travel Time options.""" - _config: dict[str, Any] = {} - def __init__(self, config_entry: config_entries.ConfigEntry) -> None: """Initialize HERE Travel Time options flow.""" self.config_entry = config_entry + self._config: dict[str, Any] = {} async def async_step_init( self, user_input: dict[str, Any] | None = None diff --git a/tests/components/here_travel_time/test_config_flow.py b/tests/components/here_travel_time/test_config_flow.py index 350e1ae36f6..c1ce6f823ae 100644 --- a/tests/components/here_travel_time/test_config_flow.py +++ b/tests/components/here_travel_time/test_config_flow.py @@ -50,6 +50,16 @@ from .const import ( from tests.common import MockConfigEntry +@pytest.fixture(autouse=True) +def bypass_setup_fixture(): + """Prevent setup.""" + with patch( + "homeassistant.components.here_travel_time.async_setup_entry", + return_value=True, + ): + yield + + @pytest.fixture(name="user_step_result") async def user_step_result_fixture(hass: HomeAssistant) -> data_entry_flow.FlowResult: """Provide the result of a completed user step.""" @@ -65,7 +75,7 @@ async def user_step_result_fixture(hass: HomeAssistant) -> data_entry_flow.FlowR }, ) await hass.async_block_till_done() - yield user_step_result + return user_step_result @pytest.fixture(name="option_init_result") @@ -96,7 +106,7 @@ async def option_init_result_fixture(hass: HomeAssistant) -> data_entry_flow.Flo CONF_UNIT_SYSTEM: CONF_UNIT_SYSTEM_METRIC, }, ) - yield result + return result @pytest.fixture(name="origin_step_result") @@ -118,7 +128,7 @@ async def origin_step_result_fixture( } }, ) - yield location_selector_result + return location_selector_result @pytest.mark.parametrize( diff --git a/tests/components/here_travel_time/test_init.py b/tests/components/here_travel_time/test_init.py index 02827acc4df..05b7f6983db 100644 --- a/tests/components/here_travel_time/test_init.py +++ b/tests/components/here_travel_time/test_init.py @@ -2,6 +2,7 @@ import pytest +from homeassistant.components.here_travel_time.config_flow import default_options from homeassistant.components.here_travel_time.const import ( CONF_DESTINATION_LATITUDE, CONF_DESTINATION_LONGITUDE, @@ -39,6 +40,7 @@ async def test_unload_entry(hass: HomeAssistant) -> None: CONF_MODE: TRAVEL_MODE_CAR, CONF_NAME: "test", }, + options=default_options(hass), ) entry.add_to_hass(hass) diff --git a/tests/components/here_travel_time/test_sensor.py b/tests/components/here_travel_time/test_sensor.py index 70470aee9d3..9a15f14f53e 100644 --- a/tests/components/here_travel_time/test_sensor.py +++ b/tests/components/here_travel_time/test_sensor.py @@ -5,6 +5,7 @@ from herepy.here_enum import RouteMode from herepy.routing_api import NoRouteFoundError import pytest +from homeassistant.components.here_travel_time.config_flow import default_options from homeassistant.components.here_travel_time.const import ( ATTR_DESTINATION, ATTR_DESTINATION_NAME, @@ -224,6 +225,7 @@ async def test_circular_ref(hass: HomeAssistant, caplog): CONF_MODE: TRAVEL_MODE_TRUCK, CONF_NAME: "test", }, + options=default_options(hass), ) entry.add_to_hass(hass) await hass.config_entries.async_setup(entry.entry_id) @@ -250,6 +252,7 @@ async def test_no_attribution(hass: HomeAssistant): CONF_MODE: TRAVEL_MODE_TRUCK, CONF_NAME: "test", }, + options=default_options(hass), ) entry.add_to_hass(hass) await hass.config_entries.async_setup(entry.entry_id) @@ -293,6 +296,7 @@ async def test_entity_ids(hass: HomeAssistant, valid_response: MagicMock): CONF_MODE: TRAVEL_MODE_TRUCK, CONF_NAME: "test", }, + options=default_options(hass), ) entry.add_to_hass(hass) await hass.config_entries.async_setup(entry.entry_id) @@ -332,6 +336,7 @@ async def test_destination_entity_not_found(hass: HomeAssistant, caplog): CONF_MODE: TRAVEL_MODE_TRUCK, CONF_NAME: "test", }, + options=default_options(hass), ) entry.add_to_hass(hass) await hass.config_entries.async_setup(entry.entry_id) @@ -357,6 +362,7 @@ async def test_origin_entity_not_found(hass: HomeAssistant, caplog): CONF_MODE: TRAVEL_MODE_TRUCK, CONF_NAME: "test", }, + options=default_options(hass), ) entry.add_to_hass(hass) await hass.config_entries.async_setup(entry.entry_id) @@ -386,6 +392,7 @@ async def test_invalid_destination_entity_state(hass: HomeAssistant, caplog): CONF_MODE: TRAVEL_MODE_TRUCK, CONF_NAME: "test", }, + options=default_options(hass), ) entry.add_to_hass(hass) await hass.config_entries.async_setup(entry.entry_id) @@ -415,6 +422,7 @@ async def test_invalid_origin_entity_state(hass: HomeAssistant, caplog): CONF_MODE: TRAVEL_MODE_TRUCK, CONF_NAME: "test", }, + options=default_options(hass), ) entry.add_to_hass(hass) await hass.config_entries.async_setup(entry.entry_id) @@ -444,6 +452,7 @@ async def test_route_not_found(hass: HomeAssistant, caplog): CONF_MODE: TRAVEL_MODE_TRUCK, CONF_NAME: "test", }, + options=default_options(hass), ) entry.add_to_hass(hass) await hass.config_entries.async_setup(entry.entry_id)