From 643110c807bd881e1ccd810dcc0264f9ff4274c9 Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Sun, 18 Feb 2024 17:55:17 +0100 Subject: [PATCH] Create a api_request based fixture --- tests/conftest.py | 24 ++++++++++++++++++++++++ tests/test_api_discovery.py | 21 +++++++++++++-------- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 59ebf512..4958b794 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -2,7 +2,9 @@ import asyncio from collections import deque +from collections.abc import Callable import logging +from typing import Any from httpx import AsyncClient import pytest @@ -10,6 +12,7 @@ from axis.configuration import Configuration from axis.device import AxisDevice +from axis.vapix.models.api import ApiRequest LOGGER = logging.getLogger(__name__) @@ -32,6 +35,27 @@ async def axis_device(respx_mock: respx.router.MockRouter) -> AxisDevice: await session.aclose() +@pytest.fixture(name="mock_api_request") +def api_request_fixture( + respx_mock: respx.router.MockRouter, +) -> Callable[[ApiRequest, Any], respx.router.MockRouter]: + """Mock API request.""" + content_type_to_keyword = { + "application/json": "json", + } + + def _register_route( + api_request: ApiRequest, response_data: Any + ) -> respx.router.MockRouter: + kwargs = {content_type_to_keyword[api_request.content_type]: response_data} + return respx_mock.request( + method=api_request.method, + url=api_request.path, + ).respond(**kwargs) + + return _register_route + + class TcpServerProtocol(asyncio.Protocol): """Simple socket server that responds with preset responses.""" diff --git a/tests/test_api_discovery.py b/tests/test_api_discovery.py index e9eb442a..2e856622 100644 --- a/tests/test_api_discovery.py +++ b/tests/test_api_discovery.py @@ -9,7 +9,12 @@ from axis.device import AxisDevice from axis.vapix.interfaces.api_discovery import ApiDiscoveryHandler -from axis.vapix.models.api_discovery import ApiId, ApiStatus +from axis.vapix.models.api_discovery import ( + ApiId, + ApiStatus, + GetSupportedVersionsRequest, + ListApisRequest, +) @pytest.fixture @@ -28,11 +33,9 @@ async def test_api_status_enum(): assert ApiStatus("unsupported") is ApiStatus.UNKNOWN -async def test_get_api_list(respx_mock, api_discovery: ApiDiscoveryHandler): +async def test_get_api_list(mock_api_request, api_discovery: ApiDiscoveryHandler): """Test get_api_list call.""" - route = respx_mock.post("/axis-cgi/apidiscovery.cgi").respond( - json=GET_API_LIST_RESPONSE, - ) + route = mock_api_request(ListApisRequest, GET_API_LIST_RESPONSE) assert api_discovery.supported await api_discovery.update() @@ -56,10 +59,12 @@ async def test_get_api_list(respx_mock, api_discovery: ApiDiscoveryHandler): assert item.version == "1.0" -async def test_get_supported_versions(respx_mock, api_discovery: ApiDiscoveryHandler): +async def test_get_supported_versions( + mock_api_request, api_discovery: ApiDiscoveryHandler +): """Test get_supported_versions.""" - route = respx_mock.post("/axis-cgi/apidiscovery.cgi").respond( - json=GET_SUPPORTED_VERSIONS_RESPONSE, + route = mock_api_request( + GetSupportedVersionsRequest, GET_SUPPORTED_VERSIONS_RESPONSE ) response = await api_discovery.get_supported_versions()