80 lines
2.8 KiB
Python
80 lines
2.8 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Real simulation test for Auth Endpoint.
|
|
Reads integration_session.json and tests /api/v1/auth/me endpoint.
|
|
"""
|
|
import json
|
|
import sys
|
|
import os
|
|
import asyncio
|
|
import httpx
|
|
|
|
async def test_auth():
|
|
# Load session data
|
|
session_path = os.path.join(os.path.dirname(__file__), 'integration_session.json')
|
|
if not os.path.exists(session_path):
|
|
print(f"ERROR: {session_path} not found")
|
|
sys.exit(1)
|
|
|
|
with open(session_path, 'r') as f:
|
|
session = json.load(f)
|
|
|
|
token = session.get('test_token')
|
|
email = session.get('email')
|
|
expected_role = session.get('role')
|
|
|
|
if not token:
|
|
print("ERROR: No token in session")
|
|
sys.exit(1)
|
|
|
|
print(f"Testing auth for user: {email}")
|
|
print(f"Expected role: {expected_role}")
|
|
print(f"Token: {token[:50]}...")
|
|
|
|
# Test both endpoints
|
|
endpoints = [
|
|
('/api/v1/auth/me', 'Auth endpoint'),
|
|
('/api/v1/users/me', 'Users endpoint'),
|
|
]
|
|
|
|
async with httpx.AsyncClient(base_url='http://sf_api:8000', timeout=30) as client:
|
|
headers = {'Authorization': f'Bearer {token}'}
|
|
|
|
for endpoint, description in endpoints:
|
|
print(f"\n--- Testing {description} ({endpoint}) ---")
|
|
try:
|
|
response = await client.get(endpoint, headers=headers)
|
|
print(f"Status: {response.status_code}")
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
print(f"Response: {json.dumps(data, indent=2)}")
|
|
# Verify role
|
|
role = data.get('role')
|
|
if role == expected_role:
|
|
print(f"✅ Role matches: {role}")
|
|
else:
|
|
print(f"❌ Role mismatch: expected {expected_role}, got {role}")
|
|
sys.exit(1)
|
|
# Verify admin rank (if present in token)
|
|
# The token payload includes rank, but endpoint may not return it
|
|
# That's okay.
|
|
else:
|
|
print(f"❌ Request failed: {response.text}")
|
|
if endpoint == '/api/v1/auth/me':
|
|
print("Note: /auth/me endpoint may not be implemented yet")
|
|
# Continue to next endpoint
|
|
else:
|
|
sys.exit(1)
|
|
except Exception as e:
|
|
print(f"❌ Exception: {e}")
|
|
if endpoint == '/api/v1/auth/me':
|
|
print("Endpoint may not exist, skipping")
|
|
else:
|
|
sys.exit(1)
|
|
|
|
print("\n" + "="*60)
|
|
print("✅ All auth tests passed!")
|
|
print("="*60)
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(test_auth()) |