Spaces:
Paused
Paused
File size: 4,151 Bytes
4c5298a |
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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
import pytest
from httpx import AsyncClient
from sqlalchemy.ext.asyncio import AsyncSession
from app.core.security import create_access_token
pytestmark = pytest.mark.asyncio
@pytest.fixture
async def user_token(client: AsyncClient) -> str:
"""Create a test user and return their token"""
# Register user
await client.post(
"/api/v1/auth/register",
data={
"username": "testuser@example.com",
"password": "testpass123",
"full_name": "Test User"
}
)
# Login to get token
response = await client.post(
"/api/v1/auth/login",
data={
"username": "testuser@example.com",
"password": "testpass123"
}
)
return response.json()["access_token"]
async def test_create_product(client: AsyncClient, user_token: str):
# Test creating a product
response = await client.post(
"/api/v1/products/",
json={
"name": "Test Product",
"description": "A test product",
"price": 99.99,
"category": "test",
"inventory_count": 10
},
headers={"Authorization": f"Bearer {user_token}"}
)
assert response.status_code == 200
data = response.json()
assert data["name"] == "Test Product"
assert data["price"] == 99.99
return data["id"]
async def test_get_product(client: AsyncClient, user_token: str):
# First create a product
product_id = await test_create_product(client, user_token)
# Test getting the product
response = await client.get(
f"/api/v1/products/{product_id}",
headers={"Authorization": f"Bearer {user_token}"}
)
assert response.status_code == 200
data = response.json()
assert data["id"] == product_id
assert data["name"] == "Test Product"
async def test_list_products(client: AsyncClient, user_token: str):
# Create multiple products
await test_create_product(client, user_token)
await client.post(
"/api/v1/products/",
json={
"name": "Another Product",
"description": "Another test product",
"price": 49.99,
"category": "test",
"inventory_count": 5
},
headers={"Authorization": f"Bearer {user_token}"}
)
# Test listing products
response = await client.get(
"/api/v1/products/",
headers={"Authorization": f"Bearer {user_token}"}
)
assert response.status_code == 200
data = response.json()
assert len(data) >= 2
assert any(p["name"] == "Test Product" for p in data)
assert any(p["name"] == "Another Product" for p in data)
async def test_update_product(client: AsyncClient, user_token: str):
# First create a product
product_id = await test_create_product(client, user_token)
# Test updating the product
response = await client.put(
f"/api/v1/products/{product_id}",
json={
"name": "Updated Product",
"description": "Updated description",
"price": 149.99,
"category": "test",
"inventory_count": 20
},
headers={"Authorization": f"Bearer {user_token}"}
)
assert response.status_code == 200
data = response.json()
assert data["name"] == "Updated Product"
assert data["price"] == 149.99
assert data["inventory_count"] == 20
async def test_delete_product(client: AsyncClient, user_token: str):
# First create a product
product_id = await test_create_product(client, user_token)
# Test deleting the product
response = await client.delete(
f"/api/v1/products/{product_id}",
headers={"Authorization": f"Bearer {user_token}"}
)
assert response.status_code == 200
# Verify product is deleted
response = await client.get(
f"/api/v1/products/{product_id}",
headers={"Authorization": f"Bearer {user_token}"}
)
assert response.status_code == 404 |