diff --git a/.core_files.yaml b/.core_files.yaml index e852a56760179..27bf77b84ae4c 100644 --- a/.core_files.yaml +++ b/.core_files.yaml @@ -126,9 +126,11 @@ tests: &tests - tests/*.py - tests/auth/** - tests/backports/** + - tests/components/diagnostics/** - tests/components/history/** - tests/components/logbook/** - tests/components/recorder/** + - tests/components/repairs/** - tests/components/sensor/** - tests/hassfest/** - tests/helpers/** diff --git a/tests/components/doorbird/test_repairs.py b/tests/components/doorbird/test_repairs.py index 7449250b7182f..34e6de7516ef9 100644 --- a/tests/components/doorbird/test_repairs.py +++ b/tests/components/doorbird/test_repairs.py @@ -2,16 +2,7 @@ from __future__ import annotations -from http import HTTPStatus - from homeassistant.components.doorbird.const import DOMAIN -from homeassistant.components.repairs.issue_handler import ( - async_process_repairs_platforms, -) -from homeassistant.components.repairs.websocket_api import ( - RepairsFlowIndexView, - RepairsFlowResourceView, -) from homeassistant.config_entries import ConfigEntryState from homeassistant.core import HomeAssistant from homeassistant.helpers import issue_registry as ir @@ -20,6 +11,11 @@ from . import mock_not_found_exception from .conftest import DoorbirdMockerType +from tests.components.repairs import ( + async_process_repairs_platforms, + process_repair_fix_flow, + start_repair_fix_flow, +) from tests.typing import ClientSessionGenerator @@ -43,19 +39,13 @@ async def test_change_schedule_fails( await async_process_repairs_platforms(hass) client = await hass_client() - url = RepairsFlowIndexView.url - resp = await client.post(url, json={"handler": DOMAIN, "issue_id": issue_id}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(client, DOMAIN, issue_id) flow_id = data["flow_id"] placeholders = data["description_placeholders"] assert "404" in placeholders["error"] assert data["step_id"] == "confirm" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id) assert data["type"] == "create_entry" diff --git a/tests/components/ecobee/test_repairs.py b/tests/components/ecobee/test_repairs.py index 43b3cc5b7d07b..b00c49e7d915d 100644 --- a/tests/components/ecobee/test_repairs.py +++ b/tests/components/ecobee/test_repairs.py @@ -1,22 +1,19 @@ """Test repairs for Ecobee integration.""" -from http import HTTPStatus from unittest.mock import MagicMock from homeassistant.components.ecobee import DOMAIN from homeassistant.components.notify import DOMAIN as NOTIFY_DOMAIN -from homeassistant.components.repairs.issue_handler import ( - async_process_repairs_platforms, -) -from homeassistant.components.repairs.websocket_api import ( - RepairsFlowIndexView, - RepairsFlowResourceView, -) from homeassistant.core import HomeAssistant from homeassistant.helpers import issue_registry as ir from .common import setup_platform +from tests.components.repairs import ( + async_process_repairs_platforms, + process_repair_fix_flow, + start_repair_fix_flow, +) from tests.typing import ClientSessionGenerator THERMOSTAT_ID = 0 @@ -53,20 +50,14 @@ async def test_ecobee_notify_repair_flow( ) assert len(issue_registry.issues) == 1 - url = RepairsFlowIndexView.url - resp = await http_client.post( - url, json={"handler": "notify", "issue_id": f"migrate_notify_{DOMAIN}_{DOMAIN}"} + data = await start_repair_fix_flow( + http_client, "notify", f"migrate_notify_{DOMAIN}_{DOMAIN}" ) - assert resp.status == HTTPStatus.OK - data = await resp.json() flow_id = data["flow_id"] assert data["step_id"] == "confirm" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await http_client.post(url) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(http_client, flow_id) assert data["type"] == "create_entry" # Test confirm step in repair flow await hass.async_block_till_done() diff --git a/tests/components/homeassistant/test_repairs.py b/tests/components/homeassistant/test_repairs.py index c7a1b3e762e91..f81eaa694fac1 100644 --- a/tests/components/homeassistant/test_repairs.py +++ b/tests/components/homeassistant/test_repairs.py @@ -1,19 +1,15 @@ """Test the Homeassistant repairs module.""" -from http import HTTPStatus - from homeassistant.components.repairs import DOMAIN as REPAIRS_DOMAIN -from homeassistant.components.repairs.issue_handler import ( - async_process_repairs_platforms, -) -from homeassistant.components.repairs.websocket_api import ( - RepairsFlowIndexView, - RepairsFlowResourceView, -) from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN, HomeAssistant from homeassistant.setup import async_setup_component from tests.common import MockConfigEntry +from tests.components.repairs import ( + async_process_repairs_platforms, + process_repair_fix_flow, + start_repair_fix_flow, +) from tests.typing import ClientSessionGenerator, WebSocketGenerator @@ -48,32 +44,20 @@ async def test_integration_not_found_confirm_step( assert issue["issue_id"] == issue_id assert issue["translation_placeholders"] == {"domain": "test1"} - url = RepairsFlowIndexView.url - resp = await http_client.post( - url, json={"handler": HOMEASSISTANT_DOMAIN, "issue_id": issue_id} - ) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(http_client, HOMEASSISTANT_DOMAIN, issue_id) flow_id = data["flow_id"] assert data["step_id"] == "init" assert data["description_placeholders"] == {"domain": "test1"} - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - - # Show menu - resp = await http_client.post(url) - - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(http_client, flow_id) assert data["type"] == "menu" # Apply fix - resp = await http_client.post(url, json={"next_step_id": "confirm"}) - - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow( + http_client, flow_id, json={"next_step_id": "confirm"} + ) assert data["type"] == "create_entry" @@ -118,32 +102,21 @@ async def test_integration_not_found_ignore_step( assert issue["issue_id"] == issue_id assert issue["translation_placeholders"] == {"domain": "test1"} - url = RepairsFlowIndexView.url - resp = await http_client.post( - url, json={"handler": HOMEASSISTANT_DOMAIN, "issue_id": issue_id} - ) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(http_client, HOMEASSISTANT_DOMAIN, issue_id) flow_id = data["flow_id"] assert data["step_id"] == "init" assert data["description_placeholders"] == {"domain": "test1"} - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - # Show menu - resp = await http_client.post(url) - - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(http_client, flow_id) assert data["type"] == "menu" # Apply fix - resp = await http_client.post(url, json={"next_step_id": "ignore"}) - - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow( + http_client, flow_id, json={"next_step_id": "ignore"} + ) assert data["type"] == "abort" assert data["reason"] == "issue_ignored" diff --git a/tests/components/knx/test_repairs.py b/tests/components/knx/test_repairs.py index 690d6e450cbf9..b801f70324fe0 100644 --- a/tests/components/knx/test_repairs.py +++ b/tests/components/knx/test_repairs.py @@ -1,20 +1,15 @@ """Test repairs for KNX integration.""" -from http import HTTPStatus - from homeassistant.components.knx.const import DOMAIN, KNX_ADDRESS from homeassistant.components.knx.schema import NotifySchema from homeassistant.components.notify import DOMAIN as NOTIFY_DOMAIN -from homeassistant.components.repairs.websocket_api import ( - RepairsFlowIndexView, - RepairsFlowResourceView, -) from homeassistant.const import CONF_NAME from homeassistant.core import HomeAssistant import homeassistant.helpers.issue_registry as ir from .conftest import KNXTestKit +from tests.components.repairs import process_repair_fix_flow, start_repair_fix_flow from tests.typing import ClientSessionGenerator @@ -59,21 +54,14 @@ async def test_knx_notify_service_issue( ) # Test confirm step in repair flow - resp = await http_client.post( - RepairsFlowIndexView.url, - json={"handler": "notify", "issue_id": f"migrate_notify_{DOMAIN}_notify"}, + data = await start_repair_fix_flow( + http_client, "notify", f"migrate_notify_{DOMAIN}_notify" ) - assert resp.status == HTTPStatus.OK - data = await resp.json() flow_id = data["flow_id"] assert data["step_id"] == "confirm" - resp = await http_client.post( - RepairsFlowResourceView.url.format(flow_id=flow_id), - ) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(http_client, flow_id) assert data["type"] == "create_entry" # Assert the issue is no longer present diff --git a/tests/components/notify/test_repairs.py b/tests/components/notify/test_repairs.py index fef5818e1e698..e77da5cea6f6c 100644 --- a/tests/components/notify/test_repairs.py +++ b/tests/components/notify/test_repairs.py @@ -1,6 +1,5 @@ """Test repairs for notify entity component.""" -from http import HTTPStatus from unittest.mock import AsyncMock import pytest @@ -9,18 +8,16 @@ DOMAIN as NOTIFY_DOMAIN, migrate_notify_issue, ) -from homeassistant.components.repairs.issue_handler import ( - async_process_repairs_platforms, -) -from homeassistant.components.repairs.websocket_api import ( - RepairsFlowIndexView, - RepairsFlowResourceView, -) from homeassistant.core import HomeAssistant from homeassistant.helpers import issue_registry as ir from homeassistant.setup import async_setup_component from tests.common import MockConfigEntry, MockModule, mock_integration +from tests.components.repairs import ( + async_process_repairs_platforms, + process_repair_fix_flow, + start_repair_fix_flow, +) from tests.typing import ClientSessionGenerator THERMOSTAT_ID = 0 @@ -66,20 +63,12 @@ async def test_notify_migration_repair_flow( ) assert len(issue_registry.issues) == 1 - url = RepairsFlowIndexView.url - resp = await http_client.post( - url, json={"handler": NOTIFY_DOMAIN, "issue_id": translation_key} - ) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(http_client, NOTIFY_DOMAIN, translation_key) flow_id = data["flow_id"] assert data["step_id"] == "confirm" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await http_client.post(url) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(http_client, flow_id) assert data["type"] == "create_entry" # Test confirm step in repair flow await hass.async_block_till_done() diff --git a/tests/components/repairs/__init__.py b/tests/components/repairs/__init__.py index a6786db9685d7..e787d657e5caa 100644 --- a/tests/components/repairs/__init__.py +++ b/tests/components/repairs/__init__.py @@ -1,5 +1,17 @@ """Tests for the repairs integration.""" +from http import HTTPStatus +from typing import Any + +from aiohttp.test_utils import TestClient + +from homeassistant.components.repairs.issue_handler import ( # noqa: F401 + async_process_repairs_platforms, +) +from homeassistant.components.repairs.websocket_api import ( + RepairsFlowIndexView, + RepairsFlowResourceView, +) from homeassistant.core import HomeAssistant from homeassistant.setup import async_setup_component @@ -27,3 +39,23 @@ async def get_repairs( assert msg["result"] return msg["result"]["issues"] + + +async def start_repair_fix_flow( + client: TestClient, handler: str, issue_id: int +) -> dict[str, Any]: + """Start a flow from an issue.""" + url = RepairsFlowIndexView.url + resp = await client.post(url, json={"handler": handler, "issue_id": issue_id}) + assert resp.status == HTTPStatus.OK + return await resp.json() + + +async def process_repair_fix_flow( + client: TestClient, flow_id: int, json: dict[str, Any] | None = None +) -> dict[str, Any]: + """Return the repairs list of issues.""" + url = RepairsFlowResourceView.url.format(flow_id=flow_id) + resp = await client.post(url, json=json) + assert resp.status == HTTPStatus.OK + return await resp.json() diff --git a/tests/components/seventeentrack/test_repairs.py b/tests/components/seventeentrack/test_repairs.py index 0f697c1ad4980..44d1f07843298 100644 --- a/tests/components/seventeentrack/test_repairs.py +++ b/tests/components/seventeentrack/test_repairs.py @@ -1,12 +1,10 @@ """Tests for the seventeentrack repair flow.""" -from http import HTTPStatus from unittest.mock import AsyncMock from freezegun.api import FrozenDateTimeFactory from homeassistant.components.repairs import DOMAIN as REPAIRS_DOMAIN -from homeassistant.components.repairs.websocket_api import RepairsFlowIndexView from homeassistant.components.seventeentrack import DOMAIN from homeassistant.core import HomeAssistant from homeassistant.helpers import issue_registry as ir @@ -16,6 +14,7 @@ from .conftest import DEFAULT_SUMMARY_LENGTH, get_package from tests.common import MockConfigEntry +from tests.components.repairs import process_repair_fix_flow, start_repair_fix_flow from tests.typing import ClientSessionGenerator @@ -49,13 +48,7 @@ async def test_repair( client = await hass_client() - resp = await client.post( - RepairsFlowIndexView.url, - json={"handler": DOMAIN, "issue_id": repair_issue.issue_id}, - ) - - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(client, DOMAIN, repair_issue.issue_id) flow_id = data["flow_id"] assert data == { @@ -70,9 +63,7 @@ async def test_repair( "preview": None, } - resp = await client.post(RepairsFlowIndexView.url + f"/{flow_id}") - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id) flow_id = data["flow_id"] assert data == { diff --git a/tests/components/tibber/test_repairs.py b/tests/components/tibber/test_repairs.py index 89e85e5f8e1de..5e5fde4569e21 100644 --- a/tests/components/tibber/test_repairs.py +++ b/tests/components/tibber/test_repairs.py @@ -1,16 +1,12 @@ """Test loading of the Tibber config entry.""" -from http import HTTPStatus from unittest.mock import MagicMock from homeassistant.components.recorder import Recorder -from homeassistant.components.repairs.websocket_api import ( - RepairsFlowIndexView, - RepairsFlowResourceView, -) from homeassistant.core import HomeAssistant from homeassistant.helpers import issue_registry as ir +from tests.components.repairs import process_repair_fix_flow, start_repair_fix_flow from tests.typing import ClientSessionGenerator @@ -40,21 +36,15 @@ async def test_repair_flow( ) assert len(issue_registry.issues) == 1 - url = RepairsFlowIndexView.url - resp = await http_client.post( - url, json={"handler": "notify", "issue_id": f"migrate_notify_tibber_{service}"} + data = await start_repair_fix_flow( + http_client, "notify", f"migrate_notify_tibber_{service}" ) - assert resp.status == HTTPStatus.OK - data = await resp.json() flow_id = data["flow_id"] assert data["step_id"] == "confirm" # Simulate the users confirmed the repair flow - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await http_client.post(url) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(http_client, flow_id) assert data["type"] == "create_entry" await hass.async_block_till_done() diff --git a/tests/components/unifiprotect/test_migrate.py b/tests/components/unifiprotect/test_migrate.py index 4e1bf8bd418c7..4bfc29a142bb1 100644 --- a/tests/components/unifiprotect/test_migrate.py +++ b/tests/components/unifiprotect/test_migrate.py @@ -7,9 +7,6 @@ from uiprotect.data import Camera from homeassistant.components.automation import DOMAIN as AUTOMATION_DOMAIN -from homeassistant.components.repairs.issue_handler import ( - async_process_repairs_platforms, -) from homeassistant.components.script import DOMAIN as SCRIPT_DOMAIN from homeassistant.components.unifiprotect.const import DOMAIN from homeassistant.const import SERVICE_RELOAD, Platform @@ -19,6 +16,7 @@ from .utils import MockUFPFixture, init_entry +from tests.components.repairs import async_process_repairs_platforms from tests.typing import WebSocketGenerator diff --git a/tests/components/unifiprotect/test_repairs.py b/tests/components/unifiprotect/test_repairs.py index bdfcd6ff4756b..adb9555e6ea47 100644 --- a/tests/components/unifiprotect/test_repairs.py +++ b/tests/components/unifiprotect/test_repairs.py @@ -3,24 +3,21 @@ from __future__ import annotations from copy import copy, deepcopy -from http import HTTPStatus from unittest.mock import AsyncMock, Mock from uiprotect.data import Camera, CloudAccount, ModelType, Version -from homeassistant.components.repairs.issue_handler import ( - async_process_repairs_platforms, -) -from homeassistant.components.repairs.websocket_api import ( - RepairsFlowIndexView, - RepairsFlowResourceView, -) from homeassistant.components.unifiprotect.const import DOMAIN from homeassistant.config_entries import SOURCE_REAUTH from homeassistant.core import HomeAssistant from .utils import MockUFPFixture, init_entry +from tests.components.repairs import ( + async_process_repairs_platforms, + process_repair_fix_flow, + start_repair_fix_flow, +) from tests.typing import ClientSessionGenerator, WebSocketGenerator @@ -52,12 +49,7 @@ async def test_ea_warning_ignore( issue = i assert issue is not None - url = RepairsFlowIndexView.url - resp = await client.post( - url, json={"handler": DOMAIN, "issue_id": "ea_channel_warning"} - ) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(client, DOMAIN, "ea_channel_warning") flow_id = data["flow_id"] assert data["description_placeholders"] == { @@ -66,10 +58,7 @@ async def test_ea_warning_ignore( } assert data["step_id"] == "start" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id) flow_id = data["flow_id"] assert data["description_placeholders"] == { @@ -78,10 +67,7 @@ async def test_ea_warning_ignore( } assert data["step_id"] == "confirm" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id) assert data["type"] == "create_entry" @@ -114,12 +100,7 @@ async def test_ea_warning_fix( issue = i assert issue is not None - url = RepairsFlowIndexView.url - resp = await client.post( - url, json={"handler": DOMAIN, "issue_id": "ea_channel_warning"} - ) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(client, DOMAIN, "ea_channel_warning") flow_id = data["flow_id"] assert data["description_placeholders"] == { @@ -139,10 +120,7 @@ async def test_ea_warning_fix( ufp.ws_msg(mock_msg) await hass.async_block_till_done() - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id) assert data["type"] == "create_entry" @@ -176,18 +154,12 @@ async def test_cloud_user_fix( issue = i assert issue is not None - url = RepairsFlowIndexView.url - resp = await client.post(url, json={"handler": DOMAIN, "issue_id": "cloud_user"}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(client, DOMAIN, "cloud_user") flow_id = data["flow_id"] assert data["step_id"] == "confirm" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id) assert data["type"] == "create_entry" await hass.async_block_till_done() @@ -228,26 +200,17 @@ async def test_rtsp_read_only_ignore( issue = i assert issue is not None - url = RepairsFlowIndexView.url - resp = await client.post(url, json={"handler": DOMAIN, "issue_id": issue_id}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(client, DOMAIN, issue_id) flow_id = data["flow_id"] assert data["step_id"] == "start" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id) flow_id = data["flow_id"] assert data["step_id"] == "confirm" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id) assert data["type"] == "create_entry" @@ -287,18 +250,12 @@ async def test_rtsp_read_only_fix( issue = i assert issue is not None - url = RepairsFlowIndexView.url - resp = await client.post(url, json={"handler": DOMAIN, "issue_id": issue_id}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(client, DOMAIN, issue_id) flow_id = data["flow_id"] assert data["step_id"] == "start" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id) assert data["type"] == "create_entry" @@ -337,18 +294,12 @@ async def test_rtsp_writable_fix( issue = i assert issue is not None - url = RepairsFlowIndexView.url - resp = await client.post(url, json={"handler": DOMAIN, "issue_id": issue_id}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(client, DOMAIN, issue_id) flow_id = data["flow_id"] assert data["step_id"] == "start" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id) assert data["type"] == "create_entry" @@ -398,18 +349,12 @@ async def test_rtsp_writable_fix_when_not_setup( await hass.config_entries.async_unload(ufp.entry.entry_id) await hass.async_block_till_done() - url = RepairsFlowIndexView.url - resp = await client.post(url, json={"handler": DOMAIN, "issue_id": issue_id}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(client, DOMAIN, issue_id) flow_id = data["flow_id"] assert data["step_id"] == "start" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id) assert data["type"] == "create_entry" diff --git a/tests/components/workday/test_repairs.py b/tests/components/workday/test_repairs.py index 60a55e1a347a2..e25d4e0ca4526 100644 --- a/tests/components/workday/test_repairs.py +++ b/tests/components/workday/test_repairs.py @@ -2,12 +2,6 @@ from __future__ import annotations -from http import HTTPStatus - -from homeassistant.components.repairs.websocket_api import ( - RepairsFlowIndexView, - RepairsFlowResourceView, -) from homeassistant.components.workday.const import CONF_REMOVE_HOLIDAYS, DOMAIN from homeassistant.const import CONF_COUNTRY from homeassistant.core import HomeAssistant @@ -23,6 +17,7 @@ ) from tests.common import ANY +from tests.components.repairs import process_repair_fix_flow, start_repair_fix_flow from tests.typing import ClientSessionGenerator, WebSocketGenerator @@ -52,24 +47,15 @@ async def test_bad_country( issue = i assert issue is not None - url = RepairsFlowIndexView.url - resp = await client.post(url, json={"handler": DOMAIN, "issue_id": "bad_country"}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(client, DOMAIN, "bad_country") flow_id = data["flow_id"] assert data["description_placeholders"] == {"title": entry.title} assert data["step_id"] == "country" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url, json={"country": "DE"}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id, json={"country": "DE"}) - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url, json={"province": "HB"}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id, json={"province": "HB"}) assert data["type"] == "create_entry" await hass.async_block_till_done() @@ -114,24 +100,15 @@ async def test_bad_country_none( issue = i assert issue is not None - url = RepairsFlowIndexView.url - resp = await client.post(url, json={"handler": DOMAIN, "issue_id": "bad_country"}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(client, DOMAIN, "bad_country") flow_id = data["flow_id"] assert data["description_placeholders"] == {"title": entry.title} assert data["step_id"] == "country" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url, json={"country": "DE"}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id, json={"country": "DE"}) - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url, json={}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id, json={}) assert data["type"] == "create_entry" await hass.async_block_till_done() @@ -176,19 +153,13 @@ async def test_bad_country_no_province( issue = i assert issue is not None - url = RepairsFlowIndexView.url - resp = await client.post(url, json={"handler": DOMAIN, "issue_id": "bad_country"}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(client, DOMAIN, "bad_country") flow_id = data["flow_id"] assert data["description_placeholders"] == {"title": entry.title} assert data["step_id"] == "country" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url, json={"country": "SE"}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id, json={"country": "SE"}) assert data["type"] == "create_entry" await hass.async_block_till_done() @@ -233,10 +204,7 @@ async def test_bad_province( issue = i assert issue is not None - url = RepairsFlowIndexView.url - resp = await client.post(url, json={"handler": DOMAIN, "issue_id": "bad_province"}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(client, DOMAIN, "bad_province") flow_id = data["flow_id"] assert data["description_placeholders"] == { @@ -245,10 +213,7 @@ async def test_bad_province( } assert data["step_id"] == "province" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url, json={"province": "BW"}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id, json={"province": "BW"}) assert data["type"] == "create_entry" await hass.async_block_till_done() @@ -293,10 +258,7 @@ async def test_bad_province_none( issue = i assert issue is not None - url = RepairsFlowIndexView.url - resp = await client.post(url, json={"handler": DOMAIN, "issue_id": "bad_province"}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(client, DOMAIN, "bad_province") flow_id = data["flow_id"] assert data["description_placeholders"] == { @@ -305,10 +267,7 @@ async def test_bad_province_none( } assert data["step_id"] == "province" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url, json={}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id, json={}) assert data["type"] == "create_entry" await hass.async_block_till_done() @@ -359,13 +318,9 @@ async def test_bad_named_holiday( issue = i assert issue is not None - url = RepairsFlowIndexView.url - resp = await client.post( - url, - json={"handler": DOMAIN, "issue_id": "bad_named_holiday-1-not_a_holiday"}, + data = await start_repair_fix_flow( + client, DOMAIN, "bad_named_holiday-1-not_a_holiday" ) - assert resp.status == HTTPStatus.OK - data = await resp.json() flow_id = data["flow_id"] assert data["description_placeholders"] == { @@ -375,23 +330,17 @@ async def test_bad_named_holiday( } assert data["step_id"] == "fix_remove_holiday" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post( - url, json={"remove_holidays": ["Christmas", "Not exist 2"]} + data = await process_repair_fix_flow( + client, flow_id, json={"remove_holidays": ["Christmas", "Not exist 2"]} ) - assert resp.status == HTTPStatus.OK - data = await resp.json() assert data["errors"] == { CONF_REMOVE_HOLIDAYS: "remove_holiday_error", } - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post( - url, json={"remove_holidays": ["Christmas", "Thanksgiving"]} + data = await process_repair_fix_flow( + client, flow_id, json={"remove_holidays": ["Christmas", "Thanksgiving"]} ) - assert resp.status == HTTPStatus.OK - data = await resp.json() assert data["type"] == "create_entry" await hass.async_block_till_done() @@ -442,13 +391,7 @@ async def test_bad_date_holiday( issue = i assert issue is not None - url = RepairsFlowIndexView.url - resp = await client.post( - url, - json={"handler": DOMAIN, "issue_id": "bad_date_holiday-1-2024_02_05"}, - ) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(client, DOMAIN, "bad_date_holiday-1-2024_02_05") flow_id = data["flow_id"] assert data["description_placeholders"] == { @@ -458,10 +401,9 @@ async def test_bad_date_holiday( } assert data["step_id"] == "fix_remove_holiday" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url, json={"remove_holidays": ["2024-02-06"]}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow( + client, flow_id, json={"remove_holidays": ["2024-02-06"]} + ) assert data["type"] == "create_entry" await hass.async_block_till_done() @@ -543,18 +485,12 @@ async def test_other_fixable_issues( "ignored": False, } in results - url = RepairsFlowIndexView.url - resp = await client.post(url, json={"handler": DOMAIN, "issue_id": "issue_1"}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(client, DOMAIN, "issue_1") flow_id = data["flow_id"] assert data["step_id"] == "confirm" - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await client.post(url) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(client, flow_id) assert data["type"] == "create_entry" await hass.async_block_till_done() diff --git a/tests/components/zwave_js/test_repairs.py b/tests/components/zwave_js/test_repairs.py index c103a06c5fa35..2f10b70b48a48 100644 --- a/tests/components/zwave_js/test_repairs.py +++ b/tests/components/zwave_js/test_repairs.py @@ -1,25 +1,22 @@ """Test the Z-Wave JS repairs module.""" from copy import deepcopy -from http import HTTPStatus from unittest.mock import patch from zwave_js_server.event import Event from zwave_js_server.model.node import Node -from homeassistant.components.repairs.issue_handler import ( - async_process_repairs_platforms, -) -from homeassistant.components.repairs.websocket_api import ( - RepairsFlowIndexView, - RepairsFlowResourceView, -) from homeassistant.components.zwave_js import DOMAIN from homeassistant.components.zwave_js.helpers import get_device_id from homeassistant.core import HomeAssistant import homeassistant.helpers.device_registry as dr import homeassistant.helpers.issue_registry as ir +from tests.components.repairs import ( + async_process_repairs_platforms, + process_repair_fix_flow, + start_repair_fix_flow, +) from tests.typing import ClientSessionGenerator, WebSocketGenerator @@ -84,30 +81,21 @@ async def test_device_config_file_changed_confirm_step( assert issue["issue_id"] == issue_id assert issue["translation_placeholders"] == {"device_name": device.name} - url = RepairsFlowIndexView.url - resp = await http_client.post(url, json={"handler": DOMAIN, "issue_id": issue_id}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(http_client, DOMAIN, issue_id) flow_id = data["flow_id"] assert data["step_id"] == "init" assert data["description_placeholders"] == {"device_name": device.name} - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - # Show menu - resp = await http_client.post(url) - - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(http_client, flow_id) assert data["type"] == "menu" # Apply fix - resp = await http_client.post(url, json={"next_step_id": "confirm"}) - - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow( + http_client, flow_id, json={"next_step_id": "confirm"} + ) assert data["type"] == "create_entry" @@ -159,30 +147,21 @@ async def test_device_config_file_changed_ignore_step( assert issue["issue_id"] == issue_id assert issue["translation_placeholders"] == {"device_name": device.name} - url = RepairsFlowIndexView.url - resp = await http_client.post(url, json={"handler": DOMAIN, "issue_id": issue_id}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(http_client, DOMAIN, issue_id) flow_id = data["flow_id"] assert data["step_id"] == "init" assert data["description_placeholders"] == {"device_name": device.name} - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - # Show menu - resp = await http_client.post(url) - - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(http_client, flow_id) assert data["type"] == "menu" # Ignore the issue - resp = await http_client.post(url, json={"next_step_id": "ignore"}) - - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow( + http_client, flow_id, json={"next_step_id": "ignore"} + ) assert data["type"] == "abort" assert data["reason"] == "issue_ignored" @@ -228,22 +207,13 @@ async def test_invalid_issue( issue = msg["result"]["issues"][0] assert issue["issue_id"] == "invalid_issue_id" - url = RepairsFlowIndexView.url - resp = await http_client.post( - url, json={"handler": DOMAIN, "issue_id": "invalid_issue_id"} - ) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(http_client, DOMAIN, "invalid_issue_id") flow_id = data["flow_id"] assert data["step_id"] == "confirm" # Apply fix - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await http_client.post(url) - - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow(http_client, flow_id) assert data["type"] == "create_entry" @@ -278,10 +248,7 @@ async def test_abort_confirm( await hass_ws_client(hass) http_client = await hass_client() - url = RepairsFlowIndexView.url - resp = await http_client.post(url, json={"handler": DOMAIN, "issue_id": issue_id}) - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await start_repair_fix_flow(http_client, DOMAIN, issue_id) flow_id = data["flow_id"] assert data["step_id"] == "init" @@ -290,11 +257,9 @@ async def test_abort_confirm( await hass.config_entries.async_unload(integration.entry_id) # Apply fix - url = RepairsFlowResourceView.url.format(flow_id=flow_id) - resp = await http_client.post(url, json={"next_step_id": "confirm"}) - - assert resp.status == HTTPStatus.OK - data = await resp.json() + data = await process_repair_fix_flow( + http_client, flow_id, json={"next_step_id": "confirm"} + ) assert data["type"] == "abort" assert data["reason"] == "cannot_connect"