Initial commit - PromptTech
This commit is contained in:
80
backend/test_upload_comprehensive.py
Normal file
80
backend/test_upload_comprehensive.py
Normal file
@@ -0,0 +1,80 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Comprehensive test for image upload functionality
|
||||
Tests various scenarios to ensure robust upload handling
|
||||
"""
|
||||
import requests
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# Add backend to path
|
||||
sys.path.insert(0, str(Path(__file__).parent))
|
||||
|
||||
from test_upload import SECRET_KEY, ALGORITHM
|
||||
import jwt
|
||||
from datetime import datetime, timezone, timedelta
|
||||
|
||||
# Generate admin token
|
||||
def get_admin_token():
|
||||
expires = datetime.now(timezone.utc) + timedelta(hours=24)
|
||||
token_data = {
|
||||
"sub": "0739d174-9409-4bd1-b749-69f9e5546467f", # Admin user ID
|
||||
"email": "admin@techzone.com",
|
||||
"exp": expires
|
||||
}
|
||||
return jwt.encode(token_data, SECRET_KEY, algorithm=ALGORITHM)
|
||||
|
||||
def test_upload(filename, content, content_type=None):
|
||||
"""Test uploading a file"""
|
||||
token = get_admin_token()
|
||||
|
||||
files = {'file': (filename, content, content_type)}
|
||||
headers = {'Authorization': f'Bearer {token}'}
|
||||
|
||||
print(f"\n{'='*60}")
|
||||
print(f"Testing upload: {filename}")
|
||||
print(f"Content-Type: {content_type}")
|
||||
print(f"Size: {len(content)} bytes")
|
||||
print(f"{'='*60}")
|
||||
|
||||
try:
|
||||
response = requests.post(
|
||||
'http://localhost:8181/api/upload/image',
|
||||
files=files,
|
||||
headers=headers
|
||||
)
|
||||
|
||||
if response.status_code == 200:
|
||||
print(f"✅ SUCCESS: {response.json()}")
|
||||
return True
|
||||
else:
|
||||
print(f"❌ FAILED ({response.status_code}): {response.json()}")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"❌ ERROR: {e}")
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Test 1: Real JPEG with proper content type
|
||||
with open('/tmp/test-image.jpg', 'rb') as f:
|
||||
content = f.read()
|
||||
test_upload('test.jpg', content, 'image/jpeg')
|
||||
|
||||
# Test 2: JPEG with no content type (browser might do this)
|
||||
test_upload('test2.jpg', content, None)
|
||||
|
||||
# Test 3: PNG extension
|
||||
test_upload('test.png', content, 'image/png')
|
||||
|
||||
# Test 4: File with uppercase extension
|
||||
test_upload('TEST.JPG', content, 'image/jpeg')
|
||||
|
||||
# Test 5: No extension but has content type
|
||||
test_upload('image', content, 'image/jpeg')
|
||||
|
||||
# Test 6: Invalid extension
|
||||
test_upload('file.txt', b'not an image', 'text/plain')
|
||||
|
||||
print(f"\n{'='*60}")
|
||||
print("Test complete!")
|
||||
print(f"{'='*60}\n")
|
||||
Reference in New Issue
Block a user