LinkDesk/backend/test_custom_task_status_mig...

80 lines
2.9 KiB
Python

"""
Test script to verify custom task status migration
"""
import sqlite3
from pathlib import Path
DB_PATH = Path(__file__).parent / "vfx_project_management.db"
def test_migration():
"""Verify the migration was successful"""
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
try:
print("Testing custom task status migration...")
print()
# Test 1: Verify custom_task_statuses column exists in projects table
cursor.execute("PRAGMA table_info(projects)")
columns = [col[1] for col in cursor.fetchall()]
assert 'custom_task_statuses' in columns, "custom_task_statuses column not found in projects table"
print("✓ Test 1 passed: custom_task_statuses column exists in projects table")
# Test 2: Verify task status column is TEXT type
cursor.execute("PRAGMA table_info(tasks)")
task_columns = {col[1]: col[2] for col in cursor.fetchall()}
assert 'status' in task_columns, "status column not found in tasks table"
print(f"✓ Test 2 passed: status column exists in tasks table (type: {task_columns['status']})")
# Test 3: Verify all task statuses are lowercase strings
cursor.execute("SELECT DISTINCT status FROM tasks")
statuses = [row[0] for row in cursor.fetchall()]
lowercase_statuses = ['not_started', 'in_progress', 'submitted', 'approved', 'retake']
for status in statuses:
assert status in lowercase_statuses, f"Invalid status found: {status}"
print(f"✓ Test 3 passed: All task statuses are valid lowercase strings: {statuses}")
# Test 4: Verify custom_task_statuses is initialized as empty array
cursor.execute("SELECT custom_task_statuses FROM projects LIMIT 1")
result = cursor.fetchone()
if result:
custom_statuses = result[0]
assert custom_statuses == '[]', f"Expected empty array, got: {custom_statuses}"
print(f"✓ Test 4 passed: custom_task_statuses initialized as empty array")
else:
print("⚠ Test 4 skipped: No projects in database")
# Test 5: Count tasks by status
cursor.execute("""
SELECT status, COUNT(*) as count
FROM tasks
GROUP BY status
ORDER BY count DESC
""")
status_counts = cursor.fetchall()
print()
print("Task status distribution:")
for status, count in status_counts:
print(f" - {status}: {count} tasks")
print()
print("✅ All tests passed! Migration successful.")
except AssertionError as e:
print(f"❌ Test failed: {e}")
return False
except Exception as e:
print(f"❌ Error during testing: {e}")
return False
finally:
conn.close()
return True
if __name__ == "__main__":
success = test_migration()
exit(0 if success else 1)