Add helper functions for repair tests (#125886)
* Expose repairs constants and function for other components * Reorder * Use helper methods * Adjust core_files * Improve * Update test_migrate.py
This commit is contained in:
parent
3eed5de367
commit
6d212ea24e
13 changed files with 150 additions and 360 deletions
|
@ -126,9 +126,11 @@ tests: &tests
|
||||||
- tests/*.py
|
- tests/*.py
|
||||||
- tests/auth/**
|
- tests/auth/**
|
||||||
- tests/backports/**
|
- tests/backports/**
|
||||||
|
- tests/components/diagnostics/**
|
||||||
- tests/components/history/**
|
- tests/components/history/**
|
||||||
- tests/components/logbook/**
|
- tests/components/logbook/**
|
||||||
- tests/components/recorder/**
|
- tests/components/recorder/**
|
||||||
|
- tests/components/repairs/**
|
||||||
- tests/components/sensor/**
|
- tests/components/sensor/**
|
||||||
- tests/hassfest/**
|
- tests/hassfest/**
|
||||||
- tests/helpers/**
|
- tests/helpers/**
|
||||||
|
|
|
@ -2,16 +2,7 @@
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from http import HTTPStatus
|
|
||||||
|
|
||||||
from homeassistant.components.doorbird.const import DOMAIN
|
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.config_entries import ConfigEntryState
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers import issue_registry as ir
|
from homeassistant.helpers import issue_registry as ir
|
||||||
|
@ -20,6 +11,11 @@ from homeassistant.setup import async_setup_component
|
||||||
from . import mock_not_found_exception
|
from . import mock_not_found_exception
|
||||||
from .conftest import DoorbirdMockerType
|
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
|
from tests.typing import ClientSessionGenerator
|
||||||
|
|
||||||
|
|
||||||
|
@ -43,19 +39,13 @@ async def test_change_schedule_fails(
|
||||||
await async_process_repairs_platforms(hass)
|
await async_process_repairs_platforms(hass)
|
||||||
client = await hass_client()
|
client = await hass_client()
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(client, DOMAIN, issue_id)
|
||||||
resp = await client.post(url, json={"handler": DOMAIN, "issue_id": issue_id})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
placeholders = data["description_placeholders"]
|
placeholders = data["description_placeholders"]
|
||||||
assert "404" in placeholders["error"]
|
assert "404" in placeholders["error"]
|
||||||
assert data["step_id"] == "confirm"
|
assert data["step_id"] == "confirm"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id)
|
||||||
resp = await client.post(url)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
|
|
|
@ -1,22 +1,19 @@
|
||||||
"""Test repairs for Ecobee integration."""
|
"""Test repairs for Ecobee integration."""
|
||||||
|
|
||||||
from http import HTTPStatus
|
|
||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock
|
||||||
|
|
||||||
from homeassistant.components.ecobee import DOMAIN
|
from homeassistant.components.ecobee import DOMAIN
|
||||||
from homeassistant.components.notify import DOMAIN as NOTIFY_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.core import HomeAssistant
|
||||||
from homeassistant.helpers import issue_registry as ir
|
from homeassistant.helpers import issue_registry as ir
|
||||||
|
|
||||||
from .common import setup_platform
|
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
|
from tests.typing import ClientSessionGenerator
|
||||||
|
|
||||||
THERMOSTAT_ID = 0
|
THERMOSTAT_ID = 0
|
||||||
|
@ -53,20 +50,14 @@ async def test_ecobee_notify_repair_flow(
|
||||||
)
|
)
|
||||||
assert len(issue_registry.issues) == 1
|
assert len(issue_registry.issues) == 1
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(
|
||||||
resp = await http_client.post(
|
http_client, "notify", f"migrate_notify_{DOMAIN}_{DOMAIN}"
|
||||||
url, json={"handler": "notify", "issue_id": f"migrate_notify_{DOMAIN}_{DOMAIN}"}
|
|
||||||
)
|
)
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["step_id"] == "confirm"
|
assert data["step_id"] == "confirm"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(http_client, flow_id)
|
||||||
resp = await http_client.post(url)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
# Test confirm step in repair flow
|
# Test confirm step in repair flow
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
|
@ -1,19 +1,15 @@
|
||||||
"""Test the Homeassistant repairs module."""
|
"""Test the Homeassistant repairs module."""
|
||||||
|
|
||||||
from http import HTTPStatus
|
|
||||||
|
|
||||||
from homeassistant.components.repairs import DOMAIN as REPAIRS_DOMAIN
|
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.core import DOMAIN as HOMEASSISTANT_DOMAIN, HomeAssistant
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
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
|
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["issue_id"] == issue_id
|
||||||
assert issue["translation_placeholders"] == {"domain": "test1"}
|
assert issue["translation_placeholders"] == {"domain": "test1"}
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(http_client, HOMEASSISTANT_DOMAIN, issue_id)
|
||||||
resp = await http_client.post(
|
|
||||||
url, json={"handler": HOMEASSISTANT_DOMAIN, "issue_id": issue_id}
|
|
||||||
)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["step_id"] == "init"
|
assert data["step_id"] == "init"
|
||||||
assert data["description_placeholders"] == {"domain": "test1"}
|
assert data["description_placeholders"] == {"domain": "test1"}
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(http_client, flow_id)
|
||||||
|
|
||||||
# Show menu
|
|
||||||
resp = await http_client.post(url)
|
|
||||||
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "menu"
|
assert data["type"] == "menu"
|
||||||
|
|
||||||
# Apply fix
|
# Apply fix
|
||||||
resp = await http_client.post(url, json={"next_step_id": "confirm"})
|
data = await process_repair_fix_flow(
|
||||||
|
http_client, flow_id, json={"next_step_id": "confirm"}
|
||||||
assert resp.status == HTTPStatus.OK
|
)
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
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["issue_id"] == issue_id
|
||||||
assert issue["translation_placeholders"] == {"domain": "test1"}
|
assert issue["translation_placeholders"] == {"domain": "test1"}
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(http_client, HOMEASSISTANT_DOMAIN, issue_id)
|
||||||
resp = await http_client.post(
|
|
||||||
url, json={"handler": HOMEASSISTANT_DOMAIN, "issue_id": issue_id}
|
|
||||||
)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["step_id"] == "init"
|
assert data["step_id"] == "init"
|
||||||
assert data["description_placeholders"] == {"domain": "test1"}
|
assert data["description_placeholders"] == {"domain": "test1"}
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
|
||||||
|
|
||||||
# Show menu
|
# Show menu
|
||||||
resp = await http_client.post(url)
|
data = await process_repair_fix_flow(http_client, flow_id)
|
||||||
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "menu"
|
assert data["type"] == "menu"
|
||||||
|
|
||||||
# Apply fix
|
# Apply fix
|
||||||
resp = await http_client.post(url, json={"next_step_id": "ignore"})
|
data = await process_repair_fix_flow(
|
||||||
|
http_client, flow_id, json={"next_step_id": "ignore"}
|
||||||
assert resp.status == HTTPStatus.OK
|
)
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "abort"
|
assert data["type"] == "abort"
|
||||||
assert data["reason"] == "issue_ignored"
|
assert data["reason"] == "issue_ignored"
|
||||||
|
|
|
@ -1,20 +1,15 @@
|
||||||
"""Test repairs for KNX integration."""
|
"""Test repairs for KNX integration."""
|
||||||
|
|
||||||
from http import HTTPStatus
|
|
||||||
|
|
||||||
from homeassistant.components.knx.const import DOMAIN, KNX_ADDRESS
|
from homeassistant.components.knx.const import DOMAIN, KNX_ADDRESS
|
||||||
from homeassistant.components.knx.schema import NotifySchema
|
from homeassistant.components.knx.schema import NotifySchema
|
||||||
from homeassistant.components.notify import DOMAIN as NOTIFY_DOMAIN
|
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.const import CONF_NAME
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
import homeassistant.helpers.issue_registry as ir
|
import homeassistant.helpers.issue_registry as ir
|
||||||
|
|
||||||
from .conftest import KNXTestKit
|
from .conftest import KNXTestKit
|
||||||
|
|
||||||
|
from tests.components.repairs import process_repair_fix_flow, start_repair_fix_flow
|
||||||
from tests.typing import ClientSessionGenerator
|
from tests.typing import ClientSessionGenerator
|
||||||
|
|
||||||
|
|
||||||
|
@ -59,21 +54,14 @@ async def test_knx_notify_service_issue(
|
||||||
)
|
)
|
||||||
|
|
||||||
# Test confirm step in repair flow
|
# Test confirm step in repair flow
|
||||||
resp = await http_client.post(
|
data = await start_repair_fix_flow(
|
||||||
RepairsFlowIndexView.url,
|
http_client, "notify", f"migrate_notify_{DOMAIN}_notify"
|
||||||
json={"handler": "notify", "issue_id": f"migrate_notify_{DOMAIN}_notify"},
|
|
||||||
)
|
)
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["step_id"] == "confirm"
|
assert data["step_id"] == "confirm"
|
||||||
|
|
||||||
resp = await http_client.post(
|
data = await process_repair_fix_flow(http_client, flow_id)
|
||||||
RepairsFlowResourceView.url.format(flow_id=flow_id),
|
|
||||||
)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
|
|
||||||
# Assert the issue is no longer present
|
# Assert the issue is no longer present
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
"""Test repairs for notify entity component."""
|
"""Test repairs for notify entity component."""
|
||||||
|
|
||||||
from http import HTTPStatus
|
|
||||||
from unittest.mock import AsyncMock
|
from unittest.mock import AsyncMock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -9,18 +8,16 @@ from homeassistant.components.notify import (
|
||||||
DOMAIN as NOTIFY_DOMAIN,
|
DOMAIN as NOTIFY_DOMAIN,
|
||||||
migrate_notify_issue,
|
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.core import HomeAssistant
|
||||||
from homeassistant.helpers import issue_registry as ir
|
from homeassistant.helpers import issue_registry as ir
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
from tests.common import MockConfigEntry, MockModule, mock_integration
|
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
|
from tests.typing import ClientSessionGenerator
|
||||||
|
|
||||||
THERMOSTAT_ID = 0
|
THERMOSTAT_ID = 0
|
||||||
|
@ -66,20 +63,12 @@ async def test_notify_migration_repair_flow(
|
||||||
)
|
)
|
||||||
assert len(issue_registry.issues) == 1
|
assert len(issue_registry.issues) == 1
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(http_client, NOTIFY_DOMAIN, translation_key)
|
||||||
resp = await http_client.post(
|
|
||||||
url, json={"handler": NOTIFY_DOMAIN, "issue_id": translation_key}
|
|
||||||
)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["step_id"] == "confirm"
|
assert data["step_id"] == "confirm"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(http_client, flow_id)
|
||||||
resp = await http_client.post(url)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
# Test confirm step in repair flow
|
# Test confirm step in repair flow
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
|
@ -1,5 +1,17 @@
|
||||||
"""Tests for the repairs integration."""
|
"""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.core import HomeAssistant
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
|
@ -27,3 +39,23 @@ async def get_repairs(
|
||||||
assert msg["result"]
|
assert msg["result"]
|
||||||
|
|
||||||
return msg["result"]["issues"]
|
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()
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
"""Tests for the seventeentrack repair flow."""
|
"""Tests for the seventeentrack repair flow."""
|
||||||
|
|
||||||
from http import HTTPStatus
|
|
||||||
from unittest.mock import AsyncMock
|
from unittest.mock import AsyncMock
|
||||||
|
|
||||||
from freezegun.api import FrozenDateTimeFactory
|
from freezegun.api import FrozenDateTimeFactory
|
||||||
|
|
||||||
from homeassistant.components.repairs import DOMAIN as REPAIRS_DOMAIN
|
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.components.seventeentrack import DOMAIN
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers import issue_registry as ir
|
from homeassistant.helpers import issue_registry as ir
|
||||||
|
@ -16,6 +14,7 @@ from . import goto_future, init_integration
|
||||||
from .conftest import DEFAULT_SUMMARY_LENGTH, get_package
|
from .conftest import DEFAULT_SUMMARY_LENGTH, get_package
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
|
from tests.components.repairs import process_repair_fix_flow, start_repair_fix_flow
|
||||||
from tests.typing import ClientSessionGenerator
|
from tests.typing import ClientSessionGenerator
|
||||||
|
|
||||||
|
|
||||||
|
@ -49,13 +48,7 @@ async def test_repair(
|
||||||
|
|
||||||
client = await hass_client()
|
client = await hass_client()
|
||||||
|
|
||||||
resp = await client.post(
|
data = await start_repair_fix_flow(client, DOMAIN, repair_issue.issue_id)
|
||||||
RepairsFlowIndexView.url,
|
|
||||||
json={"handler": DOMAIN, "issue_id": repair_issue.issue_id},
|
|
||||||
)
|
|
||||||
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data == {
|
assert data == {
|
||||||
|
@ -70,9 +63,7 @@ async def test_repair(
|
||||||
"preview": None,
|
"preview": None,
|
||||||
}
|
}
|
||||||
|
|
||||||
resp = await client.post(RepairsFlowIndexView.url + f"/{flow_id}")
|
data = await process_repair_fix_flow(client, flow_id)
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data == {
|
assert data == {
|
||||||
|
|
|
@ -1,16 +1,12 @@
|
||||||
"""Test loading of the Tibber config entry."""
|
"""Test loading of the Tibber config entry."""
|
||||||
|
|
||||||
from http import HTTPStatus
|
|
||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock
|
||||||
|
|
||||||
from homeassistant.components.recorder import Recorder
|
from homeassistant.components.recorder import Recorder
|
||||||
from homeassistant.components.repairs.websocket_api import (
|
|
||||||
RepairsFlowIndexView,
|
|
||||||
RepairsFlowResourceView,
|
|
||||||
)
|
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers import issue_registry as ir
|
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
|
from tests.typing import ClientSessionGenerator
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,21 +36,15 @@ async def test_repair_flow(
|
||||||
)
|
)
|
||||||
assert len(issue_registry.issues) == 1
|
assert len(issue_registry.issues) == 1
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(
|
||||||
resp = await http_client.post(
|
http_client, "notify", f"migrate_notify_tibber_{service}"
|
||||||
url, json={"handler": "notify", "issue_id": f"migrate_notify_tibber_{service}"}
|
|
||||||
)
|
)
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["step_id"] == "confirm"
|
assert data["step_id"] == "confirm"
|
||||||
|
|
||||||
# Simulate the users confirmed the repair flow
|
# Simulate the users confirmed the repair flow
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(http_client, flow_id)
|
||||||
resp = await http_client.post(url)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
|
|
@ -7,9 +7,6 @@ from unittest.mock import patch
|
||||||
from uiprotect.data import Camera
|
from uiprotect.data import Camera
|
||||||
|
|
||||||
from homeassistant.components.automation import DOMAIN as AUTOMATION_DOMAIN
|
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.script import DOMAIN as SCRIPT_DOMAIN
|
||||||
from homeassistant.components.unifiprotect.const import DOMAIN
|
from homeassistant.components.unifiprotect.const import DOMAIN
|
||||||
from homeassistant.const import SERVICE_RELOAD, Platform
|
from homeassistant.const import SERVICE_RELOAD, Platform
|
||||||
|
@ -19,6 +16,7 @@ from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
from .utils import MockUFPFixture, init_entry
|
from .utils import MockUFPFixture, init_entry
|
||||||
|
|
||||||
|
from tests.components.repairs import async_process_repairs_platforms
|
||||||
from tests.typing import WebSocketGenerator
|
from tests.typing import WebSocketGenerator
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,24 +3,21 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from copy import copy, deepcopy
|
from copy import copy, deepcopy
|
||||||
from http import HTTPStatus
|
|
||||||
from unittest.mock import AsyncMock, Mock
|
from unittest.mock import AsyncMock, Mock
|
||||||
|
|
||||||
from uiprotect.data import Camera, CloudAccount, ModelType, Version
|
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.components.unifiprotect.const import DOMAIN
|
||||||
from homeassistant.config_entries import SOURCE_REAUTH
|
from homeassistant.config_entries import SOURCE_REAUTH
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
from .utils import MockUFPFixture, init_entry
|
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
|
from tests.typing import ClientSessionGenerator, WebSocketGenerator
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,12 +49,7 @@ async def test_ea_warning_ignore(
|
||||||
issue = i
|
issue = i
|
||||||
assert issue is not None
|
assert issue is not None
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(client, DOMAIN, "ea_channel_warning")
|
||||||
resp = await client.post(
|
|
||||||
url, json={"handler": DOMAIN, "issue_id": "ea_channel_warning"}
|
|
||||||
)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["description_placeholders"] == {
|
assert data["description_placeholders"] == {
|
||||||
|
@ -66,10 +58,7 @@ async def test_ea_warning_ignore(
|
||||||
}
|
}
|
||||||
assert data["step_id"] == "start"
|
assert data["step_id"] == "start"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id)
|
||||||
resp = await client.post(url)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["description_placeholders"] == {
|
assert data["description_placeholders"] == {
|
||||||
|
@ -78,10 +67,7 @@ async def test_ea_warning_ignore(
|
||||||
}
|
}
|
||||||
assert data["step_id"] == "confirm"
|
assert data["step_id"] == "confirm"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id)
|
||||||
resp = await client.post(url)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
|
|
||||||
|
@ -114,12 +100,7 @@ async def test_ea_warning_fix(
|
||||||
issue = i
|
issue = i
|
||||||
assert issue is not None
|
assert issue is not None
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(client, DOMAIN, "ea_channel_warning")
|
||||||
resp = await client.post(
|
|
||||||
url, json={"handler": DOMAIN, "issue_id": "ea_channel_warning"}
|
|
||||||
)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["description_placeholders"] == {
|
assert data["description_placeholders"] == {
|
||||||
|
@ -139,10 +120,7 @@ async def test_ea_warning_fix(
|
||||||
ufp.ws_msg(mock_msg)
|
ufp.ws_msg(mock_msg)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id)
|
||||||
resp = await client.post(url)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
|
|
||||||
|
@ -176,18 +154,12 @@ async def test_cloud_user_fix(
|
||||||
issue = i
|
issue = i
|
||||||
assert issue is not None
|
assert issue is not None
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(client, DOMAIN, "cloud_user")
|
||||||
resp = await client.post(url, json={"handler": DOMAIN, "issue_id": "cloud_user"})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["step_id"] == "confirm"
|
assert data["step_id"] == "confirm"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id)
|
||||||
resp = await client.post(url)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@ -228,26 +200,17 @@ async def test_rtsp_read_only_ignore(
|
||||||
issue = i
|
issue = i
|
||||||
assert issue is not None
|
assert issue is not None
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(client, DOMAIN, issue_id)
|
||||||
resp = await client.post(url, json={"handler": DOMAIN, "issue_id": issue_id})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["step_id"] == "start"
|
assert data["step_id"] == "start"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id)
|
||||||
resp = await client.post(url)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["step_id"] == "confirm"
|
assert data["step_id"] == "confirm"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id)
|
||||||
resp = await client.post(url)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
|
|
||||||
|
@ -287,18 +250,12 @@ async def test_rtsp_read_only_fix(
|
||||||
issue = i
|
issue = i
|
||||||
assert issue is not None
|
assert issue is not None
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(client, DOMAIN, issue_id)
|
||||||
resp = await client.post(url, json={"handler": DOMAIN, "issue_id": issue_id})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["step_id"] == "start"
|
assert data["step_id"] == "start"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id)
|
||||||
resp = await client.post(url)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
|
|
||||||
|
@ -337,18 +294,12 @@ async def test_rtsp_writable_fix(
|
||||||
issue = i
|
issue = i
|
||||||
assert issue is not None
|
assert issue is not None
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(client, DOMAIN, issue_id)
|
||||||
resp = await client.post(url, json={"handler": DOMAIN, "issue_id": issue_id})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["step_id"] == "start"
|
assert data["step_id"] == "start"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id)
|
||||||
resp = await client.post(url)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
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.config_entries.async_unload(ufp.entry.entry_id)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(client, DOMAIN, issue_id)
|
||||||
resp = await client.post(url, json={"handler": DOMAIN, "issue_id": issue_id})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["step_id"] == "start"
|
assert data["step_id"] == "start"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id)
|
||||||
resp = await client.post(url)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
|
|
||||||
|
|
|
@ -2,12 +2,6 @@
|
||||||
|
|
||||||
from __future__ import annotations
|
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.components.workday.const import CONF_REMOVE_HOLIDAYS, DOMAIN
|
||||||
from homeassistant.const import CONF_COUNTRY
|
from homeassistant.const import CONF_COUNTRY
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
@ -23,6 +17,7 @@ from . import (
|
||||||
)
|
)
|
||||||
|
|
||||||
from tests.common import ANY
|
from tests.common import ANY
|
||||||
|
from tests.components.repairs import process_repair_fix_flow, start_repair_fix_flow
|
||||||
from tests.typing import ClientSessionGenerator, WebSocketGenerator
|
from tests.typing import ClientSessionGenerator, WebSocketGenerator
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,24 +47,15 @@ async def test_bad_country(
|
||||||
issue = i
|
issue = i
|
||||||
assert issue is not None
|
assert issue is not None
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(client, DOMAIN, "bad_country")
|
||||||
resp = await client.post(url, json={"handler": DOMAIN, "issue_id": "bad_country"})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["description_placeholders"] == {"title": entry.title}
|
assert data["description_placeholders"] == {"title": entry.title}
|
||||||
assert data["step_id"] == "country"
|
assert data["step_id"] == "country"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id, json={"country": "DE"})
|
||||||
resp = await client.post(url, json={"country": "DE"})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id, json={"province": "HB"})
|
||||||
resp = await client.post(url, json={"province": "HB"})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@ -114,24 +100,15 @@ async def test_bad_country_none(
|
||||||
issue = i
|
issue = i
|
||||||
assert issue is not None
|
assert issue is not None
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(client, DOMAIN, "bad_country")
|
||||||
resp = await client.post(url, json={"handler": DOMAIN, "issue_id": "bad_country"})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["description_placeholders"] == {"title": entry.title}
|
assert data["description_placeholders"] == {"title": entry.title}
|
||||||
assert data["step_id"] == "country"
|
assert data["step_id"] == "country"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id, json={"country": "DE"})
|
||||||
resp = await client.post(url, json={"country": "DE"})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id, json={})
|
||||||
resp = await client.post(url, json={})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@ -176,19 +153,13 @@ async def test_bad_country_no_province(
|
||||||
issue = i
|
issue = i
|
||||||
assert issue is not None
|
assert issue is not None
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(client, DOMAIN, "bad_country")
|
||||||
resp = await client.post(url, json={"handler": DOMAIN, "issue_id": "bad_country"})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["description_placeholders"] == {"title": entry.title}
|
assert data["description_placeholders"] == {"title": entry.title}
|
||||||
assert data["step_id"] == "country"
|
assert data["step_id"] == "country"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id, json={"country": "SE"})
|
||||||
resp = await client.post(url, json={"country": "SE"})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@ -233,10 +204,7 @@ async def test_bad_province(
|
||||||
issue = i
|
issue = i
|
||||||
assert issue is not None
|
assert issue is not None
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(client, DOMAIN, "bad_province")
|
||||||
resp = await client.post(url, json={"handler": DOMAIN, "issue_id": "bad_province"})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["description_placeholders"] == {
|
assert data["description_placeholders"] == {
|
||||||
|
@ -245,10 +213,7 @@ async def test_bad_province(
|
||||||
}
|
}
|
||||||
assert data["step_id"] == "province"
|
assert data["step_id"] == "province"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id, json={"province": "BW"})
|
||||||
resp = await client.post(url, json={"province": "BW"})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@ -293,10 +258,7 @@ async def test_bad_province_none(
|
||||||
issue = i
|
issue = i
|
||||||
assert issue is not None
|
assert issue is not None
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(client, DOMAIN, "bad_province")
|
||||||
resp = await client.post(url, json={"handler": DOMAIN, "issue_id": "bad_province"})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["description_placeholders"] == {
|
assert data["description_placeholders"] == {
|
||||||
|
@ -305,10 +267,7 @@ async def test_bad_province_none(
|
||||||
}
|
}
|
||||||
assert data["step_id"] == "province"
|
assert data["step_id"] == "province"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id, json={})
|
||||||
resp = await client.post(url, json={})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@ -359,13 +318,9 @@ async def test_bad_named_holiday(
|
||||||
issue = i
|
issue = i
|
||||||
assert issue is not None
|
assert issue is not None
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(
|
||||||
resp = await client.post(
|
client, DOMAIN, "bad_named_holiday-1-not_a_holiday"
|
||||||
url,
|
|
||||||
json={"handler": DOMAIN, "issue_id": "bad_named_holiday-1-not_a_holiday"},
|
|
||||||
)
|
)
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["description_placeholders"] == {
|
assert data["description_placeholders"] == {
|
||||||
|
@ -375,23 +330,17 @@ async def test_bad_named_holiday(
|
||||||
}
|
}
|
||||||
assert data["step_id"] == "fix_remove_holiday"
|
assert data["step_id"] == "fix_remove_holiday"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(
|
||||||
resp = await client.post(
|
client, flow_id, json={"remove_holidays": ["Christmas", "Not exist 2"]}
|
||||||
url, json={"remove_holidays": ["Christmas", "Not exist 2"]}
|
|
||||||
)
|
)
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["errors"] == {
|
assert data["errors"] == {
|
||||||
CONF_REMOVE_HOLIDAYS: "remove_holiday_error",
|
CONF_REMOVE_HOLIDAYS: "remove_holiday_error",
|
||||||
}
|
}
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(
|
||||||
resp = await client.post(
|
client, flow_id, json={"remove_holidays": ["Christmas", "Thanksgiving"]}
|
||||||
url, json={"remove_holidays": ["Christmas", "Thanksgiving"]}
|
|
||||||
)
|
)
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@ -442,13 +391,7 @@ async def test_bad_date_holiday(
|
||||||
issue = i
|
issue = i
|
||||||
assert issue is not None
|
assert issue is not None
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(client, DOMAIN, "bad_date_holiday-1-2024_02_05")
|
||||||
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()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["description_placeholders"] == {
|
assert data["description_placeholders"] == {
|
||||||
|
@ -458,10 +401,9 @@ async def test_bad_date_holiday(
|
||||||
}
|
}
|
||||||
assert data["step_id"] == "fix_remove_holiday"
|
assert data["step_id"] == "fix_remove_holiday"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(
|
||||||
resp = await client.post(url, json={"remove_holidays": ["2024-02-06"]})
|
client, flow_id, json={"remove_holidays": ["2024-02-06"]}
|
||||||
assert resp.status == HTTPStatus.OK
|
)
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@ -543,18 +485,12 @@ async def test_other_fixable_issues(
|
||||||
"ignored": False,
|
"ignored": False,
|
||||||
} in results
|
} in results
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(client, DOMAIN, "issue_1")
|
||||||
resp = await client.post(url, json={"handler": DOMAIN, "issue_id": "issue_1"})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["step_id"] == "confirm"
|
assert data["step_id"] == "confirm"
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(client, flow_id)
|
||||||
resp = await client.post(url)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
|
@ -1,25 +1,22 @@
|
||||||
"""Test the Z-Wave JS repairs module."""
|
"""Test the Z-Wave JS repairs module."""
|
||||||
|
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from http import HTTPStatus
|
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
from zwave_js_server.event import Event
|
from zwave_js_server.event import Event
|
||||||
from zwave_js_server.model.node import Node
|
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 import DOMAIN
|
||||||
from homeassistant.components.zwave_js.helpers import get_device_id
|
from homeassistant.components.zwave_js.helpers import get_device_id
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
import homeassistant.helpers.device_registry as dr
|
import homeassistant.helpers.device_registry as dr
|
||||||
import homeassistant.helpers.issue_registry as ir
|
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
|
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["issue_id"] == issue_id
|
||||||
assert issue["translation_placeholders"] == {"device_name": device.name}
|
assert issue["translation_placeholders"] == {"device_name": device.name}
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(http_client, DOMAIN, issue_id)
|
||||||
resp = await http_client.post(url, json={"handler": DOMAIN, "issue_id": issue_id})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["step_id"] == "init"
|
assert data["step_id"] == "init"
|
||||||
assert data["description_placeholders"] == {"device_name": device.name}
|
assert data["description_placeholders"] == {"device_name": device.name}
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
|
||||||
|
|
||||||
# Show menu
|
# Show menu
|
||||||
resp = await http_client.post(url)
|
data = await process_repair_fix_flow(http_client, flow_id)
|
||||||
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "menu"
|
assert data["type"] == "menu"
|
||||||
|
|
||||||
# Apply fix
|
# Apply fix
|
||||||
resp = await http_client.post(url, json={"next_step_id": "confirm"})
|
data = await process_repair_fix_flow(
|
||||||
|
http_client, flow_id, json={"next_step_id": "confirm"}
|
||||||
assert resp.status == HTTPStatus.OK
|
)
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
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["issue_id"] == issue_id
|
||||||
assert issue["translation_placeholders"] == {"device_name": device.name}
|
assert issue["translation_placeholders"] == {"device_name": device.name}
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(http_client, DOMAIN, issue_id)
|
||||||
resp = await http_client.post(url, json={"handler": DOMAIN, "issue_id": issue_id})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["step_id"] == "init"
|
assert data["step_id"] == "init"
|
||||||
assert data["description_placeholders"] == {"device_name": device.name}
|
assert data["description_placeholders"] == {"device_name": device.name}
|
||||||
|
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
|
||||||
|
|
||||||
# Show menu
|
# Show menu
|
||||||
resp = await http_client.post(url)
|
data = await process_repair_fix_flow(http_client, flow_id)
|
||||||
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "menu"
|
assert data["type"] == "menu"
|
||||||
|
|
||||||
# Ignore the issue
|
# Ignore the issue
|
||||||
resp = await http_client.post(url, json={"next_step_id": "ignore"})
|
data = await process_repair_fix_flow(
|
||||||
|
http_client, flow_id, json={"next_step_id": "ignore"}
|
||||||
assert resp.status == HTTPStatus.OK
|
)
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "abort"
|
assert data["type"] == "abort"
|
||||||
assert data["reason"] == "issue_ignored"
|
assert data["reason"] == "issue_ignored"
|
||||||
|
@ -228,22 +207,13 @@ async def test_invalid_issue(
|
||||||
issue = msg["result"]["issues"][0]
|
issue = msg["result"]["issues"][0]
|
||||||
assert issue["issue_id"] == "invalid_issue_id"
|
assert issue["issue_id"] == "invalid_issue_id"
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(http_client, DOMAIN, "invalid_issue_id")
|
||||||
resp = await http_client.post(
|
|
||||||
url, json={"handler": DOMAIN, "issue_id": "invalid_issue_id"}
|
|
||||||
)
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["step_id"] == "confirm"
|
assert data["step_id"] == "confirm"
|
||||||
|
|
||||||
# Apply fix
|
# Apply fix
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(http_client, flow_id)
|
||||||
resp = await http_client.post(url)
|
|
||||||
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "create_entry"
|
assert data["type"] == "create_entry"
|
||||||
|
|
||||||
|
@ -278,10 +248,7 @@ async def test_abort_confirm(
|
||||||
await hass_ws_client(hass)
|
await hass_ws_client(hass)
|
||||||
http_client = await hass_client()
|
http_client = await hass_client()
|
||||||
|
|
||||||
url = RepairsFlowIndexView.url
|
data = await start_repair_fix_flow(http_client, DOMAIN, issue_id)
|
||||||
resp = await http_client.post(url, json={"handler": DOMAIN, "issue_id": issue_id})
|
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
flow_id = data["flow_id"]
|
flow_id = data["flow_id"]
|
||||||
assert data["step_id"] == "init"
|
assert data["step_id"] == "init"
|
||||||
|
@ -290,11 +257,9 @@ async def test_abort_confirm(
|
||||||
await hass.config_entries.async_unload(integration.entry_id)
|
await hass.config_entries.async_unload(integration.entry_id)
|
||||||
|
|
||||||
# Apply fix
|
# Apply fix
|
||||||
url = RepairsFlowResourceView.url.format(flow_id=flow_id)
|
data = await process_repair_fix_flow(
|
||||||
resp = await http_client.post(url, json={"next_step_id": "confirm"})
|
http_client, flow_id, json={"next_step_id": "confirm"}
|
||||||
|
)
|
||||||
assert resp.status == HTTPStatus.OK
|
|
||||||
data = await resp.json()
|
|
||||||
|
|
||||||
assert data["type"] == "abort"
|
assert data["type"] == "abort"
|
||||||
assert data["reason"] == "cannot_connect"
|
assert data["reason"] == "cannot_connect"
|
||||||
|
|
Loading…
Add table
Reference in a new issue