Files
core/tests/components/mikrotik/__init__.py
T

143 lines
5.2 KiB
Python

"""Tests for the Mikrotik integration."""
from typing import Any
from unittest.mock import patch
from homeassistant.components import mikrotik
from homeassistant.core import HomeAssistant
from .const import (
ARP_DATA,
DHCP_DATA,
HEALTH_DATA,
MOCK_DATA,
ROUTERBOARD_DATA,
SYSTEM_DATA,
UPDATE_DATA,
WIFIWAVE2_DATA,
WIRELESS_DATA,
)
from tests.common import MockConfigEntry
def _build_command_responses(
*,
support_capsman: bool,
support_wireless: bool,
support_wifiwave2: bool,
support_wifi: bool,
dhcp_data: list[dict[str, Any]],
capsman_data: list[dict[str, Any]],
wireless_data: list[dict[str, Any]],
wifiwave2_data: list[dict[str, Any]],
wifi_data: list[dict[str, Any]],
health_data: list[dict[str, Any]],
system_data: list[dict[str, Any]],
interface_data: list[dict[str, Any]],
routerboard_data: list[dict[str, Any]],
update_data: list[dict[str, Any]],
poe_data: list[dict[str, Any]],
ping_data: list[dict[str, Any]],
) -> dict[str, Any]:
"""Build mocked service responses for the Mikrotik coordinator."""
return {
mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.IDENTITY]: [
{"name": "Mikrotik"}
],
mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.ROUTERBOARD]: routerboard_data,
mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.IS_CAPSMAN]: support_capsman,
mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.IS_WIRELESS]: support_wireless,
mikrotik.const.MIKROTIK_SERVICES[
mikrotik.const.IS_WIFIWAVE2
]: support_wifiwave2,
mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.IS_WIFI]: support_wifi,
mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.DHCP]: dhcp_data,
mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.CAPSMAN]: capsman_data,
mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.WIRELESS]: wireless_data,
mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.WIFIWAVE2]: wifiwave2_data,
mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.WIFI]: wifi_data,
mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.ARP]: ARP_DATA,
mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.HEALTH]: health_data,
mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.RESOURCE]: system_data,
mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.INTERFACE]: interface_data,
mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.UPDATE]: update_data,
mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.POE]: poe_data,
mikrotik.const.MIKROTIK_SERVICES[mikrotik.const.PING]: ping_data,
}
async def setup_integration(
hass: HomeAssistant,
config_entry: MockConfigEntry,
*,
command_responses: dict[str, Any],
) -> None:
"""Set up the component with mocked Mikrotik command responses."""
config_entry.add_to_hass(hass)
def mock_command(
self,
cmd: str,
params: dict[str, Any] | None = None,
suppress_errors: bool = False,
during_setup: bool = False,
) -> Any:
return command_responses.get(cmd, {})
with patch.object(mikrotik.coordinator.MikrotikData, "command", new=mock_command):
assert await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
def create_mock_config_entry(
*,
data: dict[str, Any] | None = None,
options: dict[str, Any] | None = None,
domain: str = mikrotik.const.DOMAIN,
) -> MockConfigEntry:
"""Create a Mikrotik test config entry with optional overrides."""
return MockConfigEntry(
domain=domain,
data=data or MOCK_DATA,
options=options or {},
version=1,
minor_version=1,
)
async def setup_mikrotik_entry(
hass: HomeAssistant,
**kwargs: Any,
) -> MockConfigEntry:
"""Set up a Mikrotik config entry with defaults that tests can override."""
options = dict(kwargs.get("options", {}))
if "force_dhcp" in kwargs:
options["force_dhcp"] = True
if "arp_ping" in kwargs:
options["arp_ping"] = True
config_entry = create_mock_config_entry(options=options)
command_responses = _build_command_responses(
support_capsman=kwargs.get("support_capsman", False),
support_wireless=kwargs.get("support_wireless", True),
support_wifiwave2=kwargs.get("support_wifiwave2", False),
support_wifi=kwargs.get("support_wifi", False),
dhcp_data=kwargs.get("dhcp_data", DHCP_DATA),
capsman_data=kwargs.get("capsman_data", []),
wireless_data=kwargs.get("wireless_data", WIRELESS_DATA),
wifiwave2_data=kwargs.get("wifiwave2_data", WIFIWAVE2_DATA),
wifi_data=kwargs.get("wifi_data", []),
health_data=kwargs.get("health_data", HEALTH_DATA),
system_data=kwargs.get("system_data", SYSTEM_DATA),
interface_data=kwargs.get("interface_data", []),
routerboard_data=kwargs.get("routerboard_data", ROUTERBOARD_DATA),
update_data=kwargs.get("update_data", UPDATE_DATA),
poe_data=kwargs.get("poe_data", []),
ping_data=kwargs.get("ping_data", []),
)
await setup_integration(hass, config_entry, command_responses=command_responses)
return config_entry