LinkDesk/backend/test_custom_status_demo.py

138 lines
4.4 KiB
Python

"""
Demo script showing custom task status creation functionality
"""
import requests
import json
BASE_URL = "http://localhost:8000"
def login():
"""Login and get access token"""
response = requests.post(
f"{BASE_URL}/auth/login",
json={"email": "admin@vfx.com", "password": "admin123"}
)
return response.json()["access_token"] if response.status_code == 200 else None
def demo():
print("=" * 70)
print("CUSTOM TASK STATUS CREATION - DEMO")
print("=" * 70)
token = login()
if not token:
print("❌ Login failed")
return
headers = {"Authorization": f"Bearer {token}"}
project_id = 1
print("\n✅ Successfully logged in as admin")
# Get initial state
print("\n" + "-" * 70)
print("STEP 1: Get current task statuses")
print("-" * 70)
response = requests.get(
f"{BASE_URL}/projects/{project_id}/task-statuses",
headers=headers
)
if response.status_code == 200:
data = response.json()
print(f"System statuses: {len(data['system_statuses'])}")
print(f"Custom statuses: {len(data['statuses'])}")
initial_count = len(data['statuses'])
# Create status with auto-assigned color
print("\n" + "-" * 70)
print("STEP 2: Create status with auto-assigned color")
print("-" * 70)
print("Request: POST /projects/1/task-statuses")
print('Payload: {"name": "Needs Feedback"}')
response = requests.post(
f"{BASE_URL}/projects/{project_id}/task-statuses",
headers=headers,
json={"name": "Needs Feedback"}
)
if response.status_code == 201:
data = response.json()
print(f"\n✅ Status created successfully!")
print(f" ID: {data['status']['id']}")
print(f" Name: {data['status']['name']}")
print(f" Color: {data['status']['color']} (auto-assigned)")
print(f" Order: {data['status']['order']}")
else:
print(f"❌ Failed: {response.status_code}")
print(f" {response.json()}")
# Create status with custom color
print("\n" + "-" * 70)
print("STEP 3: Create status with custom color")
print("-" * 70)
print("Request: POST /projects/1/task-statuses")
print('Payload: {"name": "Client Review", "color": "#FF6B6B"}')
response = requests.post(
f"{BASE_URL}/projects/{project_id}/task-statuses",
headers=headers,
json={"name": "Client Review", "color": "#FF6B6B"}
)
if response.status_code == 201:
data = response.json()
print(f"\n✅ Status created successfully!")
print(f" ID: {data['status']['id']}")
print(f" Name: {data['status']['name']}")
print(f" Color: {data['status']['color']} (custom)")
print(f" Order: {data['status']['order']}")
else:
print(f"❌ Failed: {response.status_code}")
print(f" {response.json()}")
# Try to create duplicate
print("\n" + "-" * 70)
print("STEP 4: Try to create duplicate (should fail)")
print("-" * 70)
print("Request: POST /projects/1/task-statuses")
print('Payload: {"name": "Needs Feedback"}')
response = requests.post(
f"{BASE_URL}/projects/{project_id}/task-statuses",
headers=headers,
json={"name": "Needs Feedback"}
)
if response.status_code == 409:
print(f"\n✅ Correctly rejected duplicate!")
print(f" Status: {response.status_code} Conflict")
print(f" Message: {response.json()['detail']}")
else:
print(f"❌ Unexpected response: {response.status_code}")
# Get final state
print("\n" + "-" * 70)
print("STEP 5: Get updated task statuses")
print("-" * 70)
response = requests.get(
f"{BASE_URL}/projects/{project_id}/task-statuses",
headers=headers
)
if response.status_code == 200:
data = response.json()
print(f"System statuses: {len(data['system_statuses'])}")
print(f"Custom statuses: {len(data['statuses'])}")
print(f"\nAll custom statuses:")
for status in data['statuses']:
default_marker = " (DEFAULT)" if status['is_default'] else ""
print(f"{status['name']}{default_marker}")
print(f" ID: {status['id']}, Color: {status['color']}, Order: {status['order']}")
print("\n" + "=" * 70)
print("DEMO COMPLETE")
print("=" * 70)
if __name__ == "__main__":
demo()