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()