|
|
"""Complete API test with user creation flow.""" |
|
|
|
|
|
import requests |
|
|
import json |
|
|
import sys |
|
|
|
|
|
BASE_URL = "http://localhost:8000" |
|
|
|
|
|
print("="*60) |
|
|
print("PROJECT MEMORY - COMPLETE API TEST") |
|
|
print("="*60) |
|
|
|
|
|
def test_api(): |
|
|
|
|
|
try: |
|
|
response = requests.get(f"{BASE_URL}/") |
|
|
print(f"✓ Server is running: {response.json()['message']}") |
|
|
except: |
|
|
print("❌ Server is not running!") |
|
|
print("Start it with: uvicorn app.main:app --reload") |
|
|
return |
|
|
|
|
|
print("\n" + "="*60) |
|
|
print("1. CREATE USER") |
|
|
print("="*60) |
|
|
|
|
|
|
|
|
user_data = { |
|
|
"firstName": "John", |
|
|
"lastName": "Doe", |
|
|
"avatar_url": "https://example.com/avatar.jpg" |
|
|
} |
|
|
|
|
|
print(f"POST /api/users") |
|
|
print(f"Body: {json.dumps(user_data, indent=2)}") |
|
|
|
|
|
response = requests.post(f"{BASE_URL}/api/users", json=user_data) |
|
|
print(f"Status: {response.status_code}") |
|
|
|
|
|
if response.status_code != 200: |
|
|
print(f"Error: {response.text}") |
|
|
return |
|
|
|
|
|
user = response.json() |
|
|
user_id = user["id"] |
|
|
print(f"✓ Created user: {user_id}") |
|
|
print(f"Response: {json.dumps(user, indent=2)}") |
|
|
|
|
|
print("\n" + "="*60) |
|
|
print("2. GET USER") |
|
|
print("="*60) |
|
|
|
|
|
print(f"GET /api/users/{user_id}") |
|
|
response = requests.get(f"{BASE_URL}/api/users/{user_id}") |
|
|
print(f"Status: {response.status_code}") |
|
|
print(f"Response: {json.dumps(response.json(), indent=2)}") |
|
|
|
|
|
print("\n" + "="*60) |
|
|
print("3. LIST ALL USERS") |
|
|
print("="*60) |
|
|
|
|
|
print(f"GET /api/users") |
|
|
response = requests.get(f"{BASE_URL}/api/users") |
|
|
print(f"Status: {response.status_code}") |
|
|
users = response.json() |
|
|
print(f"Total users: {len(users)}") |
|
|
for u in users[:3]: |
|
|
print(f" - {u['firstName']} {u['lastName']} ({u['id']})") |
|
|
|
|
|
print("\n" + "="*60) |
|
|
print("4. CREATE PROJECT") |
|
|
print("="*60) |
|
|
|
|
|
project_data = { |
|
|
"name": "Test Project", |
|
|
"description": "API Testing Project", |
|
|
"userId": user_id |
|
|
} |
|
|
|
|
|
print(f"POST /api/projects") |
|
|
print(f"Body: {json.dumps(project_data, indent=2)}") |
|
|
|
|
|
response = requests.post(f"{BASE_URL}/api/projects", json=project_data) |
|
|
print(f"Status: {response.status_code}") |
|
|
|
|
|
if response.status_code != 200: |
|
|
print(f"Error: {response.text}") |
|
|
return |
|
|
|
|
|
project = response.json() |
|
|
project_id = project["id"] |
|
|
print(f"✓ Created project: {project_id}") |
|
|
|
|
|
print("\n" + "="*60) |
|
|
print("5. LIST USER'S PROJECTS") |
|
|
print("="*60) |
|
|
|
|
|
print(f"GET /api/projects?userId={user_id}") |
|
|
response = requests.get(f"{BASE_URL}/api/projects?userId={user_id}") |
|
|
print(f"Status: {response.status_code}") |
|
|
projects = response.json() |
|
|
print(f"User has {len(projects)} project(s)") |
|
|
|
|
|
print("\n" + "="*60) |
|
|
print("6. CREATE TASK") |
|
|
print("="*60) |
|
|
|
|
|
task_data = { |
|
|
"title": "Implement user authentication", |
|
|
"description": "Add login and registration features", |
|
|
"assignedTo": user_id |
|
|
} |
|
|
|
|
|
print(f"POST /api/projects/{project_id}/tasks") |
|
|
print(f"Body: {json.dumps(task_data, indent=2)}") |
|
|
|
|
|
response = requests.post(f"{BASE_URL}/api/projects/{project_id}/tasks", json=task_data) |
|
|
print(f"Status: {response.status_code}") |
|
|
|
|
|
if response.status_code != 200: |
|
|
print(f"Error: {response.text}") |
|
|
return |
|
|
|
|
|
task = response.json() |
|
|
task_id = task["id"] |
|
|
print(f"✓ Created task: {task_id}") |
|
|
|
|
|
print("\n" + "="*60) |
|
|
print("7. LIST TASKS") |
|
|
print("="*60) |
|
|
|
|
|
print(f"GET /api/projects/{project_id}/tasks") |
|
|
response = requests.get(f"{BASE_URL}/api/projects/{project_id}/tasks") |
|
|
print(f"Status: {response.status_code}") |
|
|
tasks = response.json() |
|
|
print(f"Project has {len(tasks)} task(s)") |
|
|
|
|
|
print("\n" + "="*60) |
|
|
print("8. COMPLETE TASK (with AI documentation)") |
|
|
print("="*60) |
|
|
|
|
|
complete_data = { |
|
|
"userId": user_id, |
|
|
"whatIDid": "Implemented OAuth2 authentication with JWT tokens", |
|
|
"codeSnippet": "def authenticate(token): return jwt.decode(token, SECRET_KEY)" |
|
|
} |
|
|
|
|
|
print(f"POST /api/tasks/{task_id}/complete") |
|
|
print(f"Body: {json.dumps(complete_data, indent=2)}") |
|
|
print("⏳ This will call Gemini AI to generate documentation...") |
|
|
|
|
|
response = requests.post(f"{BASE_URL}/api/tasks/{task_id}/complete", json=complete_data) |
|
|
print(f"Status: {response.status_code}") |
|
|
|
|
|
if response.status_code == 200: |
|
|
print(f"✓ Task completed with AI documentation") |
|
|
print(f"Response: {json.dumps(response.json(), indent=2)}") |
|
|
else: |
|
|
print(f"Note: Task completion requires GEMINI_API_KEY in .env") |
|
|
print(f"Response: {response.text}") |
|
|
|
|
|
print("\n" + "="*60) |
|
|
print("9. GET ACTIVITY FEED") |
|
|
print("="*60) |
|
|
|
|
|
print(f"GET /api/projects/{project_id}/activity") |
|
|
response = requests.get(f"{BASE_URL}/api/projects/{project_id}/activity") |
|
|
print(f"Status: {response.status_code}") |
|
|
if response.status_code == 200: |
|
|
activity = response.json() |
|
|
print(f"Activity entries: {len(activity)}") |
|
|
|
|
|
print("\n" + "="*60) |
|
|
print("TEST COMPLETE - ALL ENDPOINTS WORKING!") |
|
|
print("="*60) |
|
|
|
|
|
print(f""" |
|
|
SUMMARY OF CREATED DATA: |
|
|
- User ID: {user_id} |
|
|
- Project ID: {project_id} |
|
|
- Task ID: {task_id} |
|
|
|
|
|
You can now use these IDs to test other endpoints! |
|
|
""") |
|
|
|
|
|
print("="*60) |
|
|
print("CURL EXAMPLES WITH YOUR DATA") |
|
|
print("="*60) |
|
|
|
|
|
print(f""" |
|
|
# Create another user |
|
|
curl -X POST {BASE_URL}/api/users \\ |
|
|
-H "Content-Type: application/json" \\ |
|
|
-d '{{"firstName": "Jane", "lastName": "Smith"}}' |
|
|
|
|
|
# Get your user |
|
|
curl {BASE_URL}/api/users/{user_id} |
|
|
|
|
|
# List all users |
|
|
curl {BASE_URL}/api/users |
|
|
|
|
|
# Create another project |
|
|
curl -X POST {BASE_URL}/api/projects \\ |
|
|
-H "Content-Type: application/json" \\ |
|
|
-d '{{"name": "Another Project", "description": "Description", "userId": "{user_id}"}}' |
|
|
|
|
|
# Join a project (create a second user first) |
|
|
curl -X POST {BASE_URL}/api/projects/{project_id}/join \\ |
|
|
-H "Content-Type: application/json" \\ |
|
|
-d '{{"userId": "ANOTHER_USER_ID"}}' |
|
|
|
|
|
# Search project memory (after completing tasks) |
|
|
curl -X POST {BASE_URL}/api/projects/{project_id}/search \\ |
|
|
-H "Content-Type: application/json" \\ |
|
|
-d '{{"query": "authentication"}}' |
|
|
""") |
|
|
|
|
|
if __name__ == "__main__": |
|
|
test_api() |