def test_no_issue_numbers(self): change_note = '# {}\r\n#2 and #3 are fixed by this change'.format( self.title) pull_request = self._create_pull_request(change_note) parser = GithubIssuesParser(self.generator, self.title) parser.parse(pull_request) self.assertEqual(parser.content, [])
def test_issue_numbers_and_other_numbers(self): change_note = '# {}\r\nFixes #2 but not #5'.format(self.title) pull_request = self._create_pull_request(change_note) parser = GithubIssuesParser(None, self.title) parser.parse(pull_request) expected_content = self._create_expected_content([2]) self.assertEqual(parser.content, expected_content)
def test_render_issue_with_prod_comment(self): issue_number = self.issue_number_with_prod_comment tag = self.tag_prod self.mock_util.mock_get_repo() # Mock the issue api_url = "{}/issues/{}".format(self.repo_api_url, issue_number) expected_issue = self._get_expected_issue(issue_number) responses.add(method=responses.GET, url=api_url, json=expected_issue) # Mock the comments list api_url = "{}/issues/{}/comments".format(self.repo_api_url, issue_number) expected_comment_1 = self._get_expected_issue_comment( GithubIssuesParser.ISSUE_COMMENT["prod"]) expected_comments = [expected_comment_1] responses.add(method=responses.GET, url=api_url, json=expected_comments) generator = self._create_generator(tag) parser = GithubIssuesParser(generator, self.title) parser.content = [{ "issue_number": issue_number, "pr_number": self.pr_number, "pr_url": self.pr_url, }] expected_render = self._create_expected_render(issue_number, expected_issue["title"], False) self.assertEqual(parser.render(), expected_render) self.assertEqual(len(responses.calls._calls), 4)
def test_render_issue_without_comments(self): issue_number = self.issue_number_without_comments tag = self.tag_not_prod_or_beta self.mock_util.mock_get_repo() self.mock_util.mock_post_comment(issue_number) # Mock the issue api_url = "{}/issues/{}".format(self.repo_api_url, issue_number) expected_issue = self._get_expected_issue(issue_number) responses.add(method=responses.GET, url=api_url, json=expected_issue) # Mock the comments list api_url = "{}/issues/{}/comments".format(self.repo_api_url, issue_number) responses.add(method=responses.GET, url=api_url, body="", content_type="application/json") generator = self._create_generator(tag) parser = GithubIssuesParser(generator, self.title) parser.content = [{ "issue_number": issue_number, "pr_number": self.pr_number, "pr_url": self.pr_url, }] expected_render = self._create_expected_render(issue_number, expected_issue["title"], False) render = parser.render() self.assertEqual(render, expected_render) self.assertEqual(len(responses.calls._calls), 3)
def test_render_issue_without_comments(self): issue_number = self.issue_number_without_comments tag = self.tag_not_prod_or_beta self.mock_util.mock_get_repo() self.mock_util.mock_post_comment(issue_number) # Mock the issue api_url = "{}/issues/{}".format(self.repo_api_url, issue_number) expected_issue = self._get_expected_issue(issue_number) responses.add(method=responses.GET, url=api_url, json=expected_issue) # Mock the comments list api_url = "{}/issues/{}/comments".format(self.repo_api_url, issue_number) responses.add( method=responses.GET, url=api_url, json=[], content_type="application/json" ) generator = self._create_generator(tag) parser = GithubIssuesParser(generator, self.title) parser.content = [ { "issue_number": issue_number, "pr_number": self.pr_number, "pr_url": self.pr_url, } ] expected_render = self._create_expected_render( issue_number, expected_issue["title"], False ) render = parser.render() self.assertEqual(render, expected_render) self.assertEqual(len(responses.calls._calls), 2)
def test_render_issue_with_prod_comment(self): issue_number = self.issue_number_with_prod_comment tag = self.tag_prod self.mock_util.mock_get_repo() # Mock the issue api_url = "{}/issues/{}".format(self.repo_api_url, issue_number) expected_issue = self._get_expected_issue(issue_number) responses.add(method=responses.GET, url=api_url, json=expected_issue) # Mock the comments list api_url = "{}/issues/{}/comments".format(self.repo_api_url, issue_number) expected_comment_1 = self._get_expected_issue_comment( GithubIssuesParser.ISSUE_COMMENT["prod"] ) expected_comments = [expected_comment_1] responses.add(method=responses.GET, url=api_url, json=expected_comments) generator = self._create_generator(tag) parser = GithubIssuesParser(generator, self.title) parser.content = [ { "issue_number": issue_number, "pr_number": self.pr_number, "pr_url": self.pr_url, } ] expected_render = self._create_expected_render( issue_number, expected_issue["title"], False ) self.assertEqual(parser.render(), expected_render) self.assertEqual(len(responses.calls._calls), 3)
def test_issue_numbers(self): change_note = '# {}\r\nFixes #2, Closed #3 and Resolve #5'.format( self.title) pull_request = self._create_pull_request(change_note) parser = GithubIssuesParser(self.generator, self.title) parser.parse(pull_request) expected_content = self._create_expected_content([2, 3, 5]) self.assertEqual(parser.content, expected_content)
def test_render_issue_number_valid(self): api_url = "{}/issues/{}".format(self.repo_api_url, self.issue_number_valid) expected_response = self._get_expected_issue(self.issue_number_valid) responses.add(method=responses.GET, url=api_url, json=expected_response) generator = self._create_generator() parser = GithubIssuesParser(generator, self.title) parser.content = [self.issue_number_valid] expected_render = "# {}\r\n\r\n#{}: {}".format(self.title, self.issue_number_valid, expected_response["title"]) self.assertEqual(parser.render(), expected_render)
def test_render_issue_number_invalid(self): api_url = "{}/issues/{}".format(self.repo_api_url, self.issue_number_invalid) expected_response = self._get_expected_not_found() responses.add(method=responses.GET, url=api_url, json=expected_response, status=httplib.NOT_FOUND) generator = self._create_generator() parser = GithubIssuesParser(generator, self.title) parser.content = [self.issue_number_invalid] with self.assertRaises(GithubApiNotFoundError): parser.render()
def test_no_issue_numbers(self): pr_number = 1 self.mock_util.mock_get_repo() change_note = "# {}\r\n#2 and #3 are fixed by this change".format(self.title) self.mock_util.mock_pull_request(pr_number, body=change_note) generator = self._create_generator() repo = generator.get_repo() pull_request = repo.pull_request(pr_number) parser = GithubIssuesParser(generator, self.title) parser.parse(pull_request) self.assertEqual(parser.content, [])
def test_issue_numbers_and_other_numbers(self): self.mock_util.mock_get_repo() change_note = "# {}\r\nFixes #2 but not #5".format(self.title) self.mock_util.mock_pull_request(self.pr_number, body=change_note) generator = self._create_generator() repo = generator.get_repo() pull_request = repo.pull_request(self.pr_number) parser = GithubIssuesParser(generator, self.title) parser.parse(pull_request) pr_url = "https://github.com/TestOwner/TestRepo/pulls/{}".format(self.pr_number) expected_content = self._create_expected_content([2], pr_url) self.assertEqual(parser.content, expected_content)
def test_render_issue_with_beta_comment(self): issue_number = self.issue_number_with_beta_comment tag = self.tag_beta self.mock_util.mock_get_repo() self.mock_util.mock_post_comment(issue_number) # Mock the issue api_url = '{}/issues/{}'.format( self.repo_api_url, issue_number, ) expected_issue = self._get_expected_issue(issue_number) responses.add( method=responses.GET, url=api_url, json=expected_issue, ) # Mock the comments list api_url = '{}/issues/{}/comments'.format( self.repo_api_url, issue_number, ) expected_comment_1 = self._get_expected_issue_comment( GithubIssuesParser.ISSUE_COMMENT['beta'], ) expected_comments = [ expected_comment_1, ] responses.add( method=responses.GET, url=api_url, json=expected_comments, ) generator = self._create_generator(tag) parser = GithubIssuesParser(generator, self.title) parser.content = [{ 'issue_number': issue_number, 'pr_number': self.pr_number, 'pr_url': self.pr_url, }] expected_render = self._create_expected_render( issue_number, expected_issue['title'], False, ) render = parser.render() self.assertEqual(render, expected_render) self.assertEqual(len(responses.calls._calls), 4)
def test_render_issue_with_prod_comment(self): issue_number = self.issue_number_with_prod_comment tag = self.tag_prod # Mock the issue api_url = '{}/issues/{}'.format( self.repo_api_url, issue_number, ) expected_issue = self._get_expected_issue(issue_number) responses.add( method=responses.GET, url=api_url, json=expected_issue, ) # Mock the comments list api_url = '{}/issues/{}/comments'.format( self.repo_api_url, issue_number, ) expected_comment_1 = self._get_expected_issue_comment( GithubIssuesParser.ISSUE_COMMENT['prod'], ) expected_comments = [ expected_comment_1, ] responses.add( method=responses.GET, url=api_url, json=expected_comments, ) generator = self._create_generator(tag) parser = GithubIssuesParser(generator, self.title) parser.content = [{ 'issue_number': issue_number, 'pr_number': self.pr_number, 'pr_url': self.pr_url, }] expected_render = self._create_expected_render( issue_number, expected_issue['title'], False, ) self.assertEqual(parser.render(), expected_render) # Only 2 api calls were made, ensuring comment creation # was not attempted self.assertEqual(len(responses.calls._calls), 2)
def test_render_issue_number_invalid(self): api_url = '{}/issues/{}'.format(self.repo_api_url, self.issue_number_invalid) expected_response = self._get_expected_not_found() responses.add( method=responses.GET, url=api_url, json=expected_response, status=httplib.NOT_FOUND, ) generator = self._create_generator() parser = GithubIssuesParser(generator, self.title) parser.content = [self.issue_number_invalid] with self.assertRaises(GithubApiNotFoundError): parser.render()
def _init_parsers(self): self.parsers.append(ChangeNotesLinesParser( self, 'Critical Changes', )) self.parsers.append(ChangeNotesLinesParser(self, 'Changes')) self.parsers.append(GithubIssuesParser(self, 'Issues Closed'))
def test_render_issue_without_comments(self): issue_number = self.issue_number_without_comments tag = self.tag_not_prod_or_beta # Mock the issue api_url = '{}/issues/{}'.format( self.repo_api_url, issue_number, ) expected_issue = self._get_expected_issue(issue_number) responses.add( method=responses.GET, url=api_url, json=expected_issue, ) # Mock the comments list api_url = '{}/issues/{}/comments'.format( self.repo_api_url, issue_number, ) responses.add( method=responses.GET, url=api_url, body=[], content_type='application/json', ) generator = self._create_generator(tag) parser = GithubIssuesParser(generator, self.title) parser.content = [{ 'issue_number': issue_number, 'pr_number': self.pr_number, 'pr_url': self.pr_url, }] expected_render = self._create_expected_render( issue_number, expected_issue['title'], False, ) self.assertEqual(parser.render(), expected_render) # Only 2 api calls were made, ensuring comment creation # was not attempted self.assertEqual(len(responses.calls._calls), 2)
def test_render_issue_number_valid(self): api_url = "{}/issues/{}".format(self.repo_api_url, self.issue_number_valid) expected_response = self._get_expected_issue(self.issue_number_valid) self.mock_util.mock_get_repo() responses.add(method=responses.GET, url=api_url, json=expected_response) generator = self._create_generator() parser = GithubIssuesParser(generator, self.title) parser.content = [{ "issue_number": self.issue_number_valid, "pr_number": self.pr_number, "pr_url": self.pr_url, }] expected_render = self._create_expected_render( self.issue_number_valid, expected_response["title"], False) self.assertEqual(parser.render(), expected_render)
def test_render_issue_number_valid(self): api_url = '{}/issues/{}'.format(self.repo_api_url, self.issue_number_valid) expected_response = self._get_expected_issue(self.issue_number_valid) responses.add( method=responses.GET, url=api_url, json=expected_response, ) generator = self._create_generator() parser = GithubIssuesParser(generator, self.title) parser.content = [self.issue_number_valid] expected_render = '# {}\r\n\r\n#{}: {}'.format( self.title, self.issue_number_valid, expected_response['title'], ) self.assertEqual(parser.render(), expected_render)
def test_render_issue_number_valid(self): api_url = "{}/issues/{}".format(self.repo_api_url, self.issue_number_valid) expected_response = self._get_expected_issue(self.issue_number_valid) self.mock_util.mock_get_repo() responses.add(method=responses.GET, url=api_url, json=expected_response) generator = self._create_generator() generator.link_pr = True parser = GithubIssuesParser(generator, self.title) parser.content = [ { "issue_number": self.issue_number_valid, "pr_number": self.pr_number, "pr_url": self.pr_url, } ] expected_render = self._create_expected_render( self.issue_number_valid, expected_response["title"], True ) self.assertEqual(parser.render(), expected_render)
def test_render_issue_without_prod_comment(self): issue_number = self.issue_number_without_prod_comment tag = self.tag_prod self.mock_util.mock_get_repo() # Mock the issue api_url = "{}/issues/{}".format(self.repo_api_url, issue_number) expected_issue = self._get_expected_issue(issue_number) responses.add(method=responses.GET, url=api_url, json=expected_issue) # Mock the comments list api_url = "{}/issues/{}/comments".format(self.repo_api_url, issue_number) expected_comment_1 = self._get_expected_issue_comment( "Some other comment") expected_comments = [expected_comment_1] responses.add(method=responses.GET, url=api_url, body="", content_type="application/json") # Mock the comment post response api_url = "{}/issues/{}/comments".format(self.repo_api_url, issue_number) expected_comment_1 = self._get_expected_issue_comment("{} {}".format( GithubIssuesParser.ISSUE_COMMENT["prod"], self.version_number_prod)) responses.add(method=responses.POST, url=api_url, json=expected_comment_1) generator = self._create_generator(tag) parser = GithubIssuesParser(generator, self.title) parser.content = [{ "issue_number": issue_number, "pr_number": self.pr_number, "pr_url": self.pr_url, }] expected_render = self._create_expected_render(issue_number, expected_issue["title"], False) render = parser.render() self.assertEqual(render, expected_render) self.assertEqual(len(responses.calls._calls), 5)
def test_render_issue_number_invalid(self): api_url = "{}/issues/{}".format(self.repo_api_url, self.issue_number_invalid) expected_response = self._get_expected_not_found() self.mock_util.mock_get_repo() responses.add( method=responses.GET, url=api_url, json=expected_response, status=http.client.NOT_FOUND, ) generator = self._create_generator() parser = GithubIssuesParser(generator, self.title) parser.content = [{ "issue_number": self.issue_number_invalid, "pr_number": self.pr_number, "pr_url": self.pr_url, }] with self.assertRaises(GithubApiNotFoundError): parser.render()
def test_render_issue_without_prod_comment(self): issue_number = self.issue_number_without_prod_comment tag = self.tag_prod self.mock_util.mock_get_repo() # Mock the issue api_url = "{}/issues/{}".format(self.repo_api_url, issue_number) expected_issue = self._get_expected_issue(issue_number) responses.add(method=responses.GET, url=api_url, json=expected_issue) # Mock the comments list api_url = "{}/issues/{}/comments".format(self.repo_api_url, issue_number) expected_comment_1 = self._get_expected_issue_comment("Some other comment") responses.add( method=responses.GET, url=api_url, json=[], content_type="application/json" ) # Mock the comment post response api_url = "{}/issues/{}/comments".format(self.repo_api_url, issue_number) expected_comment_1 = self._get_expected_issue_comment( "{} {}".format( GithubIssuesParser.ISSUE_COMMENT["prod"], self.version_number_prod ) ) responses.add(method=responses.POST, url=api_url, json=expected_comment_1) generator = self._create_generator(tag) parser = GithubIssuesParser(generator, self.title) parser.content = [ { "issue_number": issue_number, "pr_number": self.pr_number, "pr_url": self.pr_url, } ] expected_render = self._create_expected_render( issue_number, expected_issue["title"], False ) render = parser.render() self.assertEqual(render, expected_render) self.assertEqual(len(responses.calls._calls), 4)
def test_no_issue_numbers(self): change_note = "# {}\r\n#2 and #3 are fixed by this change".format(self.title) parser = GithubIssuesParser(None, self.title) parser.parse(change_note) self.assertEqual(parser.content, [])
def test_issue_numbers(self): change_note = '# {}\r\nFixes #2, Closed #3 and Resolve #5'.format( self.title) parser = GithubIssuesParser(None, self.title) parser.parse(change_note) self.assertEqual(parser.content, [2, 3, 5])
def test_init__issues_disabled(self): generator = mock.Mock(has_issues=False) with self.assertRaises(GithubIssuesError): parser = GithubIssuesParser(generator, self.title)
def test_render_issue_without_prod_comment(self): issue_number = self.issue_number_without_prod_comment tag = self.tag_prod # Mock the issue api_url = '{}/issues/{}'.format( self.repo_api_url, issue_number, ) expected_issue = self._get_expected_issue(issue_number) responses.add( method=responses.GET, url=api_url, json=expected_issue, ) # Mock the comments list api_url = '{}/issues/{}/comments'.format( self.repo_api_url, issue_number, ) expected_comment_1 = self._get_expected_issue_comment( 'Some other comment', ) expected_comments = [ expected_comment_1, ] responses.add( method=responses.GET, url=api_url, body=[], content_type='application/json', ) # Mock the comment post response api_url = '{}/issues/{}/comments'.format( self.repo_api_url, issue_number, ) expected_comment_1 = self._get_expected_issue_comment( '{} {}'.format( GithubIssuesParser.ISSUE_COMMENT['prod'], self.version_number_prod, ) ) responses.add( method=responses.POST, url=api_url, json=expected_comment_1, ) generator = self._create_generator(tag) parser = GithubIssuesParser(generator, self.title) parser.content = [{ 'issue_number': issue_number, 'pr_number': self.pr_number, 'pr_url': self.pr_url, }] expected_render = self._create_expected_render( issue_number, expected_issue['title'], False, ) self.assertEqual(parser.render(), expected_render) # 3 api calls were made, ensuring comment creation # was attempted self.assertEqual(len(responses.calls._calls), 3)
def test_issue_numbers_and_other_numbers(self): change_note = '# {}\r\nFixes #2 but not #5'.format(self.title) parser = GithubIssuesParser(None, self.title) parser.parse(change_note) self.assertEqual(parser.content, [2])
def test_no_issue_numbers(self): change_note = '# {}\r\n#2 and #3 are fixed by this change'.format( self.title) parser = GithubIssuesParser(None, self.title) parser.parse(change_note) self.assertEqual(parser.content, [])
def test_issue_numbers(self): change_note = "# {}\r\nFixes #2, Closed #3 and Resolve #5".format(self.title) parser = GithubIssuesParser(None, self.title) parser.parse(change_note) self.assertEqual(parser.content, [2, 3, 5])
def test_issue_numbers_and_other_numbers(self): change_note = "# {}\r\nFixes #2 but not #5".format(self.title) parser = GithubIssuesParser(None, self.title) parser.parse(change_note) self.assertEqual(parser.content, [2])