"""Integration tests for authentication endpoints (requires database).""" from tests.conftest import requires_db @requires_db class TestAuthLogin: async def test_login_success(self, db_client, test_user): resp = await db_client.post( "/api/v1/auth/login", json={ "email": test_user.email, "password": "TestPassword123", }, ) assert resp.status_code == 200 data = resp.json() assert "access_token" in data assert "refresh_token" in data assert data["token_type"] == "bearer" async def test_login_wrong_password(self, db_client, test_user): resp = await db_client.post( "/api/v1/auth/login", json={ "email": test_user.email, "password": "wrong", }, ) assert resp.status_code == 401 async def test_login_nonexistent_user(self, db_client): resp = await db_client.post( "/api/v1/auth/login", json={ "email": "nobody@test.com", "password": "anything", }, ) assert resp.status_code == 401 async def test_login_invalid_email(self, db_client): resp = await db_client.post( "/api/v1/auth/login", json={"email": "not-an-email", "password": "anything"}, ) assert resp.status_code == 422 @requires_db class TestAuthMe: async def test_me_returns_user(self, db_client, auth_headers, test_user): resp = await db_client.get("/api/v1/auth/me", headers=auth_headers) assert resp.status_code == 200 data = resp.json() assert data["email"] == test_user.email assert data["role"] == "owner" async def test_me_without_token(self, db_client): resp = await db_client.get("/api/v1/auth/me") assert resp.status_code == 401 @requires_db class TestAuthRefresh: async def test_refresh_returns_new_tokens(self, db_client, test_user): # First login to get a refresh token login_resp = await db_client.post( "/api/v1/auth/login", json={ "email": test_user.email, "password": "TestPassword123", }, ) refresh_token = login_resp.json()["refresh_token"] resp = await db_client.post( "/api/v1/auth/refresh", json={"refresh_token": refresh_token}, ) assert resp.status_code == 200 assert "access_token" in resp.json() async def test_refresh_with_invalid_token(self, db_client): resp = await db_client.post( "/api/v1/auth/refresh", json={"refresh_token": "invalid-token"}, ) assert resp.status_code == 401