Spaces:
Paused
Paused
| from typing import Dict, Any | |
| from httpx import AsyncClient | |
| import json | |
| async def create_user_and_login( | |
| client: AsyncClient, | |
| email: str = "testuser@example.com", | |
| password: str = "testpass123", | |
| full_name: str = "Test User", | |
| is_superuser: bool = False | |
| ) -> Dict[str, Any]: | |
| """Create a test user and return their token and data""" | |
| # Register user | |
| register_response = await client.post( | |
| "/api/v1/auth/register", | |
| json={ | |
| "email": email, | |
| "password": password, | |
| "full_name": full_name, | |
| "is_superuser": is_superuser | |
| } | |
| ) | |
| user_data = register_response.json() | |
| # Login to get token | |
| login_response = await client.post( | |
| "/api/v1/auth/login", | |
| data={ | |
| "username": email, | |
| "password": password | |
| } | |
| ) | |
| token_data = login_response.json() | |
| return { | |
| "token": token_data["access_token"], | |
| "user": user_data | |
| } | |
| async def create_branch( | |
| client: AsyncClient, | |
| token: str, | |
| name: str = "Test Branch", | |
| location: str = "Test Location" | |
| ) -> Dict[str, Any]: | |
| """Create a test branch and return its data""" | |
| response = await client.post( | |
| "/api/v1/branches/", | |
| json={ | |
| "name": name, | |
| "location": location | |
| }, | |
| headers={"Authorization": f"Bearer {token}"} | |
| ) | |
| return response.json() | |
| async def create_product( | |
| client: AsyncClient, | |
| token: str, | |
| branch_id: int, | |
| name: str = "Test Product", | |
| price: float = 99.99, | |
| inventory: int = 10 | |
| ) -> Dict[str, Any]: | |
| """Create a test product and return its data""" | |
| response = await client.post( | |
| "/api/v1/products/", | |
| json={ | |
| "name": name, | |
| "description": f"Description for {name}", | |
| "price": price, | |
| "category": "test", | |
| "inventory_count": inventory, | |
| "branch_id": branch_id | |
| }, | |
| headers={"Authorization": f"Bearer {token}"} | |
| ) | |
| return response.json() | |
| async def create_order( | |
| client: AsyncClient, | |
| token: str, | |
| items: list, | |
| branch_id: int | |
| ) -> Dict[str, Any]: | |
| """Create a test order and return its data""" | |
| response = await client.post( | |
| "/api/v1/orders/", | |
| json={ | |
| "items": items, | |
| "branch_id": branch_id | |
| }, | |
| headers={"Authorization": f"Bearer {token}"} | |
| ) | |
| return response.json() | |
| def assert_response_matches_schema(response_data: Dict[str, Any], schema: Dict[str, Any]): | |
| """Assert that an API response matches its expected schema""" | |
| assert all(key in response_data for key in schema.keys()), \ | |
| f"Missing required fields. Expected {schema.keys()}, got {response_data.keys()}" | |
| for key, value_type in schema.items(): | |
| assert isinstance(response_data[key], value_type), \ | |
| f"Field {key} should be of type {value_type}, got {type(response_data[key])}" |