138 lines
4.4 KiB
Python
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()
|