core/tests/components/matter/test_api.py

188 lines
5.5 KiB
Python

"""Test the api module."""
from unittest.mock import MagicMock, call
from matter_server.common.errors import InvalidCommand, NodeCommissionFailed
import pytest
from homeassistant.components.matter.api import ID, TYPE
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry
from tests.typing import WebSocketGenerator
# This tests needs to be adjusted to remove lingering tasks
@pytest.mark.parametrize("expected_lingering_tasks", [True])
async def test_commission(
hass: HomeAssistant,
hass_ws_client: WebSocketGenerator,
matter_client: MagicMock,
integration: MockConfigEntry,
) -> None:
"""Test the commission command."""
ws_client = await hass_ws_client(hass)
await ws_client.send_json(
{
ID: 1,
TYPE: "matter/commission",
"code": "12345678",
}
)
msg = await ws_client.receive_json()
assert msg["success"]
matter_client.commission_with_code.assert_called_once_with("12345678")
matter_client.commission_with_code.reset_mock()
matter_client.commission_with_code.side_effect = InvalidCommand(
"test_id", "9", "Failed to commission"
)
await ws_client.send_json(
{
ID: 2,
TYPE: "matter/commission",
"code": "12345678",
}
)
msg = await ws_client.receive_json()
assert not msg["success"]
assert msg["error"]["code"] == "9"
matter_client.commission_with_code.assert_called_once_with("12345678")
# This tests needs to be adjusted to remove lingering tasks
@pytest.mark.parametrize("expected_lingering_tasks", [True])
async def test_commission_on_network(
hass: HomeAssistant,
hass_ws_client: WebSocketGenerator,
matter_client: MagicMock,
integration: MockConfigEntry,
) -> None:
"""Test the commission on network command."""
ws_client = await hass_ws_client(hass)
await ws_client.send_json(
{
ID: 1,
TYPE: "matter/commission_on_network",
"pin": 1234,
}
)
msg = await ws_client.receive_json()
assert msg["success"]
matter_client.commission_on_network.assert_called_once_with(1234)
matter_client.commission_on_network.reset_mock()
matter_client.commission_on_network.side_effect = NodeCommissionFailed(
"test_id", "1", "Failed to commission on network"
)
await ws_client.send_json(
{
ID: 2,
TYPE: "matter/commission_on_network",
"pin": 1234,
}
)
msg = await ws_client.receive_json()
assert not msg["success"]
assert msg["error"]["code"] == "1"
matter_client.commission_on_network.assert_called_once_with(1234)
# This tests needs to be adjusted to remove lingering tasks
@pytest.mark.parametrize("expected_lingering_tasks", [True])
async def test_set_thread_dataset(
hass: HomeAssistant,
hass_ws_client: WebSocketGenerator,
matter_client: MagicMock,
integration: MockConfigEntry,
) -> None:
"""Test the set thread dataset command."""
ws_client = await hass_ws_client(hass)
await ws_client.send_json(
{
ID: 1,
TYPE: "matter/set_thread",
"thread_operation_dataset": "test_dataset",
}
)
msg = await ws_client.receive_json()
assert msg["success"]
matter_client.set_thread_operational_dataset.assert_called_once_with("test_dataset")
matter_client.set_thread_operational_dataset.reset_mock()
matter_client.set_thread_operational_dataset.side_effect = NodeCommissionFailed(
"test_id", "1", "Failed to commission"
)
await ws_client.send_json(
{
ID: 2,
TYPE: "matter/set_thread",
"thread_operation_dataset": "test_dataset",
}
)
msg = await ws_client.receive_json()
assert not msg["success"]
assert msg["error"]["code"] == "1"
matter_client.set_thread_operational_dataset.assert_called_once_with("test_dataset")
# This tests needs to be adjusted to remove lingering tasks
@pytest.mark.parametrize("expected_lingering_tasks", [True])
async def test_set_wifi_credentials(
hass: HomeAssistant,
hass_ws_client: WebSocketGenerator,
matter_client: MagicMock,
integration: MockConfigEntry,
) -> None:
"""Test the set WiFi credentials command."""
ws_client = await hass_ws_client(hass)
await ws_client.send_json(
{
ID: 1,
TYPE: "matter/set_wifi_credentials",
"network_name": "test_network",
"password": "test_password",
}
)
msg = await ws_client.receive_json()
assert msg["success"]
assert matter_client.set_wifi_credentials.call_count == 1
assert matter_client.set_wifi_credentials.call_args == call(
ssid="test_network", credentials="test_password"
)
matter_client.set_wifi_credentials.reset_mock()
matter_client.set_wifi_credentials.side_effect = NodeCommissionFailed(
"test_id", "1", "Failed to commission on network"
)
await ws_client.send_json(
{
ID: 2,
TYPE: "matter/set_wifi_credentials",
"network_name": "test_network",
"password": "test_password",
}
)
msg = await ws_client.receive_json()
assert not msg["success"]
assert msg["error"]["code"] == "1"
assert matter_client.set_wifi_credentials.call_count == 1
assert matter_client.set_wifi_credentials.call_args == call(
ssid="test_network", credentials="test_password"
)