#!/usr/bin/env python3 """ Test script to verify that shot deletion properly sets deleted_by and deleted_at fields. """ import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__))) from database import get_db from models.shot import Shot from models.user import User from models.project import Project from models.episode import Episode from services.shot_soft_deletion import ShotSoftDeletionService from sqlalchemy.orm import Session def test_shot_deletion_fields(): """Test that shot deletion properly sets deleted_by and deleted_at fields.""" # Get database session db = next(get_db()) try: # Find an existing shot that's not deleted shot = db.query(Shot).filter(Shot.deleted_at.is_(None)).first() if not shot: print("No active shots found to test deletion") return # Find an admin user to perform the deletion admin_user = db.query(User).filter(User.is_admin == True).first() if not admin_user: print("No admin user found to perform deletion") return print(f"Testing deletion of shot: {shot.name} (ID: {shot.id})") print(f"Deleting as user: {admin_user.email} (ID: {admin_user.id})") # Check initial state print(f"Before deletion - deleted_at: {shot.deleted_at}, deleted_by: {shot.deleted_by}") # Perform soft deletion deletion_service = ShotSoftDeletionService() result = deletion_service.soft_delete_shot_cascade(shot.id, db, admin_user) if not result.success: print(f"Deletion failed: {result.errors}") return # Commit the transaction (this was the missing piece!) db.commit() # Refresh the shot object to get updated values db.refresh(shot) # Check final state print(f"After deletion - deleted_at: {shot.deleted_at}, deleted_by: {shot.deleted_by}") print(f"Deletion result - success: {result.success}") print(f"Deletion result - deleted_by: {result.deleted_by}") print(f"Deletion result - deleted_at: {result.deleted_at}") # Verify the fields are set if shot.deleted_at is not None and shot.deleted_by is not None: print("✅ SUCCESS: Both deleted_at and deleted_by fields are properly set!") else: print("❌ FAILURE: deleted_at or deleted_by fields are still None") except Exception as e: print(f"Error during test: {e}") db.rollback() finally: db.close() if __name__ == "__main__": test_shot_deletion_fields()