"""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": "test@example.com", "password": "testpassword123"}, ) assert response.status_code == 201 data = response.json() assert data["email"] == "test@example.com" 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": "login@example.com", "password": "testpassword123"}, ) # Then login response = await client.post( "/auth/login", data={"username": "login@example.com", "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": "me@example.com", "password": "testpassword123"}, ) # Login login_response = await client.post( "/auth/login", data={"username": "me@example.com", "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"] == "me@example.com"