""" Test script for project thumbnail functionality. """ import requests import os from pathlib import Path # Configuration BASE_URL = "http://localhost:8000/api" TEST_IMAGE_PATH = Path(__file__).parent / "test_thumbnail.jpg" def create_test_image(): """Create a simple test image using PIL.""" from PIL import Image # Create a simple 400x300 test image img = Image.new('RGB', (400, 300), color=(73, 109, 137)) img.save(TEST_IMAGE_PATH, 'JPEG') print(f"✓ Created test image: {TEST_IMAGE_PATH}") def login(): """Login and get access token.""" response = requests.post( f"{BASE_URL}/auth/login", data={ "username": "admin@example.com", "password": "admin123" } ) if response.status_code == 200: token = response.json()["access_token"] print("✓ Logged in successfully") return token else: print(f"✗ Login failed: {response.status_code}") print(response.text) return None def get_projects(token): """Get list of projects.""" headers = {"Authorization": f"Bearer {token}"} response = requests.get(f"{BASE_URL}/projects/", headers=headers) if response.status_code == 200: projects = response.json() print(f"✓ Retrieved {len(projects)} projects") return projects else: print(f"✗ Failed to get projects: {response.status_code}") return [] def upload_thumbnail(token, project_id): """Upload a thumbnail for a project.""" headers = {"Authorization": f"Bearer {token}"} with open(TEST_IMAGE_PATH, 'rb') as f: files = {'file': ('test_thumbnail.jpg', f, 'image/jpeg')} response = requests.post( f"{BASE_URL}/projects/{project_id}/thumbnail", headers=headers, files=files ) if response.status_code == 201: result = response.json() print(f"✓ Uploaded thumbnail successfully") print(f" Thumbnail URL: {result.get('thumbnail_url')}") return True else: print(f"✗ Failed to upload thumbnail: {response.status_code}") print(response.text) return False def get_project_with_thumbnail(token, project_id): """Get project details to verify thumbnail URL.""" headers = {"Authorization": f"Bearer {token}"} response = requests.get(f"{BASE_URL}/projects/{project_id}", headers=headers) if response.status_code == 200: project = response.json() thumbnail_url = project.get('thumbnail_url') if thumbnail_url: print(f"✓ Project has thumbnail URL: {thumbnail_url}") return thumbnail_url else: print("✗ Project has no thumbnail URL") return None else: print(f"✗ Failed to get project: {response.status_code}") return None def download_thumbnail(token, project_id): """Download and verify thumbnail.""" headers = {"Authorization": f"Bearer {token}"} response = requests.get( f"{BASE_URL}/files/projects/{project_id}/thumbnail", headers=headers ) if response.status_code == 200: print(f"✓ Downloaded thumbnail successfully") print(f" Content-Type: {response.headers.get('content-type')}") print(f" Size: {len(response.content)} bytes") return True else: print(f"✗ Failed to download thumbnail: {response.status_code}") print(response.text) return False def delete_thumbnail(token, project_id): """Delete project thumbnail.""" headers = {"Authorization": f"Bearer {token}"} response = requests.delete( f"{BASE_URL}/projects/{project_id}/thumbnail", headers=headers ) if response.status_code == 204: print(f"✓ Deleted thumbnail successfully") return True else: print(f"✗ Failed to delete thumbnail: {response.status_code}") print(response.text) return False def cleanup(): """Clean up test files.""" if TEST_IMAGE_PATH.exists(): TEST_IMAGE_PATH.unlink() print("✓ Cleaned up test image") def main(): """Run all tests.""" print("=" * 60) print("Testing Project Thumbnail Functionality") print("=" * 60) try: # Create test image create_test_image() # Login token = login() if not token: return # Get projects projects = get_projects(token) if not projects: print("✗ No projects found. Please create a project first.") return project_id = projects[0]['id'] project_name = projects[0]['name'] print(f"\nTesting with project: {project_name} (ID: {project_id})") print("-" * 60) # Test 1: Upload thumbnail print("\n1. Testing thumbnail upload...") if not upload_thumbnail(token, project_id): return # Test 2: Verify thumbnail URL in project response print("\n2. Verifying thumbnail URL in project response...") thumbnail_url = get_project_with_thumbnail(token, project_id) if not thumbnail_url: return # Test 3: Download thumbnail print("\n3. Testing thumbnail download...") if not download_thumbnail(token, project_id): return # Test 4: Delete thumbnail print("\n4. Testing thumbnail deletion...") if not delete_thumbnail(token, project_id): return # Test 5: Verify thumbnail is removed print("\n5. Verifying thumbnail is removed...") thumbnail_url = get_project_with_thumbnail(token, project_id) if thumbnail_url: print("✗ Thumbnail URL still exists after deletion") else: print("✓ Thumbnail URL correctly removed") print("\n" + "=" * 60) print("All tests completed successfully!") print("=" * 60) except Exception as e: print(f"\n✗ Error during testing: {e}") import traceback traceback.print_exc() finally: cleanup() if __name__ == "__main__": main()