Centralize testing
This commit is contained in:
55
tests/integration/test_admin_api.py
Normal file
55
tests/integration/test_admin_api.py
Normal file
@ -0,0 +1,55 @@
|
||||
"""Tests of the admin interface."""
|
||||
|
||||
from collections.abc import AsyncIterator
|
||||
from contextlib import asynccontextmanager
|
||||
import pytest
|
||||
|
||||
import httpx
|
||||
|
||||
|
||||
class TestAdminAPI:
|
||||
"""Tests of the Admin REST API."""
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_health_check(
|
||||
self, admin_server: tuple[str, tuple[str, str]]
|
||||
) -> None:
|
||||
"""Test admin login."""
|
||||
async with self.http_client(admin_server, False) as client:
|
||||
resp = await client.get("/health")
|
||||
assert resp.status_code == 200
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_admin_login(self, admin_server: tuple[str, tuple[str, str]]) -> None:
|
||||
"""Test admin login."""
|
||||
|
||||
async with self.http_client(admin_server, False) as client:
|
||||
resp = await client.get("api/v1/clients/")
|
||||
assert resp.status_code == 401
|
||||
|
||||
async with self.http_client(admin_server, True) as client:
|
||||
resp = await client.get("api/v1/clients/")
|
||||
assert resp.status_code == 200
|
||||
|
||||
@asynccontextmanager
|
||||
async def http_client(
|
||||
self, admin_server: tuple[str, tuple[str, str]], authenticate: bool = True
|
||||
) -> AsyncIterator[httpx.AsyncClient]:
|
||||
"""Run a client towards the admin rest api."""
|
||||
admin_url, credentials = admin_server
|
||||
username, password = credentials
|
||||
headers: dict[str, str] | None = None
|
||||
if authenticate:
|
||||
async with httpx.AsyncClient(base_url=admin_url) as client:
|
||||
|
||||
response = await client.post(
|
||||
"api/v1/token", data={"username": username, "password": password}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
assert "access_token" in data
|
||||
token = data["access_token"]
|
||||
headers = {"Authorization": f"Bearer {token}"}
|
||||
|
||||
async with httpx.AsyncClient(base_url=admin_url, headers=headers) as client:
|
||||
yield client
|
||||
Reference in New Issue
Block a user