Allow empty string for filters for waze_travel_time (#80953)

* Allow empty string for filters

Signed-off-by: Kevin Stillhammer <kevin.stillhammer@gmail.com>

* Apply PR feedback

Signed-off-by: Kevin Stillhammer <kevin.stillhammer@gmail.com>

Signed-off-by: Kevin Stillhammer <kevin.stillhammer@gmail.com>
This commit is contained in:
Kevin Stillhammer 2022-10-29 03:01:53 +02:00 committed by GitHub
parent e47f06fde8
commit 77585686e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 53 additions and 7 deletions

View File

@ -52,7 +52,7 @@ class WazeOptionsFlow(config_entries.OptionsFlow):
if user_input is not None:
return self.async_create_entry(
title="",
data={k: v for k, v in user_input.items() if v not in (None, "")},
data=user_input,
)
return self.async_show_form(

View File

@ -185,14 +185,14 @@ class WazeTravelTimeData:
)
routes = params.calc_all_routes_info(real_time=realtime)
if incl_filter is not None:
if incl_filter not in {None, ""}:
routes = {
k: v
for k, v in routes.items()
if incl_filter.lower() in k.lower()
}
if excl_filter is not None:
if excl_filter not in {None, ""}:
routes = {
k: v
for k, v in routes.items()

View File

@ -19,6 +19,7 @@ from homeassistant.components.waze_travel_time.const import (
IMPERIAL_UNITS,
)
from homeassistant.const import CONF_NAME, CONF_REGION
from homeassistant.core import HomeAssistant
from .const import MOCK_CONFIG
@ -26,7 +27,7 @@ from tests.common import MockConfigEntry
@pytest.mark.usefixtures("validate_config_entry")
async def test_minimum_fields(hass):
async def test_minimum_fields(hass: HomeAssistant) -> None:
"""Test we get the form."""
result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -50,7 +51,7 @@ async def test_minimum_fields(hass):
}
async def test_options(hass):
async def test_options(hass: HomeAssistant) -> None:
"""Test options flow."""
entry = MockConfigEntry(
domain=DOMAIN,
@ -105,7 +106,7 @@ async def test_options(hass):
@pytest.mark.usefixtures("validate_config_entry")
async def test_dupe(hass):
async def test_dupe(hass: HomeAssistant) -> None:
"""Test setting up the same entry data twice is OK."""
result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -138,7 +139,9 @@ async def test_dupe(hass):
@pytest.mark.usefixtures("invalidate_config_entry")
async def test_invalid_config_entry(hass, caplog):
async def test_invalid_config_entry(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test we get the form."""
result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -154,3 +157,46 @@ async def test_invalid_config_entry(hass, caplog):
assert result2["errors"] == {"base": "cannot_connect"}
assert "Error trying to validate entry" in caplog.text
@pytest.mark.usefixtures("mock_update")
async def test_reset_filters(hass: HomeAssistant) -> None:
"""Test resetting inclusive and exclusive filters to empty string."""
options = {**DEFAULT_OPTIONS}
options[CONF_INCL_FILTER] = "test"
options[CONF_EXCL_FILTER] = "test"
config_entry = MockConfigEntry(
domain=DOMAIN, data=MOCK_CONFIG, options=options, entry_id="test"
)
config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
result = await hass.config_entries.options.async_init(
config_entry.entry_id, data=None
)
result = await hass.config_entries.options.async_configure(
result["flow_id"],
user_input={
CONF_AVOID_FERRIES: True,
CONF_AVOID_SUBSCRIPTION_ROADS: True,
CONF_AVOID_TOLL_ROADS: True,
CONF_EXCL_FILTER: "",
CONF_INCL_FILTER: "",
CONF_REALTIME: False,
CONF_UNITS: IMPERIAL_UNITS,
CONF_VEHICLE_TYPE: "taxi",
},
)
assert config_entry.options == {
CONF_AVOID_FERRIES: True,
CONF_AVOID_SUBSCRIPTION_ROADS: True,
CONF_AVOID_TOLL_ROADS: True,
CONF_EXCL_FILTER: "",
CONF_INCL_FILTER: "",
CONF_REALTIME: False,
CONF_UNITS: IMPERIAL_UNITS,
CONF_VEHICLE_TYPE: "taxi",
}