def test_get_ready_prs(self, mock_utcnow, mock_get_is_mergeable, mock_get_open_prs, mock_get_events): mock_get_open_prs.return_value = [ create_mock_pr(10, "WIP", "2017-01-01T00:00:00Z", "2017-01-01T00:00:00Z"), create_mock_pr(11, "OK", "2017-01-01T00:00:00Z", "2017-01-01T00:00:00Z"), create_mock_pr(12, "Not in window", "2017-01-01T00:00:10Z", "2017-01-01T00:00:00Z"), create_mock_pr(13, "Not mergeable", "2017-01-01T00:00:00Z", "2017-01-01T00:00:00Z"), create_mock_pr(14, "Stale", "2016-01-01T00:00:00Z", "2017-01-01T00:00:00Z") ] def get_is_mergeable_side_effect(api, urn, pr_num): return False if pr_num in [13, 14] else True mock_get_is_mergeable.side_effect = get_is_mergeable_side_effect mock_utcnow.return_value = arrow.get("2017-01-01T00:00:10Z") mock_get_events.return_value = [] api = MagicMock() api.BASE_URL = "api_base_url" ready_prs = prs.get_ready_prs(api, "urn", 5) ready_prs_list = [pr for pr in ready_prs] self.assertEqual(len(ready_prs_list), 1) self.assertEqual(ready_prs_list[0].get("number"), 11)
def test_get_ready_prs(self, mock_utcnow, mock_get_is_mergeable, mock_get_open_prs, mock_get_events, mock_has_build_failed, mock_has_build_passed): # Title of each PR describes it's state mock_get_open_prs.return_value = [ create_mock_pr(10, "WIP", "2017-01-01T00:00:00Z", "2017-01-01T00:00:00Z"), create_mock_pr(11, "OK", "2017-01-01T00:00:00Z", "2017-01-01T00:00:00Z"), create_mock_pr(12, "Not in window", "2017-01-01T00:00:10Z", "2017-01-01T00:00:00Z"), create_mock_pr(13, "Not mergeable", "2017-01-01T00:00:00Z", "2017-01-01T00:00:00Z"), create_mock_pr(14, "Stale", "2016-01-01T00:00:00Z", "2017-01-01T00:00:00Z"), create_mock_pr(15, "Build failed", "2017-01-01T00:00:00Z", "2017-01-01T00:00:00Z") ] master_build_status = True def get_is_mergeable_side_effect(api, urn, pr_num): return False if pr_num in [13, 14] else True def has_build_passed_side_effect(api, urn, ref): return master_build_status def has_build_failed_side_effect(api, urn, ref): return True if "15" in ref else False mock_get_is_mergeable.side_effect = get_is_mergeable_side_effect mock_has_build_passed.side_effect = has_build_passed_side_effect mock_has_build_failed.side_effect = has_build_failed_side_effect mock_utcnow.return_value = arrow.get("2017-01-01T00:00:10Z") mock_get_events.return_value = [] api = MagicMock() api.BASE_URL = "api_base_url" # In this scenario only PR with number 11 should be returned. ready_prs = prs.get_ready_prs(api, "urn", 5) ready_prs_list = [pr for pr in ready_prs] self.assertEqual(len(ready_prs_list), 1) self.assertEqual(ready_prs_list[0].get("number"), 11) # Test for the case when master branch is failing. # PR 15 will be also returned in this case as we don't # block PRs if master is also failing master_build_status = False ready_prs = prs.get_ready_prs(api, "urn", 5) ready_prs_list = [pr for pr in ready_prs] self.assertTrue(len(ready_prs_list) is 2) self.assertTrue(ready_prs_list[0].get("number") is 11) self.assertTrue(ready_prs_list[1].get("number") is 15)
def test_get_pr_last_updated_with_events(self, mock_get_events): mock_get_events.return_value = \ create_mock_events([("PushEvent", "test_ref", "2017-01-04T00:00:10Z"), ("PushEvent", "blah", "2017-01-03T00:00:10Z")]) api = MagicMock() api.BASE_URL = "api_base_url" last_updated = prs.get_pr_last_updated(api, create_mock_pr(10, "OK", "2017-01-05T00:00:00Z", "2017-01-02T00:00:00Z")) self.assertEqual(last_updated, arrow.get("2017-01-04T00:00:10Z"))