def test_invalid_current_tag(self): self.mock_util.mock_get_repo() self._mock_invalid_tag() generator = self._create_generator(self.invalid_tag) provider = GithubChangeNotesProvider(generator, self.invalid_tag) with self.assertRaises(GithubApiNotFoundError): provider.current_tag_info
def test_pull_requests_with_no_last_tag(self): self.mock_util.mock_get_repo() # Mock the tag calls self._mock_current_tag_ref() self._mock_current_tag() self._mock_current_tag_commit() self._mock_last_tag_ref() self._mock_last_tag() self._mock_last_tag_commit() self._mock_list_pull_requests_multiple_in_range() generator = self._create_generator(self.current_tag) provider = GithubChangeNotesProvider(generator, self.current_tag) provider._get_last_tag = mock.Mock(return_value=None) provider_list = list(provider()) pr_body_list = [] pr_body_list = [ "pull 1", "pull 2", "pull 3", "pull 4", "pull 5", "pull 7", "pull 8", ] self.assertEqual(len(provider_list), len(pr_body_list)) for pr, pr_body in zip(provider_list, pr_body_list): self.assertEqual(pr.body, pr_body)
def test_no_pull_requests_in_range(self): self.mock_util.mock_get_repo() # Mock the tag calls self._mock_current_tag_ref() self._mock_current_tag() self._mock_current_tag_commit() self._mock_last_tag_ref() self._mock_last_tag() self._mock_last_tag_commit() # Mock the list all pull requests call api_url = "{}/pulls".format(self.repo_api_url) expected_pull_request_1 = self._get_expected_pull_request( pull_id=1, issue_number=101, body="pull 1", merged_date=datetime.utcnow() - timedelta(days=2), ) expected_response_list_pull_requests = [expected_pull_request_1] responses.add(method=responses.GET, url=api_url, json=expected_response_list_pull_requests) generator = self._create_generator(self.current_tag, self.last_tag) provider = GithubChangeNotesProvider(generator, self.current_tag, self.last_tag) self.assertEqual(list(provider()), [])
def test_get_version_from_tag(self): self.mock_util.mock_get_repo() tag = "beta/1.0-Beta_1" generator = self._create_generator(tag) provider = GithubChangeNotesProvider(generator, tag) self.assertEqual("1.0-Beta_1", provider._get_version_from_tag(tag)) with self.assertRaises(ValueError): provider._get_version_from_tag("bogus")
def test_current_tag_without_last_no_last_found(self): self._mock_current_tag_ref() self._mock_current_tag() self._mock_current_tag_commit() self._mock_list_tags_single() generator = self._create_generator(self.current_tag) provider = GithubChangeNotesProvider(generator, self.current_tag) self.assertEqual(provider.last_tag, None) self.assertEqual(provider.last_tag_info, None)
def test_current_tag_is_lightweight(self): self.mock_util.mock_get_repo() tag = "release/lightweight" generator = self._create_generator(tag) provider = GithubChangeNotesProvider(generator, tag) api_url = "{}/git/refs/tags/{}".format(self.repo_api_url, tag) responses.add(method=responses.GET, url=api_url, json={"object": { "type": "commit" }}) with self.assertRaises(GithubApiError): provider.current_tag_info
def test_multiple_pull_requests_in_range(self): # Mock the tag calls self._mock_current_tag_ref() self._mock_current_tag() self._mock_current_tag_commit() self._mock_last_tag_ref() self._mock_last_tag() self._mock_last_tag_commit() self._mock_list_pull_requests_multiple_in_range() generator = self._create_generator(self.current_tag, self.last_tag) provider = GithubChangeNotesProvider(generator, self.current_tag, self.last_tag) self.assertEqual(list(provider()), ['pull 1', 'pull 2', 'pull 3'])
def test_current_tag_without_last(self): self.mock_util.mock_get_repo() self._mock_current_tag_ref() expected_current_tag = self._mock_current_tag() self._mock_current_tag_commit() self._mock_last_tag_ref() expected_last_tag = self._mock_last_tag() self._mock_last_tag_commit() self._mock_list_tags_multiple() generator = self._create_generator(self.current_tag) provider = GithubChangeNotesProvider(generator, self.current_tag) current_tag = provider.current_tag_info["tag"] last_tag = provider.last_tag_info["tag"] self.assertEqual(current_tag.tag, expected_current_tag["tag"]) self.assertEqual(last_tag.tag, expected_last_tag["tag"])
def test_multiple_pull_requests_in_range(self): # Mock the tag calls self._mock_current_tag_ref() self._mock_current_tag() self._mock_current_tag_commit() self._mock_last_tag_ref() self._mock_last_tag() self._mock_last_tag_commit() self._mock_list_pull_requests_multiple_in_range() generator = self._create_generator(self.current_tag, self.last_tag) provider = GithubChangeNotesProvider(generator, self.current_tag, self.last_tag) provider_list = list(provider()) pr_body_list = ['pull 1', 'pull 2', 'pull 3'] self.assertEqual(len(provider_list), len(pr_body_list)) for pr, pr_body in zip(provider_list, pr_body_list): self.assertEqual(pr['body'], pr_body)
def test_one_pull_request_in_range(self): self.mock_util.mock_get_repo() # Mock the tag calls self._mock_current_tag_ref() self._mock_current_tag() self._mock_current_tag_commit() self._mock_last_tag_ref() self._mock_last_tag() self._mock_last_tag_commit() self._mock_list_pull_requests_one_in_range() generator = self._create_generator(self.current_tag, self.last_tag) provider = GithubChangeNotesProvider(generator, self.current_tag, self.last_tag) provider_list = list(provider()) pr_body_list = ["pull 1"] self.assertEqual(len(provider_list), len(pr_body_list)) for pr, pr_body in zip(provider_list, pr_body_list): self.assertEqual(pr.body, pr_body)
def test_current_tag_without_last(self): self._mock_current_tag_ref() current_tag = self._mock_current_tag() self._mock_current_tag_commit() self._mock_last_tag_ref() last_tag = self._mock_last_tag() self._mock_last_tag_commit() self._mock_list_tags_multiple() generator = self._create_generator(self.current_tag) provider = GithubChangeNotesProvider(generator, self.current_tag) self.assertEqual( provider.current_tag_info['ref'], self._get_expected_tag_ref(self.current_tag, self.current_tag_sha)) self.assertEqual(provider.current_tag_info['tag'], current_tag) self.assertEqual( provider.last_tag_info['ref'], self._get_expected_tag_ref(self.last_tag, self.last_tag_sha)) self.assertEqual(provider.last_tag_info['tag'], last_tag)
def test_no_pull_requests_in_repo(self): self.mock_util.mock_get_repo() # Mock the tag calls self._mock_current_tag_ref() self._mock_current_tag() self._mock_current_tag_commit() self._mock_last_tag_ref() self._mock_last_tag() self._mock_last_tag_commit() # Mock the list all pull requests call api_url = "{}/pulls".format(self.repo_api_url) responses.add(method=responses.GET, url=api_url, json=[], content_type="application/json") generator = self._create_generator(self.current_tag, self.last_tag) provider = GithubChangeNotesProvider(generator, self.current_tag, self.last_tag) self.assertEqual(list(provider()), [])
def test_multiple_pull_requests_in_range(self): self.mock_util.mock_get_repo() # Mock the tag calls self._mock_current_tag_ref() self._mock_current_tag() self._mock_current_tag_commit() self._mock_last_tag_ref() self._mock_last_tag() self._mock_last_tag_commit() self._mock_list_pull_requests_multiple_in_range() generator = self._create_generator(self.current_tag, self.last_tag) provider = GithubChangeNotesProvider(generator, self.current_tag, self.last_tag) provider_list = list(provider()) pr_body_list = [] for n in range(1, 4): pr_body_list.append("pull {}".format(n)) self.assertEqual(len(provider_list), len(pr_body_list)) for pr, pr_body in zip(provider_list, pr_body_list): self.assertEqual(pr.body, pr_body)
def test_no_pull_requests_in_repo(self): # Mock the tag calls self._mock_current_tag_ref() self._mock_current_tag() self._mock_current_tag_commit() self._mock_last_tag_ref() self._mock_last_tag() self._mock_last_tag_commit() # Mock the list all pull requests call api_url = '{}/pulls'.format(self.repo_api_url) expected_response_list_pull_requests = [] responses.add( method=responses.GET, url=api_url, body=expected_response_list_pull_requests, content_type='application/json', ) generator = self._create_generator(self.current_tag, self.last_tag) provider = GithubChangeNotesProvider(generator, self.current_tag, self.last_tag) self.assertEqual(list(provider()), [])
def _init_change_notes(self): return GithubChangeNotesProvider(self, self.current_tag, self.last_tag)