Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
File size: 3,864 Bytes
b0dfd19 f73d61a b0dfd19 0687906 b0dfd19 0687906 b0dfd19 0687906 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | import pytest
from httpx import AsyncClient
@pytest.mark.asyncio
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"
@pytest.mark.asyncio
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"
@pytest.mark.asyncio
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"
@pytest.mark.asyncio
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
@pytest.mark.asyncio
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
@pytest.mark.asyncio
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"
@pytest.mark.asyncio
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"
|