""" 409 on [POST]/service/ not tested because SQLite throws a different error than Postgres """ from typing import Any import pytest from httpx import AsyncClient from .conftest import generate_query_and_status, generate_body_and_status, standard_test pytestmark = [ pytest.mark.service_module, ] @pytest.mark.parametrize("query, expected_status", generate_query_and_status(["org_id"])) @pytest.mark.anyio async def test_get_services_status_checks( default_client: AsyncClient, query: str, expected_status: int ): resp = await default_client.get(f"/service?{query}") assert resp.status_code == expected_status @pytest.mark.anyio async def test_post_service_success(default_client: AsyncClient): resp = await default_client.post("/service", json={"name": "New Test Service"}) data = resp.json() assert resp.status_code == 200 assert "service" in data assert isinstance(data["service"], dict) assert data["service"]["name"] == "New Test Service" assert data["service"]["id"] == 2 assert isinstance(data["service"]["api_key"], str) @pytest.mark.parametrize("body, expected_status", generate_body_and_status({"name": "str"})) @pytest.mark.anyio async def test_post_service_status_checks( default_client: AsyncClient, body: dict[str, str], expected_status: int ): resp = await default_client.post("/service", json=body) assert resp.status_code == expected_status @pytest.mark.anyio async def test_post_service_conflict(default_client: AsyncClient): resp = await default_client.post("/service", json={"name": "Test Service"}) assert resp.status_code == 409 @pytest.mark.anyio async def test_patch_service_success(default_client: AsyncClient): resp = await default_client.patch("/service/key", json={"service_id": 1}) data = resp.json() assert resp.status_code == 200 assert "service" in data assert isinstance(data["service"], dict) assert data["service"]["name"] == "Test Service" assert data["service"]["id"] == 1 assert isinstance(data["service"]["api_key"], str) @pytest.mark.parametrize( "body, expected_status", generate_body_and_status({"service_id": "int"}), ) @pytest.mark.anyio async def test_patch_services_status_checks( default_client: AsyncClient, body: dict[str, str], expected_status: int ): resp = await default_client.patch("/service/key", json=body) assert resp.status_code == expected_status @pytest.mark.anyio async def test_get_services_standard( default_client: AsyncClient, route_data: dict[str, dict[str, Any]] ): method = "GET" path = "/service" auth_level = "Root User" query = "?org_id=1" body = {} expected_data = { "services": [ {"id": 1, "name": "Test Service"}, ] } await standard_test( default_client, method, path, auth_level, query, body, expected_data, route_data ) @pytest.mark.anyio async def test_delete_service_standard( default_client: AsyncClient, route_data: dict[str, dict[str, Any]] ): method = "DELETE" path = "/service" auth_level = "Super Admin" query = "?service_id=1" body = {} expected_data = {} await standard_test( default_client, method, path, auth_level, query, body, expected_data, route_data )