Desi-Clans/backend/tests/helpers.py
2026-10-08 02:52:58 +05:30

56 lines
1.6 KiB
Python

import uuid
from fastapi.testclient import TestClient
from app.main import app
client = TestClient(app)
def register_user() -> tuple[str, str]:
email = f"buyer-{uuid.uuid4().hex}@example.com"
password = "securepass1"
response = client.post(
"/api/auth/register",
json={"email": email, "password": password, "full_name": "Buyer"},
)
assert response.status_code == 201
token = response.json()["access_token"]
return email, token
def auth_headers(token: str) -> dict[str, str]:
return {"Authorization": f"Bearer {token}"}
def first_published_event() -> dict:
response = client.get("/api/events", params={"upcoming": "false"})
assert response.status_code == 200
events = response.json()
assert events, "Seed catalog required for order tests"
return events[0]
def pick_tier(tiers: list[dict], quantity: int = 1) -> dict | None:
return next(
(t for t in tiers if t["status"] == "active" and t["remaining_quantity"] >= quantity),
None,
)
def create_pending_order():
import pytest
_, token = register_user()
event = first_published_event()
tiers = client.get(f"/api/events/{event['id']}/tickets").json()
tier = pick_tier(tiers, 1)
if not tier:
pytest.skip("No ticket inventory available for test")
response = client.post(
"/api/orders",
headers={**auth_headers(token), "Idempotency-Key": uuid.uuid4().hex},
json={"event_id": event["id"], "items": [{"ticket_type_id": tier["id"], "quantity": 1}]},
)
assert response.status_code == 201
return token, response.json()