LinkDesk/backend/test_bulk_shot_edge_cases.py

175 lines
5.3 KiB
Python

"""
Test edge cases for bulk shot creation project validation
"""
import requests
import json
BASE_URL = "http://localhost:8000"
# Test credentials
LOGIN_DATA = {
"email": "admin@vfx.com",
"password": "admin123"
}
def login():
"""Login and get access token"""
response = requests.post(f"{BASE_URL}/auth/login", json=LOGIN_DATA)
if response.status_code == 200:
return response.json()["access_token"]
else:
print(f"Login failed: {response.status_code}")
return None
def test_bulk_shot_edge_cases():
"""Test edge cases for bulk shot creation"""
print("=== Test: Bulk Shot Creation Edge Cases ===\n")
token = login()
if not token:
return
headers = {"Authorization": f"Bearer {token}"}
episode_id = 1
# Test 1: Large bulk creation
print("1. Testing large bulk creation (50 shots)...")
import time
timestamp = int(time.time())
large_bulk_data = {
"name_prefix": f"LARGE_{timestamp}_",
"shot_count": 50,
"start_number": 1,
"number_padding": 3,
"frame_start": 1001,
"frame_end": 1100,
"description_template": "Large bulk test shot {shot_name}",
"create_default_tasks": True
}
response = requests.post(
f"{BASE_URL}/shots/bulk?episode_id={episode_id}",
headers=headers,
json=large_bulk_data
)
print(f" Status: {response.status_code}")
if response.status_code == 201:
result = response.json()
print(f" ✓ Success: Created {len(result['created_shots'])} shots")
print(f" ✓ All same project: {len(set(shot['project_id'] for shot in result['created_shots'])) == 1}")
print(f" ✓ Total tasks: {result['created_tasks_count']}")
else:
print(f" ✗ Error: {response.json()}")
# Test 2: Zero padding edge case
print("\n2. Testing zero padding...")
zero_pad_data = {
"name_prefix": f"ZERO_{timestamp}_",
"shot_count": 3,
"start_number": 1,
"number_padding": 1, # Minimal padding
"frame_start": 1001,
"frame_end": 1100,
"create_default_tasks": False
}
response = requests.post(
f"{BASE_URL}/shots/bulk?episode_id={episode_id}",
headers=headers,
json=zero_pad_data
)
print(f" Status: {response.status_code}")
if response.status_code == 201:
result = response.json()
shot_names = [shot['name'] for shot in result['created_shots']]
print(f" ✓ Success: {shot_names}")
print(f" ✓ Correct naming: {all('_' + str(i+1) in name for i, name in enumerate(shot_names))}")
else:
print(f" ✗ Error: {response.json()}")
# Test 3: High start number
print("\n3. Testing high start number...")
high_start_data = {
"name_prefix": f"HIGH_{timestamp}_",
"shot_count": 3,
"start_number": 9998, # High number
"number_padding": 4,
"frame_start": 1001,
"frame_end": 1100,
"create_default_tasks": False
}
response = requests.post(
f"{BASE_URL}/shots/bulk?episode_id={episode_id}",
headers=headers,
json=high_start_data
)
print(f" Status: {response.status_code}")
if response.status_code == 201:
result = response.json()
shot_names = [shot['name'] for shot in result['created_shots']]
print(f" ✓ Success: {shot_names}")
expected_names = [f"HIGH_{timestamp}_9998", f"HIGH_{timestamp}_9999", f"HIGH_{timestamp}_{10000:04d}"]
print(f" ✓ Expected names match: {shot_names == expected_names}")
else:
print(f" ✗ Error: {response.json()}")
# Test 4: Invalid episode ID
print("\n4. Testing invalid episode ID...")
invalid_episode_data = {
"name_prefix": f"INVALID_{timestamp}_",
"shot_count": 1,
"start_number": 1,
"number_padding": 3,
"frame_start": 1001,
"frame_end": 1100,
"create_default_tasks": False
}
response = requests.post(
f"{BASE_URL}/shots/bulk?episode_id=99999", # Non-existent episode
headers=headers,
json=invalid_episode_data
)
print(f" Status: {response.status_code}")
if response.status_code == 404:
print(f" ✓ Correctly rejected invalid episode: {response.json()['detail']}")
else:
print(f" ✗ Should have rejected invalid episode: {response.json()}")
# Test 5: Empty prefix
print("\n5. Testing empty prefix...")
empty_prefix_data = {
"name_prefix": "", # Empty prefix
"shot_count": 1,
"start_number": 1,
"number_padding": 3,
"frame_start": 1001,
"frame_end": 1100,
"create_default_tasks": False
}
response = requests.post(
f"{BASE_URL}/shots/bulk?episode_id={episode_id}",
headers=headers,
json=empty_prefix_data
)
print(f" Status: {response.status_code}")
if response.status_code == 422: # Validation error
print(f" ✓ Correctly rejected empty prefix")
else:
print(f" ✗ Should have rejected empty prefix: {response.json()}")
print("\n=== Edge Cases Test Completed ===")
if __name__ == "__main__":
test_bulk_shot_edge_cases()