chore: consolidate new foundation and archive v1 (#1495)
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
"""Basic API tests."""
|
||||
|
||||
import pytest
|
||||
from httpx import ASGITransport, AsyncClient
|
||||
|
||||
from src.main import app
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def client():
|
||||
"""Async test client fixture."""
|
||||
async with AsyncClient(
|
||||
transport=ASGITransport(app=app),
|
||||
base_url="http://test",
|
||||
) as ac:
|
||||
yield ac
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_root(client: AsyncClient):
|
||||
"""Test root endpoint returns ok status."""
|
||||
response = await client.get("/")
|
||||
assert response.status_code == 200
|
||||
assert response.json()["status"] == "ok"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_health(client: AsyncClient):
|
||||
"""Test health endpoint."""
|
||||
response = await client.get("/health")
|
||||
assert response.status_code == 200
|
||||
assert response.json()["status"] == "healthy"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_register_user(client: AsyncClient):
|
||||
"""Test user registration."""
|
||||
response = await client.post(
|
||||
"/auth/register",
|
||||
json={"email": "[email protected]", "password": "testpassword123"},
|
||||
)
|
||||
assert response.status_code == 201
|
||||
data = response.json()
|
||||
assert data["email"] == "[email protected]"
|
||||
assert "id" in data
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_login(client: AsyncClient):
|
||||
"""Test user login."""
|
||||
# First register
|
||||
await client.post(
|
||||
"/auth/register",
|
||||
json={"email": "[email protected]", "password": "testpassword123"},
|
||||
)
|
||||
|
||||
# Then login
|
||||
response = await client.post(
|
||||
"/auth/login",
|
||||
data={"username": "[email protected]", "password": "testpassword123"},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
assert "access_token" in data
|
||||
assert data["token_type"] == "bearer"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_get_me_unauthorized(client: AsyncClient):
|
||||
"""Test /auth/me without token returns 401."""
|
||||
response = await client.get("/auth/me")
|
||||
assert response.status_code == 401
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_get_me_authorized(client: AsyncClient):
|
||||
"""Test /auth/me with valid token returns user."""
|
||||
# Register
|
||||
await client.post(
|
||||
"/auth/register",
|
||||
json={"email": "[email protected]", "password": "testpassword123"},
|
||||
)
|
||||
|
||||
# Login
|
||||
login_response = await client.post(
|
||||
"/auth/login",
|
||||
data={"username": "[email protected]", "password": "testpassword123"},
|
||||
)
|
||||
token = login_response.json()["access_token"]
|
||||
|
||||
# Get me
|
||||
response = await client.get(
|
||||
"/auth/me",
|
||||
headers={"Authorization": f"Bearer {token}"},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json()["email"] == "[email protected]"
|
||||
Reference in New Issue
Block a user