def test_invalid_ordering_of_sections_in_release_summary(self): release_summary_lines = read_from_file(MOCK_RELEASE_SUMMARY_FILEPATH) invalid_ordering = {'### New Authors:\n': '### section2: \n'} ordering_swap = self.swap(update_changelog_and_credits, 'EXPECTED_ORDERING', invalid_ordering) with ordering_swap, self.assertRaisesRegexp( Exception, ('Expected ### New Authors: section to be followed by ### ' 'section2: section in release_summary to ensure that automatic ' 'updates to changelog and credits are correct.')): update_changelog_and_credits.check_ordering_of_sections( release_summary_lines)
def test_missing_section_in_release_summary(self): release_summary_lines = read_from_file(MOCK_RELEASE_SUMMARY_FILEPATH) invalid_ordering = {'### section1:\n': '### section2: \n'} ordering_swap = self.swap(update_changelog_and_credits, 'EXPECTED_ORDERING', invalid_ordering) with ordering_swap, self.assertRaisesRegexp( Exception, ('Expected release_summary to have ### section1: section to ' 'ensure that automatic updates to changelog and credits are ' 'correct.')): update_changelog_and_credits.check_ordering_of_sections( release_summary_lines)
def test_release_summary_content(self): def mock_check_blocking_bug_issue_count(unused_repo): pass def mock_check_prs_for_current_release_are_released(unused_repo): pass def mock_get_current_version_tag(unused_repo): return github.Tag.Tag(requester='', headers='', attributes={'commit': { 'sha': 'sha' }}, completed='') def mock_get_extra_commits_in_new_release(unused_base_commit, unused_repo): return [ github.Commit.Commit(requester='', headers='', attributes={'sha': 'sha1'}, completed=''), github.Commit.Commit(requester='', headers='', attributes={'sha': 'sha2'}, completed=''), github.Commit.Commit(requester='', headers='', attributes={'sha': 'sha3'}, completed='') ] def mock_gather_logs(unused_start, stop='HEAD'): new_log1 = generate_release_info.Log('sha1', 'author1', 'email1', 'message1') new_log2 = generate_release_info.Log('sha2', 'author2', 'email2', 'message2') old_log = generate_release_info.Log('sha3', 'author3', 'email3', 'message3') cherrypick_log = generate_release_info.Log('sha4', 'author4', 'email4', 'message4') if stop == 'HEAD': return [new_log1, new_log2, old_log, cherrypick_log] else: return [old_log] def mock_extract_issues(unused_logs): return {'issues'} def mock_check_versions(unused_current_release): return ['version_change'] def mock_check_setup_scripts(unused_base_release_tag): return {'setup_changes': True} def mock_check_storage_models(unused_current_release): return ['storage_changes'] def mock_extract_pr_numbers(unused_logs): return [] def mock_get_prs_from_pr_numbers(unused_pr_numbers, unused_repo): return [] def mock_get_changelog_categories(unused_pulls): return {'category': ['pr1', 'pr2']} blocking_bug_swap = self.swap(common, 'check_blocking_bug_issue_count', mock_check_blocking_bug_issue_count) check_prs_swap = self.swap( common, 'check_prs_for_current_release_are_released', mock_check_prs_for_current_release_are_released) version_tag_swap = self.swap(generate_release_info, 'get_current_version_tag', mock_get_current_version_tag) extra_commits_swap = self.swap(generate_release_info, 'get_extra_commits_in_new_release', mock_get_extra_commits_in_new_release) gather_logs_swap = self.swap(generate_release_info, 'gather_logs', mock_gather_logs) extract_issues_swap = self.swap(generate_release_info, 'extract_issues', mock_extract_issues) check_versions_swap = self.swap(generate_release_info, 'check_versions', mock_check_versions) setup_scripts_swap = self.swap(generate_release_info, 'check_setup_scripts', mock_check_setup_scripts) storage_models_swap = self.swap(generate_release_info, 'check_storage_models', mock_check_storage_models) extract_prs_swap = self.swap(generate_release_info, 'extract_pr_numbers', mock_extract_pr_numbers) get_prs_swap = self.swap(generate_release_info, 'get_prs_from_pr_numbers', mock_get_prs_from_pr_numbers) get_changelog_swap = self.swap(generate_release_info, 'get_changelog_categories', mock_get_changelog_categories) tmp_file = tempfile.NamedTemporaryFile() release_summary_swap = self.swap(release_constants, 'RELEASE_SUMMARY_FILEPATH', tmp_file.name) with self.branch_name_swap, self.open_browser_swap: with self.get_organization_swap, self.get_repo_swap: with self.getpass_swap, blocking_bug_swap, check_prs_swap: with version_tag_swap, extra_commits_swap, get_prs_swap: with gather_logs_swap, extract_issues_swap: with check_versions_swap, setup_scripts_swap: with storage_models_swap, release_summary_swap: with get_changelog_swap, extract_prs_swap: generate_release_info.main( 'test-token') with python_utils.open_file(GENERATED_RELEASE_SUMMARY_FILEPATH, 'r') as f: expected_lines = f.readlines() with python_utils.open_file(tmp_file.name, 'r') as f: actual_lines = f.readlines() update_changelog_and_credits.check_ordering_of_sections(actual_lines) self.assertEqual(actual_lines, expected_lines)