130 lines
4.1 KiB
Python
130 lines
4.1 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
"""
|
||
|
|
Test script to verify that webhook routes work correctly after the fix.
|
||
|
|
"""
|
||
|
|
|
||
|
|
import sys
|
||
|
|
import os
|
||
|
|
import re
|
||
|
|
|
||
|
|
# Add the gateway directory to the path
|
||
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||
|
|
|
||
|
|
def test_subscription_middleware_skip_patterns():
|
||
|
|
"""Test that webhook routes are in the skip patterns."""
|
||
|
|
|
||
|
|
# Read the subscription middleware file
|
||
|
|
with open('app/middleware/subscription.py', 'r') as f:
|
||
|
|
content = f.read()
|
||
|
|
|
||
|
|
# Check if webhook routes are in the skip patterns
|
||
|
|
webhook_pattern = r'/api/v1/webhooks/.*'
|
||
|
|
if webhook_pattern in content:
|
||
|
|
print("✅ Webhook routes found in SubscriptionMiddleware skip patterns")
|
||
|
|
return True
|
||
|
|
else:
|
||
|
|
print("❌ Webhook routes NOT found in SubscriptionMiddleware skip patterns")
|
||
|
|
return False
|
||
|
|
|
||
|
|
def test_read_only_middleware_whitelist():
|
||
|
|
"""Test that webhook routes are in the whitelist."""
|
||
|
|
|
||
|
|
# Read the read-only middleware file
|
||
|
|
with open('app/middleware/read_only_mode.py', 'r') as f:
|
||
|
|
content = f.read()
|
||
|
|
|
||
|
|
# Check if webhook routes are in the whitelist
|
||
|
|
webhook_pattern = r'^/api/v1/webhooks/.*'
|
||
|
|
if webhook_pattern in content:
|
||
|
|
print("✅ Webhook routes found in ReadOnlyModeMiddleware whitelist")
|
||
|
|
return True
|
||
|
|
else:
|
||
|
|
print("❌ Webhook routes NOT found in ReadOnlyModeMiddleware whitelist")
|
||
|
|
return False
|
||
|
|
|
||
|
|
def test_webhook_route_definitions():
|
||
|
|
"""Test that webhook routes are correctly defined."""
|
||
|
|
|
||
|
|
# Read the webhooks file
|
||
|
|
with open('app/routes/webhooks.py', 'r') as f:
|
||
|
|
content = f.read()
|
||
|
|
|
||
|
|
# Check if webhook routes are defined with full paths
|
||
|
|
stripe_route = '@router.post("/api/v1/webhooks/stripe")'
|
||
|
|
generic_route = '@router.post("/api/v1/webhooks/generic")'
|
||
|
|
|
||
|
|
if stripe_route in content and generic_route in content:
|
||
|
|
print("✅ Webhook routes correctly defined with full paths")
|
||
|
|
return True
|
||
|
|
else:
|
||
|
|
print("❌ Webhook routes NOT correctly defined")
|
||
|
|
return False
|
||
|
|
|
||
|
|
def test_webhook_router_inclusion():
|
||
|
|
"""Test that webhook router is included with correct prefix."""
|
||
|
|
|
||
|
|
# Read the main file
|
||
|
|
with open('app/main.py', 'r') as f:
|
||
|
|
content = f.read()
|
||
|
|
|
||
|
|
# Check if webhook router is included with prefix=""
|
||
|
|
webhook_inclusion = "app.include_router(webhooks.router, prefix=\"\", tags=[\"webhooks\"])"
|
||
|
|
|
||
|
|
if webhook_inclusion in content:
|
||
|
|
print("✅ Webhook router correctly included with prefix=''")
|
||
|
|
return True
|
||
|
|
else:
|
||
|
|
print("❌ Webhook router NOT correctly included")
|
||
|
|
return False
|
||
|
|
|
||
|
|
def test_auth_middleware_public_routes():
|
||
|
|
"""Test that webhook routes are in the public routes."""
|
||
|
|
|
||
|
|
# Read the auth middleware file
|
||
|
|
with open('app/middleware/auth.py', 'r') as f:
|
||
|
|
content = f.read()
|
||
|
|
|
||
|
|
# Check if webhook routes are in the public routes
|
||
|
|
stripe_public = '/api/v1/webhooks/stripe'
|
||
|
|
generic_public = '/api/v1/webhooks/generic'
|
||
|
|
|
||
|
|
if stripe_public in content and generic_public in content:
|
||
|
|
print("✅ Webhook routes found in AuthMiddleware public routes")
|
||
|
|
return True
|
||
|
|
else:
|
||
|
|
print("❌ Webhook routes NOT found in AuthMiddleware public routes")
|
||
|
|
return False
|
||
|
|
|
||
|
|
def main():
|
||
|
|
"""Run all tests."""
|
||
|
|
print("Testing webhook route configuration...")
|
||
|
|
print()
|
||
|
|
|
||
|
|
tests = [
|
||
|
|
test_webhook_route_definitions,
|
||
|
|
test_webhook_router_inclusion,
|
||
|
|
test_auth_middleware_public_routes,
|
||
|
|
test_subscription_middleware_skip_patterns,
|
||
|
|
test_read_only_middleware_whitelist,
|
||
|
|
]
|
||
|
|
|
||
|
|
results = []
|
||
|
|
for test in tests:
|
||
|
|
try:
|
||
|
|
result = test()
|
||
|
|
results.append(result)
|
||
|
|
except Exception as e:
|
||
|
|
print(f"❌ Error running {test.__name__}: {e}")
|
||
|
|
results.append(False)
|
||
|
|
print()
|
||
|
|
|
||
|
|
if all(results):
|
||
|
|
print("🎉 All tests passed! Webhook routes should work correctly.")
|
||
|
|
return True
|
||
|
|
else:
|
||
|
|
print("❌ Some tests failed. Webhook routes may not work correctly.")
|
||
|
|
return False
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
success = main()
|
||
|
|
sys.exit(0 if success else 1)
|