LinkDesk/backend/test_project_thumbnail.py

202 lines
6.1 KiB
Python

"""
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()