Use async_load_fixture in tplink_omada tests (#146014)

This commit is contained in:
epenet 2025-06-03 10:54:22 +02:00 committed by GitHub
parent 54c20d5d5a
commit 03912a1704
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,6 +1,7 @@
"""Test fixtures for TP-Link Omada integration.""" """Test fixtures for TP-Link Omada integration."""
from collections.abc import AsyncIterable, Generator from collections.abc import AsyncGenerator, Generator
from functools import partial
import json import json
from unittest.mock import AsyncMock, MagicMock, patch from unittest.mock import AsyncMock, MagicMock, patch
@ -23,7 +24,7 @@ from homeassistant.components.tplink_omada.const import DOMAIN
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME, CONF_VERIFY_SSL from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME, CONF_VERIFY_SSL
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry, load_fixture from tests.common import MockConfigEntry, async_load_fixture
@pytest.fixture @pytest.fixture
@ -53,29 +54,33 @@ def mock_setup_entry() -> Generator[AsyncMock]:
@pytest.fixture @pytest.fixture
def mock_omada_site_client() -> Generator[AsyncMock]: async def mock_omada_site_client(hass: HomeAssistant) -> AsyncGenerator[AsyncMock]:
"""Mock Omada site client.""" """Mock Omada site client."""
site_client = MagicMock() site_client = MagicMock()
gateway_data = json.loads(load_fixture("gateway-TL-ER7212PC.json", DOMAIN)) gateway_data = json.loads(
await async_load_fixture(hass, "gateway-TL-ER7212PC.json", DOMAIN)
)
gateway = OmadaGateway(gateway_data) gateway = OmadaGateway(gateway_data)
site_client.get_gateway = AsyncMock(return_value=gateway) site_client.get_gateway = AsyncMock(return_value=gateway)
switch1_data = json.loads(load_fixture("switch-TL-SG3210XHP-M2.json", DOMAIN)) switch1_data = json.loads(
await async_load_fixture(hass, "switch-TL-SG3210XHP-M2.json", DOMAIN)
)
switch1 = OmadaSwitch(switch1_data) switch1 = OmadaSwitch(switch1_data)
site_client.get_switches = AsyncMock(return_value=[switch1]) site_client.get_switches = AsyncMock(return_value=[switch1])
devices_data = json.loads(load_fixture("devices.json", DOMAIN)) devices_data = json.loads(await async_load_fixture(hass, "devices.json", DOMAIN))
devices = [OmadaListDevice(d) for d in devices_data] devices = [OmadaListDevice(d) for d in devices_data]
site_client.get_devices = AsyncMock(return_value=devices) site_client.get_devices = AsyncMock(return_value=devices)
switch1_ports_data = json.loads( switch1_ports_data = json.loads(
load_fixture("switch-ports-TL-SG3210XHP-M2.json", DOMAIN) await async_load_fixture(hass, "switch-ports-TL-SG3210XHP-M2.json", DOMAIN)
) )
switch1_ports = [OmadaSwitchPortDetails(p) for p in switch1_ports_data] switch1_ports = [OmadaSwitchPortDetails(p) for p in switch1_ports_data]
site_client.get_switch_ports = AsyncMock(return_value=switch1_ports) site_client.get_switch_ports = AsyncMock(return_value=switch1_ports)
async def async_empty() -> AsyncIterable: async def async_empty() -> AsyncGenerator:
for c in (): for c in ():
yield c yield c
@ -85,24 +90,30 @@ def mock_omada_site_client() -> Generator[AsyncMock]:
@pytest.fixture @pytest.fixture
def mock_omada_clients_only_site_client() -> Generator[AsyncMock]: def mock_omada_clients_only_site_client(hass: HomeAssistant) -> Generator[AsyncMock]:
"""Mock Omada site client containing only client connection data.""" """Mock Omada site client containing only client connection data."""
site_client = MagicMock() site_client = MagicMock()
site_client.get_switches = AsyncMock(return_value=[]) site_client.get_switches = AsyncMock(return_value=[])
site_client.get_devices = AsyncMock(return_value=[]) site_client.get_devices = AsyncMock(return_value=[])
site_client.get_switch_ports = AsyncMock(return_value=[]) site_client.get_switch_ports = AsyncMock(return_value=[])
site_client.get_client = AsyncMock(side_effect=_get_mock_client) site_client.get_client = AsyncMock(side_effect=partial(_get_mock_client, hass))
site_client.get_known_clients.side_effect = _get_mock_known_clients site_client.get_known_clients.side_effect = partial(_get_mock_known_clients, hass)
site_client.get_connected_clients.side_effect = _get_mock_connected_clients site_client.get_connected_clients.side_effect = partial(
_get_mock_connected_clients, hass
)
return site_client return site_client
async def _get_mock_known_clients() -> AsyncIterable[OmadaNetworkClient]: async def _get_mock_known_clients(
hass: HomeAssistant,
) -> AsyncGenerator[OmadaNetworkClient]:
"""Mock known clients of the Omada network.""" """Mock known clients of the Omada network."""
known_clients_data = json.loads(load_fixture("known-clients.json", DOMAIN)) known_clients_data = json.loads(
await async_load_fixture(hass, "known-clients.json", DOMAIN)
)
for c in known_clients_data: for c in known_clients_data:
if c["wireless"]: if c["wireless"]:
yield OmadaWirelessClient(c) yield OmadaWirelessClient(c)
@ -110,9 +121,13 @@ async def _get_mock_known_clients() -> AsyncIterable[OmadaNetworkClient]:
yield OmadaWiredClient(c) yield OmadaWiredClient(c)
async def _get_mock_connected_clients() -> AsyncIterable[OmadaConnectedClient]: async def _get_mock_connected_clients(
hass: HomeAssistant,
) -> AsyncGenerator[OmadaConnectedClient]:
"""Mock connected clients of the Omada network.""" """Mock connected clients of the Omada network."""
connected_clients_data = json.loads(load_fixture("connected-clients.json", DOMAIN)) connected_clients_data = json.loads(
await async_load_fixture(hass, "connected-clients.json", DOMAIN)
)
for c in connected_clients_data: for c in connected_clients_data:
if c["wireless"]: if c["wireless"]:
yield OmadaWirelessClient(c) yield OmadaWirelessClient(c)
@ -120,9 +135,11 @@ async def _get_mock_connected_clients() -> AsyncIterable[OmadaConnectedClient]:
yield OmadaWiredClient(c) yield OmadaWiredClient(c)
def _get_mock_client(mac: str) -> OmadaNetworkClient: async def _get_mock_client(hass: HomeAssistant, mac: str) -> OmadaNetworkClient:
"""Mock an Omada client.""" """Mock an Omada client."""
connected_clients_data = json.loads(load_fixture("connected-clients.json", DOMAIN)) connected_clients_data = json.loads(
await async_load_fixture(hass, "connected-clients.json", DOMAIN)
)
for c in connected_clients_data: for c in connected_clients_data:
if c["mac"] == mac: if c["mac"] == mac: