1
0
Fork 0
forked from sr2/cloud-api
cloud-api/test/test_service.py

117 lines
3.2 KiB
Python
Raw Normal View History

2026-05-29 16:55:21 +01:00
"""
409 on [POST]/service/ not tested because SQLite throws a different error than Postgres
"""
2026-06-24 13:50:50 +01:00
from typing import Any
2026-05-29 16:55:21 +01:00
import pytest
from httpx import AsyncClient
2026-06-24 13:50:50 +01:00
from .conftest import generate_query_and_status, generate_body_and_status, standard_test
2026-05-29 16:55:21 +01:00
2026-06-09 13:58:08 +01:00
pytestmark = [
2026-06-22 15:04:11 +01:00
pytest.mark.service_module,
2026-06-09 13:58:08 +01:00
]
@pytest.mark.parametrize("query, expected_status", generate_query_and_status(["org_id"]))
2026-05-29 16:55:21 +01:00
@pytest.mark.anyio
async def test_get_services_status_checks(
2026-06-22 15:04:11 +01:00
default_client: AsyncClient, query: str, expected_status: int
):
2026-06-22 15:04:11 +01:00
resp = await default_client.get(f"/service?{query}")
2026-05-29 16:55:21 +01:00
2026-06-22 15:04:11 +01:00
assert resp.status_code == expected_status
2026-05-29 16:55:21 +01:00
@pytest.mark.anyio
async def test_post_service_success(default_client: AsyncClient):
2026-06-22 15:04:11 +01:00
resp = await default_client.post("/service", json={"name": "New Test Service"})
data = resp.json()
2026-05-29 16:55:21 +01:00
2026-06-22 15:04:11 +01:00
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)
2026-05-29 16:55:21 +01:00
@pytest.mark.parametrize("body, expected_status", generate_body_and_status({"name": "str"}))
2026-05-29 16:55:21 +01:00
@pytest.mark.anyio
2026-06-08 16:05:20 +01:00
async def test_post_service_status_checks(
2026-06-22 15:04:11 +01:00
default_client: AsyncClient, body: dict[str, str], expected_status: int
):
2026-06-22 15:04:11 +01:00
resp = await default_client.post("/service", json=body)
2026-05-29 16:55:21 +01:00
2026-06-22 15:04:11 +01:00
assert resp.status_code == expected_status
2026-05-29 16:55:21 +01:00
2026-06-12 12:54:23 +01:00
@pytest.mark.anyio
async def test_post_service_conflict(default_client: AsyncClient):
2026-06-22 15:04:11 +01:00
resp = await default_client.post("/service", json={"name": "Test Service"})
2026-06-12 12:54:23 +01:00
2026-06-22 15:04:11 +01:00
assert resp.status_code == 409
2026-06-12 12:54:23 +01:00
2026-05-29 16:55:21 +01:00
@pytest.mark.anyio
async def test_patch_service_success(default_client: AsyncClient):
2026-06-22 15:04:11 +01:00
resp = await default_client.patch("/service/key", json={"service_id": 1})
data = resp.json()
2026-05-29 16:55:21 +01:00
2026-06-22 15:04:11 +01:00
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)
2026-05-29 16:55:21 +01:00
@pytest.mark.parametrize(
2026-06-22 15:04:11 +01:00
"body, expected_status",
generate_body_and_status({"service_id": "int"}),
2026-05-29 16:55:21 +01:00
)
@pytest.mark.anyio
async def test_patch_services_status_checks(
2026-06-22 15:04:11 +01:00
default_client: AsyncClient, body: dict[str, str], expected_status: int
):
2026-06-22 15:04:11 +01:00
resp = await default_client.patch("/service/key", json=body)
2026-05-29 16:55:21 +01:00
2026-06-22 15:04:11 +01:00
assert resp.status_code == expected_status
@pytest.mark.anyio
2026-06-24 13:50:50 +01:00
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
)
2026-06-24 13:50:50 +01:00
@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
)