import unittest
from unittest.mock import MagicMock, patch
import threading
import json
import time
from src.multi_agent_conductor import run_worker_lifecycle
from src.models import Ticket, WorkerContext

class TestRunWorkerLifecycleAbort(unittest.TestCase):
 def test_run_worker_lifecycle_returns_early_on_abort(self):
  """
  
    
      Test that run_worker_lifecycle returns early and marks ticket as 'killed'
      if the abort event is set for the ticket.
  """
  # Mock ai_client.send
  with patch('src.ai_client.send') as mock_send:
   # Mock ticket and context
   ticket = Ticket(id="T-001", description="Test task")
   ticket = Ticket(id="T-001", description="Test task")
   context = WorkerContext(ticket_id="T-001", model_name="test-model")
   # Mock engine with _abort_events dict
   mock_engine = MagicMock()
   abort_event = threading.Event()
   mock_engine._abort_events = {"T-001": abort_event}
   
   # Set abort event
   abort_event.set()
   
   # Call run_worker_lifecycle
   # md_content is expected to be passed if called like in ConductorEngine
   run_worker_lifecycle(ticket, context, engine=mock_engine, md_content="test context")
   
   # Assert ticket status is 'killed'
   self.assertEqual(ticket.status, "killed")
   
   # Also assert ai_client.send was NOT called
   mock_send.assert_not_called()

if __name__ == "__main__":
 unittest.main()