Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
| import pytest | |
| from httpx import AsyncClient | |
| async def test_request_otp(client: AsyncClient): | |
| response = await client.post("/api/v1/auth/request-otp", data={"email": "test@example.com"}) | |
| assert response.status_code == 200 | |
| assert response.json()["message"] == "OTP sent to your email" | |
| async def test_register_user(client: AsyncClient): | |
| # Prepare dummy image | |
| files = {"file": ("test.jpg", b"fake-image-content", "image/jpeg")} | |
| data = { | |
| "first_name": "Test", | |
| "last_name": "User", | |
| "email": "test@example.com", | |
| "password": "password123", | |
| "otp_code": "123456" | |
| } | |
| response = await client.post("/api/v1/auth/register", data=data, files=files) | |
| assert response.status_code == 200 | |
| assert response.json()["message"] == "Registration successful" | |
| async def test_login_user(client: AsyncClient): | |
| # First, ensure user exists (from previous test or setup) | |
| # Since we use in-memory SQLite and setup_db is session-scoped, | |
| # the user from test_register_user might be there if they run in order. | |
| # But for robustness, let's register here too or assume session persistence. | |
| login_data = { | |
| "email": "test@example.com", | |
| "password": "password123" | |
| } | |
| response = await client.post("/api/v1/auth/login", json=login_data) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert "access_token" in data | |
| assert data["token_type"] == "bearer" | |
| async def test_get_current_user(client: AsyncClient): | |
| # Login to get token | |
| login_data = {"email": "test@example.com", "password": "password123"} | |
| login_res = await client.post("/api/v1/auth/login", json=login_data) | |
| token = login_res.json()["access_token"] | |
| headers = {"Authorization": f"Bearer {token}"} | |
| response = await client.get("/api/v1/user/me", headers=headers) | |
| assert response.status_code == 405 # Method Not Allowed if only PATCH exists | |
| async def test_update_user_me(client: AsyncClient): | |
| # Login to get token | |
| login_data = {"email": "test@example.com", "password": "password123"} | |
| login_res = await client.post("/api/v1/auth/login", json=login_data) | |
| token = login_res.json()["access_token"] | |
| headers = {"Authorization": f"Bearer {token}"} | |
| data = { | |
| "first_name": "UpdatedFirst", | |
| "last_name": "UpdatedLast" | |
| } | |
| response = await client.patch("/api/v1/user/me", headers=headers, data=data) | |
| assert response.status_code == 200 | |
| res_data = response.json() | |
| assert res_data["first_name"] == "UpdatedFirst" | |
| assert res_data["last_name"] == "UpdatedLast" | |
| # Test updating avatar as well | |
| files = {"avatar": ("new_avatar.jpg", b"new-fake-image", "image/jpeg")} | |
| response = await client.patch("/api/v1/user/me", headers=headers, files=files) | |
| assert response.status_code == 200 | |
| res_data = response.json() | |
| assert "profile_image_url" in res_data | |
| async def test_refresh_token(client: AsyncClient): | |
| login_data = {"email": "test@example.com", "password": "password123"} | |
| login_res = await client.post("/api/v1/auth/login", json=login_data) | |
| refresh_token = login_res.json()["refresh_token"] | |
| response = await client.post(f"/api/v1/auth/refresh-token?refresh_token={refresh_token}") | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert "access_token" in data | |
| assert data["refresh_token"] == refresh_token | |
| assert "user" in data | |
| assert data["user"]["email"] == "test@example.com" | |
| async def test_logout(client: AsyncClient): | |
| response = await client.post("/api/v1/auth/logout") | |
| assert response.status_code == 200 | |
| assert response.json()["message"] == "Successfully logged out" | |