def test_render_only_commits(request): changelog = model.Changelog(sha='sha', current_version='0.0.1') commit = model.ChangelogCommit(title=request.node.name, url='url', timestamp=121234) changelog.add(commit) expected = """*Changes* **Dangling Commits:** - {} ([Commit](url)) """.format(request.node.name) actual = changelog.render() assert expected == actual
def test_next_version(): changelog = model.Changelog(sha='sha', current_version='0.0.1') patch_issue = model.ChangelogIssue(title='patch issue', url='url1', timestamp=100, semantic=model.ChangelogIssue.PATCH) minor_issue = model.ChangelogIssue(title='minor issue', url='url2', timestamp=50, semantic=model.ChangelogIssue.MINOR) major_issue = model.ChangelogIssue(title='major issue', url='url3', timestamp=10, semantic=model.ChangelogIssue.MAJOR) changelog.add(patch_issue) changelog.add(minor_issue) changelog.add(major_issue) expected_version = '1.1.1' assert expected_version == changelog.next_version
def test_render_only_features(request): changelog = model.Changelog(sha='sha', current_version='0.0.1') feature = model.ChangelogIssue(title=request.node.name, url='url', timestamp=121234, kind=model.ChangelogIssue.FEATURE) changelog.add(feature) expected = """*Changes* **New Features:** - {} ([Issue](url)) """.format(request.node.name) actual = changelog.render() assert expected == actual
def test_render_only_bugs(request): changelog = model.Changelog(sha='sha', current_version='0.0.1') bug = model.ChangelogIssue(title=request.node.name, url='url', timestamp=121234, kind=model.ChangelogIssue.BUG) changelog.add(bug) expected = """*Changes* **Bug Fixes:** - {} ([Issue](url)) """.format(request.node.name) actual = changelog.render() assert expected == actual
def test_render_all(request): changelog = model.Changelog(sha='sha', current_version='0.0.1') commit = model.ChangelogCommit(title=request.node.name, url='url', timestamp=121234) bug = model.ChangelogIssue(title=request.node.name, url='url', timestamp=121234, kind=model.ChangelogIssue.FEATURE) issue = model.ChangelogIssue(title=request.node.name, url='url', timestamp=121234, kind=model.ChangelogIssue.ISSUE) feature = model.ChangelogIssue(title=request.node.name, url='url', timestamp=121234, kind=model.ChangelogIssue.FEATURE) changelog.add(commit) changelog.add(bug) changelog.add(issue) changelog.add(feature) expected = """*Changes* **New Features:** - {0} ([Issue](url)) **Issues:** - {0} ([Issue](url)) **Dangling Commits:** - {0} ([Commit](url)) """.format(request.node.name) actual = changelog.render() assert expected == actual
def test_not_empty_commits(request): changelog = model.Changelog(sha='sha', current_version='0.0.1') commit = model.ChangelogCommit(title=request.node.name, url='url', timestamp=121234) changelog.add(commit) assert not changelog.empty
def test_not_empty_issues(request): changelog = model.Changelog(sha='sha', current_version='0.0.1') issue = model.ChangelogIssue(title=request.node.name, url='url', timestamp=121234, kind=model.ChangelogIssue.ISSUE) changelog.add(issue) assert not changelog.empty
def test_next_version_none(request): changelog = model.Changelog(sha='sha', current_version='0.0.1') non_release_issue = model.ChangelogIssue(title=request.node.name, url='url', timestamp=123123) changelog.add(non_release_issue) expected_version = None assert expected_version == changelog.next_version
def test_add_commit(request): changelog = model.Changelog(sha='sha', current_version='0.0.1') commit = model.ChangelogCommit(title=request.node.name, url='url', timestamp=121234) changelog.add(commit) expected_commit_title = request.node.name expected_number_of_commits = 1 assert expected_number_of_commits == len(changelog.commits) assert expected_commit_title == changelog.commits.pop().title assert not changelog.features assert not changelog.bugs assert not changelog.issues
def test_add_identical_commits(): changelog = model.Changelog(sha='sha', current_version='0.0.1') commit1 = model.ChangelogCommit(title='commit', url='url', timestamp=100) commit2 = model.ChangelogIssue(title='commit', url='url', timestamp=100) changelog.add(commit1) changelog.add(commit2) expected_number_of_commits = 1 assert expected_number_of_commits == len(changelog.commits)
def test_add_feature(request): changelog = model.Changelog(sha='sha', current_version='0.0.1') feature = model.ChangelogIssue(title=request.node.name, url='url', timestamp=121234, kind=model.ChangelogIssue.FEATURE) changelog.add(feature) expected_feature_title = request.node.name expected_number_of_features = 1 assert expected_number_of_features == len(changelog.features) assert expected_feature_title == changelog.features.pop().title assert not changelog.bugs assert not changelog.issues assert not changelog.commits
def test_add_identical_features(): changelog = model.Changelog(sha='sha', current_version='0.0.1') feature1 = model.ChangelogIssue(title='feature', url='url', timestamp=100, kind=model.ChangelogIssue.FEATURE) feature2 = model.ChangelogIssue(title='feature', url='url', timestamp=100, kind=model.ChangelogIssue.FEATURE) changelog.add(feature1) changelog.add(feature2) expected_number_of_features = 1 assert expected_number_of_features == len(changelog.features)
def test_add_identical_bugs(): changelog = model.Changelog(sha='sha', current_version='0.0.1') bug1 = model.ChangelogIssue(title='bug', url='url', timestamp=100, kind=model.ChangelogIssue.BUG) bug2 = model.ChangelogIssue(title='bug', url='url', timestamp=100, kind=model.ChangelogIssue.BUG) changelog.add(bug1) changelog.add(bug2) expected_number_of_bugs = 1 assert expected_number_of_bugs == len(changelog.bugs)
def test_add_identical_issues(): changelog = model.Changelog(sha='sha', current_version='0.0.1') issue1 = model.ChangelogIssue(title='issue', url='url', timestamp=100, kind=model.ChangelogIssue.ISSUE) issue2 = model.ChangelogIssue(title='issue', url='url', timestamp=100, kind=model.ChangelogIssue.ISSUE) changelog.add(issue1) changelog.add(issue2) expected_number_of_issues = 1 assert expected_number_of_issues == len(changelog.issues)
def generate_changelog(self, base, hooks): hooks = hooks or {} pre_commit = hooks.get('pre_commit', _empty_hook) pre_collect = hooks.get('pre_collect', _empty_hook) pre_analyze = hooks.get('pre_analyze', _empty_hook) post_analyze = hooks.get('post_analyze', _empty_hook) post_commit = hooks.get('post_commit', _empty_hook) self._debug('Generating changelog...') pre_collect() # additional API call to support branch names as base if base: base = self._repo.repo.get_commit(sha=base).sha base = base or self._fetch_last_release() self._debug('Fetching commits...') commits = self._fetch_commits(base) if not commits: raise exceptions.EmptyChangelogException(sha=self.commit.sha, base=base) self._debug('Fetched commits.', sha=self.commit.sha, base=base) changelog = model.Changelog(current_version=self.setup_py_version, sha=self.commit.sha) pre_analyze(commits) for commit in commits: pre_commit(commit) issues = self._repo.detect_issues(message=commit.commit.message) if not issues: self._debug('Found commit.', sha=commit.sha, commit_message=commit.commit.message) change = model.ChangelogCommit( title=commit.commit.message, url=commit.html_url, timestamp=commit.commit.author.date, impl=commit) self._debug('Adding change to changelog.', change=change.url) changelog.add(change) else: for issue in issues: self._add_issue_to_changelog(issue, changelog) post_commit() post_analyze() self._debug('Generated changelog.') return changelog
def test_add_invalid_type(): changelog = model.Changelog(sha='sha', current_version='0.0.1') with pytest.raises(exceptions.InvalidArgumentsException): changelog.add({})
def test_empty(): changelog = model.Changelog(sha='sha', current_version='0.0.1') assert changelog.empty
def test_current_version_not_semantic(): with pytest.raises(exceptions.InvalidArgumentsException): model.Changelog(sha='sha', current_version='123')
def test_no_current_version(): with pytest.raises(exceptions.InvalidArgumentsException): model.Changelog(sha='sha', current_version='')