Add check for valid error code in translation checks in flows (#128445)
parent
15fc4a8ae4
commit
0bc572787a
|
@ -393,6 +393,10 @@ async def test_available_flows(
|
||||||
############################
|
############################
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"ignore_translations",
|
||||||
|
["component.test.config.error.Should be unique."],
|
||||||
|
)
|
||||||
async def test_initialize_flow(hass: HomeAssistant, client: TestClient) -> None:
|
async def test_initialize_flow(hass: HomeAssistant, client: TestClient) -> None:
|
||||||
"""Test we can initialize a flow."""
|
"""Test we can initialize a flow."""
|
||||||
mock_platform(hass, "test.config_flow", None)
|
mock_platform(hass, "test.config_flow", None)
|
||||||
|
@ -772,6 +776,10 @@ async def test_get_progress_index_unauth(
|
||||||
assert response["error"]["code"] == "unauthorized"
|
assert response["error"]["code"] == "unauthorized"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"ignore_translations",
|
||||||
|
["component.test.config.error.Should be unique."],
|
||||||
|
)
|
||||||
async def test_get_progress_flow(hass: HomeAssistant, client: TestClient) -> None:
|
async def test_get_progress_flow(hass: HomeAssistant, client: TestClient) -> None:
|
||||||
"""Test we can query the API for same result as we get from init a flow."""
|
"""Test we can query the API for same result as we get from init a flow."""
|
||||||
mock_platform(hass, "test.config_flow", None)
|
mock_platform(hass, "test.config_flow", None)
|
||||||
|
@ -804,6 +812,10 @@ async def test_get_progress_flow(hass: HomeAssistant, client: TestClient) -> Non
|
||||||
assert data == data2
|
assert data == data2
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"ignore_translations",
|
||||||
|
["component.test.config.error.Should be unique."],
|
||||||
|
)
|
||||||
async def test_get_progress_flow_unauth(
|
async def test_get_progress_flow_unauth(
|
||||||
hass: HomeAssistant, client: TestClient, hass_admin_user: MockUser
|
hass: HomeAssistant, client: TestClient, hass_admin_user: MockUser
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
|
@ -540,6 +540,18 @@ def check_config_translations(ignore_translations: str | list[str]) -> Generator
|
||||||
# Gets set to False on first run, and to True on subsequent runs
|
# Gets set to False on first run, and to True on subsequent runs
|
||||||
setattr(flow, "__flow_seen_before", hasattr(flow, "__flow_seen_before"))
|
setattr(flow, "__flow_seen_before", hasattr(flow, "__flow_seen_before"))
|
||||||
|
|
||||||
|
if result["type"] is FlowResultType.FORM:
|
||||||
|
if errors := result.get("errors"):
|
||||||
|
for error in errors.values():
|
||||||
|
await _ensure_translation_exists(
|
||||||
|
flow.hass,
|
||||||
|
_ignore_translations,
|
||||||
|
category,
|
||||||
|
component,
|
||||||
|
f"error.{error}",
|
||||||
|
)
|
||||||
|
return result
|
||||||
|
|
||||||
if result["type"] is FlowResultType.ABORT:
|
if result["type"] is FlowResultType.ABORT:
|
||||||
# We don't need translations for a discovery flow which immediately
|
# We don't need translations for a discovery flow which immediately
|
||||||
# aborts, since such flows won't be seen by users
|
# aborts, since such flows won't be seen by users
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
from unittest.mock import AsyncMock
|
from unittest.mock import AsyncMock
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
from homeassistant.components.emoncms.const import CONF_ONLY_INCLUDE_FEEDID, DOMAIN
|
from homeassistant.components.emoncms.const import CONF_ONLY_INCLUDE_FEEDID, DOMAIN
|
||||||
from homeassistant.config_entries import SOURCE_IMPORT, SOURCE_USER
|
from homeassistant.config_entries import SOURCE_IMPORT, SOURCE_USER
|
||||||
from homeassistant.const import CONF_API_KEY, CONF_URL
|
from homeassistant.const import CONF_API_KEY, CONF_URL
|
||||||
|
@ -127,6 +129,10 @@ async def test_options_flow(
|
||||||
assert config_entry.options == CONFIG_ENTRY
|
assert config_entry.options == CONFIG_ENTRY
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.emoncms.options.error.failure"],
|
||||||
|
)
|
||||||
async def test_options_flow_failure(
|
async def test_options_flow_failure(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_setup_entry: AsyncMock,
|
mock_setup_entry: AsyncMock,
|
||||||
|
|
|
@ -61,6 +61,10 @@ async def test_form(hass: HomeAssistant) -> None:
|
||||||
assert len(mock_setup_entry.mock_calls) == 1
|
assert len(mock_setup_entry.mock_calls) == 1
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.flume.config.error.invalid_auth"],
|
||||||
|
)
|
||||||
@pytest.mark.usefixtures("access_token")
|
@pytest.mark.usefixtures("access_token")
|
||||||
async def test_form_invalid_auth(hass: HomeAssistant, requests_mock: Mocker) -> None:
|
async def test_form_invalid_auth(hass: HomeAssistant, requests_mock: Mocker) -> None:
|
||||||
"""Test we handle invalid auth."""
|
"""Test we handle invalid auth."""
|
||||||
|
@ -89,6 +93,10 @@ async def test_form_invalid_auth(hass: HomeAssistant, requests_mock: Mocker) ->
|
||||||
assert result2["errors"] == {"password": "invalid_auth"}
|
assert result2["errors"] == {"password": "invalid_auth"}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.flume.config.error.cannot_connect"],
|
||||||
|
)
|
||||||
@pytest.mark.usefixtures("access_token", "device_list_timeout")
|
@pytest.mark.usefixtures("access_token", "device_list_timeout")
|
||||||
async def test_form_cannot_connect(hass: HomeAssistant) -> None:
|
async def test_form_cannot_connect(hass: HomeAssistant) -> None:
|
||||||
"""Test we handle cannot connect error."""
|
"""Test we handle cannot connect error."""
|
||||||
|
@ -112,7 +120,13 @@ async def test_form_cannot_connect(hass: HomeAssistant) -> None:
|
||||||
|
|
||||||
@pytest.mark.parametrize( # Remove when translations fixed
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
"ignore_translations",
|
"ignore_translations",
|
||||||
["component.flume.config.abort.reauth_successful"],
|
[
|
||||||
|
[
|
||||||
|
"component.flume.config.abort.reauth_successful",
|
||||||
|
"component.flume.config.error.cannot_connect",
|
||||||
|
"component.flume.config.error.invalid_auth",
|
||||||
|
]
|
||||||
|
],
|
||||||
)
|
)
|
||||||
@pytest.mark.usefixtures("access_token")
|
@pytest.mark.usefixtures("access_token")
|
||||||
async def test_reauth(hass: HomeAssistant, requests_mock: Mocker) -> None:
|
async def test_reauth(hass: HomeAssistant, requests_mock: Mocker) -> None:
|
||||||
|
@ -194,6 +208,10 @@ async def test_reauth(hass: HomeAssistant, requests_mock: Mocker) -> None:
|
||||||
assert result4["reason"] == "reauth_successful"
|
assert result4["reason"] == "reauth_successful"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.flume.config.error.cannot_connect"],
|
||||||
|
)
|
||||||
@pytest.mark.usefixtures("access_token")
|
@pytest.mark.usefixtures("access_token")
|
||||||
async def test_form_no_devices(hass: HomeAssistant, requests_mock: Mocker) -> None:
|
async def test_form_no_devices(hass: HomeAssistant, requests_mock: Mocker) -> None:
|
||||||
"""Test a device list response that contains no values will raise an error."""
|
"""Test a device list response that contains no values will raise an error."""
|
||||||
|
|
|
@ -637,6 +637,10 @@ async def test_form_stream_other_error(hass: HomeAssistant, user_flow) -> None:
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.generic.config.error.Some message"],
|
||||||
|
)
|
||||||
@respx.mock
|
@respx.mock
|
||||||
@pytest.mark.usefixtures("fakeimg_png")
|
@pytest.mark.usefixtures("fakeimg_png")
|
||||||
async def test_form_stream_worker_error(
|
async def test_form_stream_worker_error(
|
||||||
|
|
|
@ -33,6 +33,10 @@ async def test_duplicate_error(hass: HomeAssistant, config: dict[str, Any]) -> N
|
||||||
assert result["reason"] == "already_configured"
|
assert result["reason"] == "already_configured"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.guardian.config.error.cannot_connect"],
|
||||||
|
)
|
||||||
async def test_connect_error(hass: HomeAssistant, config: dict[str, Any]) -> None:
|
async def test_connect_error(hass: HomeAssistant, config: dict[str, Any]) -> None:
|
||||||
"""Test that the config entry errors out if the device cannot connect."""
|
"""Test that the config entry errors out if the device cannot connect."""
|
||||||
with patch(
|
with patch(
|
||||||
|
|
|
@ -4,6 +4,7 @@ import json
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
from pygti.exceptions import CannotConnect, InvalidAuth
|
from pygti.exceptions import CannotConnect, InvalidAuth
|
||||||
|
import pytest
|
||||||
|
|
||||||
from homeassistant.components.hvv_departures.const import (
|
from homeassistant.components.hvv_departures.const import (
|
||||||
CONF_FILTER,
|
CONF_FILTER,
|
||||||
|
@ -312,6 +313,10 @@ async def test_options_flow(hass: HomeAssistant) -> None:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.hvv_departures.options.error.invalid_auth"],
|
||||||
|
)
|
||||||
async def test_options_flow_invalid_auth(hass: HomeAssistant) -> None:
|
async def test_options_flow_invalid_auth(hass: HomeAssistant) -> None:
|
||||||
"""Test that options flow works."""
|
"""Test that options flow works."""
|
||||||
|
|
||||||
|
@ -355,6 +360,10 @@ async def test_options_flow_invalid_auth(hass: HomeAssistant) -> None:
|
||||||
assert result["errors"] == {"base": "invalid_auth"}
|
assert result["errors"] == {"base": "invalid_auth"}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.hvv_departures.options.error.cannot_connect"],
|
||||||
|
)
|
||||||
async def test_options_flow_cannot_connect(hass: HomeAssistant) -> None:
|
async def test_options_flow_cannot_connect(hass: HomeAssistant) -> None:
|
||||||
"""Test that options flow works."""
|
"""Test that options flow works."""
|
||||||
|
|
||||||
|
|
|
@ -93,6 +93,10 @@ async def test_form_connect_timeout(
|
||||||
assert result2["type"] is FlowResultType.CREATE_ENTRY
|
assert result2["type"] is FlowResultType.CREATE_ENTRY
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.hydrawise.config.error.invalid_auth"],
|
||||||
|
)
|
||||||
async def test_form_not_authorized_error(
|
async def test_form_not_authorized_error(
|
||||||
hass: HomeAssistant, mock_pydrawise: AsyncMock, user: User
|
hass: HomeAssistant, mock_pydrawise: AsyncMock, user: User
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
|
@ -4,6 +4,7 @@ from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
from lmcloud.exceptions import AuthFail, RequestNotSuccessful
|
from lmcloud.exceptions import AuthFail, RequestNotSuccessful
|
||||||
from lmcloud.models import LaMarzoccoDeviceInfo
|
from lmcloud.models import LaMarzoccoDeviceInfo
|
||||||
|
import pytest
|
||||||
|
|
||||||
from homeassistant.components.lamarzocco.config_flow import CONF_MACHINE
|
from homeassistant.components.lamarzocco.config_flow import CONF_MACHINE
|
||||||
from homeassistant.components.lamarzocco.const import CONF_USE_BLUETOOTH, DOMAIN
|
from homeassistant.components.lamarzocco.const import CONF_USE_BLUETOOTH, DOMAIN
|
||||||
|
@ -365,6 +366,10 @@ async def test_bluetooth_discovery(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.lamarzocco.config.error.machine_not_found"],
|
||||||
|
)
|
||||||
async def test_bluetooth_discovery_errors(
|
async def test_bluetooth_discovery_errors(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_lamarzocco: MagicMock,
|
mock_lamarzocco: MagicMock,
|
||||||
|
|
|
@ -101,6 +101,10 @@ async def test_list_entry(mock_port, mock_heat_meter, hass: HomeAssistant) -> No
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.landisgyr_heat_meter.config.error.cannot_connect"],
|
||||||
|
)
|
||||||
@patch(API_HEAT_METER_SERVICE)
|
@patch(API_HEAT_METER_SERVICE)
|
||||||
async def test_manual_entry_fail(mock_heat_meter, hass: HomeAssistant) -> None:
|
async def test_manual_entry_fail(mock_heat_meter, hass: HomeAssistant) -> None:
|
||||||
"""Test manual entry fails."""
|
"""Test manual entry fails."""
|
||||||
|
@ -131,6 +135,10 @@ async def test_manual_entry_fail(mock_heat_meter, hass: HomeAssistant) -> None:
|
||||||
assert result["errors"] == {"base": "cannot_connect"}
|
assert result["errors"] == {"base": "cannot_connect"}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.landisgyr_heat_meter.config.error.cannot_connect"],
|
||||||
|
)
|
||||||
@patch(API_HEAT_METER_SERVICE)
|
@patch(API_HEAT_METER_SERVICE)
|
||||||
@patch("serial.tools.list_ports.comports", return_value=[mock_serial_port()])
|
@patch("serial.tools.list_ports.comports", return_value=[mock_serial_port()])
|
||||||
async def test_list_entry_fail(mock_port, mock_heat_meter, hass: HomeAssistant) -> None:
|
async def test_list_entry_fail(mock_port, mock_heat_meter, hass: HomeAssistant) -> None:
|
||||||
|
|
|
@ -8,6 +8,7 @@ from typing import Any
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
from pynina import ApiError
|
from pynina import ApiError
|
||||||
|
import pytest
|
||||||
|
|
||||||
from homeassistant.components.nina.const import (
|
from homeassistant.components.nina.const import (
|
||||||
CONF_AREA_FILTER,
|
CONF_AREA_FILTER,
|
||||||
|
@ -278,6 +279,10 @@ async def test_options_flow_connection_error(hass: HomeAssistant) -> None:
|
||||||
assert result["errors"] == {"base": "cannot_connect"}
|
assert result["errors"] == {"base": "cannot_connect"}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.nina.options.error.unknown"],
|
||||||
|
)
|
||||||
async def test_options_flow_unexpected_exception(hass: HomeAssistant) -> None:
|
async def test_options_flow_unexpected_exception(hass: HomeAssistant) -> None:
|
||||||
"""Test config flow options but with an unexpected exception."""
|
"""Test config flow options but with an unexpected exception."""
|
||||||
config_entry = MockConfigEntry(
|
config_entry = MockConfigEntry(
|
||||||
|
|
|
@ -121,6 +121,10 @@ async def test_full_flow_implementation(hass: HomeAssistant) -> None:
|
||||||
assert result2["data"][CONF_ACCOUNT] == FIXTURE_USER_INPUT[CONF_ACCOUNT]
|
assert result2["data"][CONF_ACCOUNT] == FIXTURE_USER_INPUT[CONF_ACCOUNT]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.ovo_energy.config.error.authorization_error"],
|
||||||
|
)
|
||||||
async def test_reauth_authorization_error(hass: HomeAssistant) -> None:
|
async def test_reauth_authorization_error(hass: HomeAssistant) -> None:
|
||||||
"""Test we show user form on authorization error."""
|
"""Test we show user form on authorization error."""
|
||||||
mock_config = MockConfigEntry(
|
mock_config = MockConfigEntry(
|
||||||
|
@ -147,6 +151,10 @@ async def test_reauth_authorization_error(hass: HomeAssistant) -> None:
|
||||||
assert result2["errors"] == {"base": "authorization_error"}
|
assert result2["errors"] == {"base": "authorization_error"}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.ovo_energy.config.error.connection_error"],
|
||||||
|
)
|
||||||
async def test_reauth_connection_error(hass: HomeAssistant) -> None:
|
async def test_reauth_connection_error(hass: HomeAssistant) -> None:
|
||||||
"""Test we show user form on connection error."""
|
"""Test we show user form on connection error."""
|
||||||
mock_config = MockConfigEntry(
|
mock_config = MockConfigEntry(
|
||||||
|
@ -175,7 +183,12 @@ async def test_reauth_connection_error(hass: HomeAssistant) -> None:
|
||||||
|
|
||||||
@pytest.mark.parametrize( # Remove when translations fixed
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
"ignore_translations",
|
"ignore_translations",
|
||||||
["component.ovo_energy.config.abort.reauth_successful"],
|
[
|
||||||
|
[
|
||||||
|
"component.ovo_energy.config.abort.reauth_successful",
|
||||||
|
"component.ovo_energy.config.error.authorization_error",
|
||||||
|
]
|
||||||
|
],
|
||||||
)
|
)
|
||||||
async def test_reauth_flow(hass: HomeAssistant) -> None:
|
async def test_reauth_flow(hass: HomeAssistant) -> None:
|
||||||
"""Test reauth works."""
|
"""Test reauth works."""
|
||||||
|
|
|
@ -86,6 +86,10 @@ async def test_user_connection_timeout(
|
||||||
assert result["errors"] == {"base": "timeout"}
|
assert result["errors"] == {"base": "timeout"}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.tradfri.config.error.invalid_security_code"],
|
||||||
|
)
|
||||||
async def test_user_connection_bad_key(
|
async def test_user_connection_bad_key(
|
||||||
hass: HomeAssistant, mock_auth, mock_entry_setup
|
hass: HomeAssistant, mock_auth, mock_entry_setup
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
|
@ -72,6 +72,10 @@ async def test_config_flow(hass: HomeAssistant, platform) -> None:
|
||||||
assert config_entry.title == "Electricity meter"
|
assert config_entry.title == "Electricity meter"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.utility_meter.config.error.tariffs_not_unique"],
|
||||||
|
)
|
||||||
async def test_tariffs(hass: HomeAssistant) -> None:
|
async def test_tariffs(hass: HomeAssistant) -> None:
|
||||||
"""Test tariffs."""
|
"""Test tariffs."""
|
||||||
input_sensor_entity_id = "sensor.input"
|
input_sensor_entity_id = "sensor.input"
|
||||||
|
|
|
@ -150,6 +150,10 @@ async def test_form_exceptions(
|
||||||
assert result["type"] is FlowResultType.CREATE_ENTRY
|
assert result["type"] is FlowResultType.CREATE_ENTRY
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( # Remove when translations fixed
|
||||||
|
"ignore_translations",
|
||||||
|
["component.vilfo.config.error.wrong_host"],
|
||||||
|
)
|
||||||
async def test_form_wrong_host(
|
async def test_form_wrong_host(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_is_valid_host: AsyncMock,
|
mock_is_valid_host: AsyncMock,
|
||||||
|
|
Loading…
Reference in New Issue