Spaces:
Paused
Paused
| import pytest | |
| from httpx import AsyncClient | |
| from sqlalchemy.ext.asyncio import AsyncSession | |
| from ..utils import create_user_and_login, create_branch | |
| pytestmark = pytest.mark.asyncio | |
| async def admin_token(client: AsyncClient) -> str: | |
| """Create an admin user and return their token""" | |
| user_data = await create_user_and_login( | |
| client, | |
| email="admin@example.com", | |
| password="adminpass123", | |
| full_name="Admin User", | |
| is_superuser=True | |
| ) | |
| return user_data["token"] | |
| async def regular_token(client: AsyncClient) -> str: | |
| """Create a regular user and return their token""" | |
| user_data = await create_user_and_login( | |
| client, | |
| email="user@example.com", | |
| password="userpass123", | |
| full_name="Regular User", | |
| is_superuser=False | |
| ) | |
| return user_data["token"] | |
| async def test_create_branch(client: AsyncClient, admin_token: str): | |
| # Test creating a branch as admin | |
| response = await client.post( | |
| "/api/v1/branches/", | |
| json={ | |
| "name": "Test Branch", | |
| "location": "Test Location", | |
| "contact_email": "branch@example.com", | |
| "phone": "1234567890" | |
| }, | |
| headers={"Authorization": f"Bearer {admin_token}"} | |
| ) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert data["name"] == "Test Branch" | |
| assert data["location"] == "Test Location" | |
| return data["id"] | |
| async def test_create_branch_unauthorized(client: AsyncClient, regular_token: str): | |
| # Test creating a branch as regular user (should fail) | |
| response = await client.post( | |
| "/api/v1/branches/", | |
| json={ | |
| "name": "Test Branch", | |
| "location": "Test Location" | |
| }, | |
| headers={"Authorization": f"Bearer {regular_token}"} | |
| ) | |
| assert response.status_code == 403 | |
| async def test_get_branch(client: AsyncClient, admin_token: str): | |
| # First create a branch | |
| branch_id = await test_create_branch(client, admin_token) | |
| # Test getting the branch | |
| response = await client.get( | |
| f"/api/v1/branches/{branch_id}", | |
| headers={"Authorization": f"Bearer {admin_token}"} | |
| ) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert data["id"] == branch_id | |
| assert data["name"] == "Test Branch" | |
| async def test_list_branches(client: AsyncClient, admin_token: str): | |
| # Create multiple branches | |
| await test_create_branch(client, admin_token) | |
| await client.post( | |
| "/api/v1/branches/", | |
| json={ | |
| "name": "Another Branch", | |
| "location": "Another Location", | |
| "contact_email": "another@example.com", | |
| "phone": "0987654321" | |
| }, | |
| headers={"Authorization": f"Bearer {admin_token}"} | |
| ) | |
| # Test listing branches | |
| response = await client.get( | |
| "/api/v1/branches/", | |
| headers={"Authorization": f"Bearer {admin_token}"} | |
| ) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert len(data) >= 2 | |
| assert any(b["name"] == "Test Branch" for b in data) | |
| assert any(b["name"] == "Another Branch" for b in data) | |
| async def test_update_branch(client: AsyncClient, admin_token: str): | |
| # First create a branch | |
| branch_id = await test_create_branch(client, admin_token) | |
| # Test updating the branch | |
| response = await client.put( | |
| f"/api/v1/branches/{branch_id}", | |
| json={ | |
| "name": "Updated Branch", | |
| "location": "Updated Location", | |
| "contact_email": "updated@example.com", | |
| "phone": "1112223333" | |
| }, | |
| headers={"Authorization": f"Bearer {admin_token}"} | |
| ) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert data["name"] == "Updated Branch" | |
| assert data["location"] == "Updated Location" | |
| assert data["contact_email"] == "updated@example.com" | |
| async def test_delete_branch(client: AsyncClient, admin_token: str): | |
| # First create a branch | |
| branch_id = await test_create_branch(client, admin_token) | |
| # Test deleting the branch | |
| response = await client.delete( | |
| f"/api/v1/branches/{branch_id}", | |
| headers={"Authorization": f"Bearer {admin_token}"} | |
| ) | |
| assert response.status_code == 200 | |
| # Verify branch is deleted | |
| response = await client.get( | |
| f"/api/v1/branches/{branch_id}", | |
| headers={"Authorization": f"Bearer {admin_token}"} | |
| ) | |
| assert response.status_code == 404 | |
| async def test_branch_statistics(client: AsyncClient, admin_token: str): | |
| # First create a branch | |
| branch_id = await test_create_branch(client, admin_token) | |
| # Test getting branch statistics | |
| response = await client.get( | |
| f"/api/v1/branches/{branch_id}/statistics", | |
| headers={"Authorization": f"Bearer {admin_token}"} | |
| ) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert "total_products" in data | |
| assert "total_orders" in data | |
| assert "total_revenue" in data | |
| assert "average_order_value" in data |