@@ -829,6 +829,29 @@ def test_update_task_v2_404_falls_back_to_v1(self):
829829 mock_v1 .assert_called_once ()
830830 self .assertIsNone (result )
831831
832+ @patch ('time.sleep' , Mock (return_value = None ))
833+ def test_update_task_v2_405_falls_back_to_v1 (self ):
834+ """When server returns 405 for v2 endpoint (older Conductor), should fall back to v1."""
835+ worker = MockWorker ('test_task' )
836+ task_runner = TaskRunner (worker = worker )
837+
838+ task_result = TaskResult (
839+ task_id = 'test_id' ,
840+ workflow_instance_id = 'wf_id' ,
841+ worker_id = worker .get_identity (),
842+ status = TaskResultStatus .COMPLETED
843+ )
844+
845+ with patch .object (TaskResourceApi , 'update_task_v2' ,
846+ side_effect = ApiException (status = 405 )) as mock_v2 , \
847+ patch .object (TaskResourceApi , 'update_task' , return_value = 'ok' ) as mock_v1 :
848+ result = task_runner ._TaskRunner__update_task (task_result )
849+
850+ mock_v2 .assert_called_once ()
851+ mock_v1 .assert_called_once ()
852+ self .assertIsNone (result )
853+ self .assertFalse (task_runner ._use_update_v2 )
854+
832855 @patch ('time.sleep' , Mock (return_value = None ))
833856 def test_update_task_v2_404_sets_v1_flag (self ):
834857 """After a 404 on v2, _use_update_v2 flag must be False."""
0 commit comments