Admin-Desk / tests /api /test_branches.py
Fred808's picture
Upload 7 files
4c5298a verified
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
@pytest.fixture
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"]
@pytest.fixture
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