62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Test script to understand FastAPI routing behavior with different prefix configurations.
|
|
"""
|
|
|
|
from fastapi import FastAPI, APIRouter, Request
|
|
from fastapi.responses import JSONResponse
|
|
|
|
# Test 1: Router with prefix="" and full path in route
|
|
router1 = APIRouter()
|
|
|
|
@router1.post("/api/v1/webhooks/stripe")
|
|
async def webhook_stripe_v1(request: Request):
|
|
return {"message": "webhook_stripe_v1"}
|
|
|
|
# Test 2: Router with prefix="" and relative path in route
|
|
router2 = APIRouter()
|
|
|
|
@router2.post("/webhooks/stripe")
|
|
async def webhook_stripe_v2(request: Request):
|
|
return {"message": "webhook_stripe_v2"}
|
|
|
|
# Test 3: Router with prefix="/api/v1" and relative path in route
|
|
router3 = APIRouter()
|
|
|
|
@router3.post("/webhooks/stripe")
|
|
async def webhook_stripe_v3(request: Request):
|
|
return {"message": "webhook_stripe_v3"}
|
|
|
|
# Create test apps
|
|
app1 = FastAPI()
|
|
app1.include_router(router1, prefix="")
|
|
|
|
app2 = FastAPI()
|
|
app2.include_router(router2, prefix="")
|
|
|
|
app3 = FastAPI()
|
|
app3.include_router(router3, prefix="/api/v1")
|
|
|
|
print("Testing routing behavior...")
|
|
print()
|
|
|
|
# Test each configuration
|
|
from fastapi.testclient import TestClient
|
|
|
|
client1 = TestClient(app1)
|
|
response1 = client1.post("/api/v1/webhooks/stripe")
|
|
print(f"Test 1 (prefix='', full path): {response1.status_code} - {response1.json() if response1.status_code == 200 else 'Not found'}")
|
|
|
|
client2 = TestClient(app2)
|
|
response2 = client2.post("/api/v1/webhooks/stripe")
|
|
print(f"Test 2 (prefix='', relative path): {response2.status_code} - {response2.json() if response2.status_code == 200 else 'Not found'}")
|
|
|
|
client3 = TestClient(app3)
|
|
response3 = client3.post("/api/v1/webhooks/stripe")
|
|
print(f"Test 3 (prefix='/api/v1', relative path): {response3.status_code} - {response3.json() if response3.status_code == 200 else 'Not found'}")
|
|
|
|
print()
|
|
print("Analysis:")
|
|
print("- Test 1 should work: prefix='' + full path '/api/v1/webhooks/stripe' = '/api/v1/webhooks/stripe'")
|
|
print("- Test 2 should NOT work: prefix='' + relative path '/webhooks/stripe' = '/webhooks/stripe' (not '/api/v1/webhooks/stripe')")
|
|
print("- Test 3 should work: prefix='/api/v1' + relative path '/webhooks/stripe' = '/api/v1/webhooks/stripe'") |