Init Repo
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Test script to verify migration integrity and shot operations.
|
||||
"""
|
||||
|
||||
import sqlite3
|
||||
import sys
|
||||
|
||||
def test_migration_integrity():
|
||||
"""Test the integrity of the migration and shot operations."""
|
||||
print("Testing migration integrity and shot operations...")
|
||||
|
||||
conn = sqlite3.connect('vfx_project_management.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
try:
|
||||
# Test 1: Verify all shots have project_id
|
||||
cursor.execute('SELECT COUNT(*) FROM shots WHERE project_id IS NULL')
|
||||
null_count = cursor.fetchone()[0]
|
||||
print(f'✅ Shots with NULL project_id: {null_count} (should be 0)')
|
||||
|
||||
# Test 2: Verify project-episode consistency
|
||||
cursor.execute('''
|
||||
SELECT COUNT(*) FROM shots s
|
||||
JOIN episodes e ON s.episode_id = e.id
|
||||
WHERE s.project_id != e.project_id
|
||||
''')
|
||||
inconsistent_count = cursor.fetchone()[0]
|
||||
print(f'✅ Shots with inconsistent project_id: {inconsistent_count} (should be 0)')
|
||||
|
||||
# Test 3: Check foreign key constraints work
|
||||
cursor.execute('PRAGMA foreign_keys = ON')
|
||||
try:
|
||||
cursor.execute('INSERT INTO shots (project_id, episode_id, name) VALUES (99999, 1, "test_shot")')
|
||||
cursor.execute('DELETE FROM shots WHERE name = "test_shot"')
|
||||
print('❌ ERROR: Foreign key constraint not working!')
|
||||
return False
|
||||
except sqlite3.IntegrityError as e:
|
||||
print(f'✅ Foreign key constraint working: {str(e)[:50]}...')
|
||||
|
||||
# Test 4: Check unique constraint works for project-scoped names
|
||||
cursor.execute('SELECT project_id, name FROM shots WHERE deleted_at IS NULL LIMIT 1')
|
||||
result = cursor.fetchone()
|
||||
if result:
|
||||
project_id, name = result
|
||||
try:
|
||||
# Try to insert a shot with same name in same project
|
||||
cursor.execute('INSERT INTO shots (project_id, episode_id, name) VALUES (?, 1, ?)', (project_id, name))
|
||||
cursor.execute('DELETE FROM shots WHERE name = ?', (name,))
|
||||
print('❌ ERROR: Unique constraint not working!')
|
||||
return False
|
||||
except sqlite3.IntegrityError as e:
|
||||
print(f'✅ Unique constraint working: {str(e)[:50]}...')
|
||||
|
||||
# Test 5: Verify indexes exist
|
||||
cursor.execute("PRAGMA index_list(shots)")
|
||||
indexes = [index[1] for index in cursor.fetchall()]
|
||||
required_indexes = ['idx_shots_project_id', 'idx_shots_name', 'idx_shots_project_name_unique']
|
||||
|
||||
for index_name in required_indexes:
|
||||
if index_name in indexes:
|
||||
print(f'✅ Index {index_name} exists')
|
||||
else:
|
||||
print(f'❌ Index {index_name} missing')
|
||||
return False
|
||||
|
||||
# Test 6: Test project filtering
|
||||
cursor.execute('SELECT DISTINCT project_id FROM shots LIMIT 2')
|
||||
project_ids = [row[0] for row in cursor.fetchall()]
|
||||
|
||||
if len(project_ids) >= 1:
|
||||
test_project_id = project_ids[0]
|
||||
cursor.execute('SELECT COUNT(*) FROM shots WHERE project_id = ?', (test_project_id,))
|
||||
project_shot_count = cursor.fetchone()[0]
|
||||
print(f'✅ Project filtering works: Project {test_project_id} has {project_shot_count} shots')
|
||||
|
||||
# Test 7: Show summary statistics
|
||||
cursor.execute('''
|
||||
SELECT p.name, COUNT(s.id) as shot_count
|
||||
FROM projects p
|
||||
LEFT JOIN shots s ON p.id = s.project_id AND s.deleted_at IS NULL
|
||||
GROUP BY p.id, p.name
|
||||
ORDER BY shot_count DESC
|
||||
LIMIT 5
|
||||
''')
|
||||
|
||||
print("\n📊 Shot distribution by project (top 5):")
|
||||
for project_name, shot_count in cursor.fetchall():
|
||||
print(f" {project_name}: {shot_count} shots")
|
||||
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Test failed with error: {e}")
|
||||
return False
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
success = test_migration_integrity()
|
||||
if success:
|
||||
print("\n✅ All migration integrity tests passed!")
|
||||
sys.exit(0)
|
||||
else:
|
||||
print("\n❌ Some tests failed!")
|
||||
sys.exit(1)
|
||||
Reference in New Issue
Block a user