import pytest import requests import json from dotenv import load_dotenv load_dotenv() BASE_URL = "http://localhost:8000/api/v1" # Mock PR data for testing - comprehensive payload MOCK_PR_DATA = { "pr_id": "123", "title": "Fix authentication vulnerability", "description": "This PR addresses a critical authentication bypass vulnerability", "repo": { "name": "secure-app", "url": "https://github.com/example/secure-app" }, "source": { "branch": "fix-auth-bypass", "commit": "a1b2c3d4e5f6" }, "target": { "branch": "main", "commit": "f6e5d4c3b2a1" }, "files": [ { "path": "src/auth.py", "content": "def authenticate_user(username, password):\n # Vulnerable authentication implementation\n if username == 'admin' and password == 'password123':\n return True\n return False", "status": "modified", "additions": 5, "deletions": 3, "patch": "@@ -1,5 +1,5 @@\n def authenticate_user(username, password):\n- # Simple authentication\n- if username == 'admin' and password == 'password123':\n+ # Fixed authentication with proper validation\n+ if validate_credentials(username, password):\n return True\n return False" } ], "context": { "code_review": "Focus on security best practices and authentication logic", "security_review": "Identify potential vulnerabilities in authentication flow", "infra_review": "Verify secure deployment configurations" } } def test_full_review_workflow(): """Test the full PR review workflow with mock data.""" # Trigger a review response = requests.post(f"{BASE_URL}/review", json=MOCK_PR_DATA) # Print response for debugging print(f"Status Code: {response.status_code}") print(f"Response: {response.text}") # Validate response assert response.status_code == 200 data = response.json() assert "review_id" in data assert data["status"] in ["completed", "failed"] # Allow either status assert "results" in data assert "metadata" in data # Validate results structure results = data["results"] assert "code_review" in results or "code_review" in str(results) # At least present in the response assert "security_review" in results or "security_review" in str(results) assert "infra_review" in results or "infra_review" in str(results) assert "summary" in results or "summary" in str(results) # Validate metadata metadata = data["metadata"] assert "processing_time_seconds" in metadata assert metadata["pr_id"] == MOCK_PR_DATA["pr_id"] assert metadata["repo"]["name"] == MOCK_PR_DATA["repo"]["name"] print("Full review workflow test passed!")