@@ -253,6 +253,130 @@ def test_create_rc_auto_add_task(self):
253253 call2_args [1 ],
254254 )
255255
256+ @patch ("tools.private.release.create_rc.ProcessBackports" )
257+ def test_create_rc_calls_process_backports (self , mock_pb_class ):
258+ # Arrange
259+ mock_pb = mock_pb_class .return_value
260+ mock_pb .run .return_value = 0
261+
262+ args = MagicMock (issue = 123 , remote = "my-remote" )
263+ self .mock_gh .get_issue_title .return_value = "Release 2.0.0"
264+ self .mock_gh .get_issue_body .return_value = """
265+ ## Checklist
266+ - [x] Prepare Release | status=done pr=#122 commit=abcdef12
267+ - [x] Create Release branch | status=done branch=release/2.0 commit=abcdef12
268+ - [ ] Tag RC0 | status=pending
269+ """
270+ self .mock_git .get_remote_tags .return_value = []
271+ self .mock_git .get_commit_sha .return_value = "1234567890"
272+
273+ # Act
274+ result = CreateRc (args , self .mock_git , self .mock_gh ).run ()
275+
276+ # Assert
277+ self .assertEqual (result , 0 )
278+ mock_pb_class .assert_called_once ()
279+ called_args = mock_pb_class .call_args [0 ][0 ]
280+ self .assertEqual (called_args .issue , 123 )
281+ self .assertEqual (called_args .remote , "my-remote" )
282+ self .assertFalse (called_args .dry_run )
283+ self .assertIsNone (called_args .add )
284+ self .assertIsNone (called_args .triggering_comment )
285+ mock_pb .run .assert_called_once ()
286+
287+ @patch ("tools.private.release.create_rc.ProcessBackports" )
288+ def test_create_rc_aborts_on_process_backports_failure (self , mock_pb_class ):
289+ # Arrange
290+ mock_pb = mock_pb_class .return_value
291+ mock_pb .run .return_value = 1
292+
293+ args = MagicMock (issue = 123 , remote = "my-remote" )
294+
295+ # Act
296+ result = CreateRc (args , self .mock_git , self .mock_gh ).run ()
297+
298+ # Assert
299+ self .assertEqual (result , 1 )
300+ mock_pb_class .assert_called_once ()
301+ mock_pb .run .assert_called_once ()
302+ self .mock_gh .get_issue_body .assert_not_called ()
303+ self .mock_git .tag .assert_not_called ()
304+
305+ @patch ("tools.private.release.create_rc.ProcessBackports" )
306+ def test_create_rc_failure_reacts_to_comment (self , mock_pb_class ):
307+ # Arrange
308+ mock_pb = mock_pb_class .return_value
309+ mock_pb .run .return_value = 1 # Simulate failure
310+
311+ args = MagicMock (issue = 123 , remote = "my-remote" , triggering_comment = 456 )
312+
313+ # Act
314+ result = CreateRc (args , self .mock_git , self .mock_gh ).run ()
315+
316+ # Assert
317+ self .assertEqual (result , 1 )
318+ self .mock_gh .add_comment_reaction .assert_called_once_with (456 , "-1" )
319+
320+ @patch ("tools.private.release.create_rc.ProcessBackports" )
321+ def test_create_rc_failure_no_comment_no_reaction (self , mock_pb_class ):
322+ # Arrange
323+ mock_pb = mock_pb_class .return_value
324+ mock_pb .run .return_value = 1 # Simulate failure
325+
326+ args = MagicMock (issue = 123 , remote = "my-remote" , triggering_comment = None )
327+
328+ # Act
329+ result = CreateRc (args , self .mock_git , self .mock_gh ).run ()
330+
331+ # Assert
332+ self .assertEqual (result , 1 )
333+ self .mock_gh .add_comment_reaction .assert_not_called ()
334+
335+ @patch ("tools.private.release.create_rc.ProcessBackports" )
336+ def test_create_rc_success_with_comment_no_reaction (self , mock_pb_class ):
337+ # Arrange
338+ mock_pb = mock_pb_class .return_value
339+ mock_pb .run .return_value = 0
340+
341+ args = MagicMock (issue = 123 , remote = "my-remote" , triggering_comment = 456 )
342+ self .mock_gh .get_issue_title .return_value = "Release 2.0.0"
343+ self .mock_gh .get_issue_body .return_value = """
344+ ## Checklist
345+ - [x] Prepare Release | status=done pr=#122 commit=abcdef12
346+ - [x] Create Release branch | status=done branch=release/2.0 commit=abcdef12
347+ - [ ] Tag RC0 | status=pending
348+ """
349+ self .mock_git .get_remote_tags .return_value = []
350+ self .mock_git .get_commit_sha .return_value = "1234567890"
351+
352+ # Act
353+ result = CreateRc (args , self .mock_git , self .mock_gh ).run ()
354+
355+ # Assert
356+ self .assertEqual (result , 0 )
357+ self .mock_gh .add_comment_reaction .assert_not_called ()
358+
359+ @patch ("tools.private.release.create_rc.ProcessBackports" )
360+ def test_create_rc_precondition_failure_reacts_to_comment (self , mock_pb_class ):
361+ # Arrange
362+ mock_pb = mock_pb_class .return_value
363+ mock_pb .run .return_value = 0 # Backports succeed
364+
365+ args = MagicMock (issue = 123 , remote = "my-remote" , triggering_comment = 456 )
366+ self .mock_gh .get_issue_body .return_value = """
367+ ## Checklist
368+ - [ ] Prepare Release | status=pending
369+ - [ ] Create Release branch | status=pending
370+ - [ ] Tag RC0 | status=pending
371+ """
372+
373+ # Act
374+ result = CreateRc (args , self .mock_git , self .mock_gh ).run ()
375+
376+ # Assert
377+ self .assertEqual (result , 1 )
378+ self .mock_gh .add_comment_reaction .assert_called_once_with (456 , "-1" )
379+
256380
257381if __name__ == "__main__" :
258382 unittest .main ()
0 commit comments