@@ -19,11 +19,13 @@ def _mock_git_and_gh(test_case):
1919 patch ("tools.private.release.release.git" , new = mock_git ).start ()
2020 patch ("tools.private.release.prepare.git" , new = mock_git ).start ()
2121 patch ("tools.private.release.create_release_branch.git" , new = mock_git ).start ()
22+ patch ("tools.private.release.create_rc.git" , new = mock_git ).start ()
2223 patch ("tools.private.release.utils.git" , new = mock_git ).start ()
2324
2425 patch ("tools.private.release.release.gh" , new = mock_gh ).start ()
2526 patch ("tools.private.release.prepare.gh" , new = mock_gh ).start ()
2627 patch ("tools.private.release.create_release_branch.gh" , new = mock_gh ).start ()
28+ patch ("tools.private.release.create_rc.gh" , new = mock_gh ).start ()
2729 mock_gh .MultipleTrackingIssuesError = MultipleTrackingIssuesError
2830 mock_gh .NoTrackingIssueError = NoTrackingIssueError
2931
@@ -932,7 +934,7 @@ def setUp(self):
932934
933935 def test_create_rc_success_first_rc (self ):
934936 # Arrange
935- args = MagicMock (issue = 123 )
937+ args = MagicMock (issue = 123 , remote = "my-remote" )
936938 self .mock_gh .get_issue_title .return_value = "Release 2.0.0"
937939 self .mock_gh .get_issue_body .return_value = """
938940## Checklist
@@ -949,8 +951,9 @@ def test_create_rc_success_first_rc(self):
949951
950952 # Assert
951953 self .assertEqual (result , 0 )
954+ self .mock_git .fetch .assert_called_once_with ("my-remote" , tags = True , force = True )
952955 self .mock_git .tag .assert_called_once_with ("2.0.0-rc0" , "HEAD" )
953- self .mock_git .push .assert_called_once_with ("origin " , "2.0.0-rc0" )
956+ self .mock_git .push .assert_called_once_with ("my-remote " , "2.0.0-rc0" )
954957
955958 self .mock_gh .update_issue_body .assert_called_once ()
956959 call_args = self .mock_gh .update_issue_body .call_args [0 ]
@@ -962,7 +965,7 @@ def test_create_rc_success_first_rc(self):
962965
963966 def test_create_rc_success_next_rc (self ):
964967 # Arrange
965- args = MagicMock (issue = 123 )
968+ args = MagicMock (issue = 123 , remote = "my-remote" )
966969 self .mock_gh .get_issue_title .return_value = "Release 2.0.0"
967970 self .mock_gh .get_issue_body .return_value = """
968971## Checklist
@@ -980,8 +983,9 @@ def test_create_rc_success_next_rc(self):
980983
981984 # Assert
982985 self .assertEqual (result , 0 )
986+ self .mock_git .fetch .assert_called_once_with ("my-remote" , tags = True , force = True )
983987 self .mock_git .tag .assert_called_once_with ("2.0.0-rc1" , "HEAD" )
984- self .mock_git .push .assert_called_once_with ("origin " , "2.0.0-rc1" )
988+ self .mock_git .push .assert_called_once_with ("my-remote " , "2.0.0-rc1" )
985989
986990 self .mock_gh .update_issue_body .assert_called_once ()
987991 call_args = self .mock_gh .update_issue_body .call_args [0 ]
@@ -1234,6 +1238,7 @@ def test_create_release_branch_success(self):
12341238- [ ] Create Release branch | status=pending
12351239"""
12361240 self .mock_git .branch_exists .return_value = False
1241+ self .mock_git .remote_branch_exists .return_value = False
12371242
12381243 # Act
12391244 result = releaser .cmd_create_release_branch (args )
@@ -1291,6 +1296,73 @@ def test_create_release_branch_already_checked(self):
12911296 self .mock_git .push .assert_not_called ()
12921297 self .mock_gh .update_issue_body .assert_not_called ()
12931298
1299+ def test_create_release_branch_already_exists_same_commit (self ):
1300+ # Arrange
1301+ args = MagicMock (issue = 123 , remote = "my-remote" )
1302+ self .mock_gh .get_issue_title .return_value = "Release 2.0.0"
1303+ self .mock_gh .get_issue_body .return_value = """
1304+ ## Checklist
1305+ - [x] Prepare Release | status=done pr=#122 commit=abcdef12
1306+ - [ ] Create Release branch | status=pending
1307+ """
1308+ self .mock_git .remote_branch_exists .return_value = True
1309+ self .mock_git .get_commit_sha .return_value = "abcdef12"
1310+
1311+ # Act
1312+ result = releaser .cmd_create_release_branch (args )
1313+
1314+ # Assert
1315+ self .assertEqual (result , 0 )
1316+ self .mock_git .fetch .assert_called_once_with ("my-remote" )
1317+ self .mock_git .push .assert_not_called ()
1318+ self .mock_gh .update_issue_body .assert_called_once () # Should still update checklist
1319+
1320+ def test_create_release_branch_already_exists_fast_forward (self ):
1321+ # Arrange
1322+ args = MagicMock (issue = 123 , remote = "my-remote" )
1323+ self .mock_gh .get_issue_title .return_value = "Release 2.0.0"
1324+ self .mock_gh .get_issue_body .return_value = """
1325+ ## Checklist
1326+ - [x] Prepare Release | status=done pr=#122 commit=abcdef12
1327+ - [ ] Create Release branch | status=pending
1328+ """
1329+ self .mock_git .remote_branch_exists .return_value = True
1330+ self .mock_git .get_commit_sha .return_value = "oldcommit"
1331+ self .mock_git .is_ancestor .return_value = True
1332+
1333+ # Act
1334+ result = releaser .cmd_create_release_branch (args )
1335+
1336+ # Assert
1337+ self .assertEqual (result , 0 )
1338+ self .mock_git .fetch .assert_called_once_with ("my-remote" )
1339+ self .mock_git .push .assert_called_once_with (
1340+ "my-remote" , "abcdef12:refs/heads/release/2.0"
1341+ )
1342+ self .mock_gh .update_issue_body .assert_called_once ()
1343+
1344+ def test_create_release_branch_already_exists_non_ff (self ):
1345+ # Arrange
1346+ args = MagicMock (issue = 123 , remote = "my-remote" )
1347+ self .mock_gh .get_issue_title .return_value = "Release 2.0.0"
1348+ self .mock_gh .get_issue_body .return_value = """
1349+ ## Checklist
1350+ - [x] Prepare Release | status=done pr=#122 commit=abcdef12
1351+ - [ ] Create Release branch | status=pending
1352+ """
1353+ self .mock_git .remote_branch_exists .return_value = True
1354+ self .mock_git .get_commit_sha .return_value = "othercommit"
1355+ self .mock_git .is_ancestor .return_value = False
1356+
1357+ # Act
1358+ result = releaser .cmd_create_release_branch (args )
1359+
1360+ # Assert
1361+ self .assertEqual (result , 1 )
1362+ self .mock_git .fetch .assert_called_once_with ("my-remote" )
1363+ self .mock_git .push .assert_not_called ()
1364+ self .mock_gh .update_issue_body .assert_not_called ()
1365+
12941366
12951367if __name__ == "__main__" :
12961368 unittest .main ()
0 commit comments