コード例 #1
0
    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
コード例 #2
0
    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
コード例 #3
0
    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
コード例 #4
0
    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
コード例 #5
0
    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
コード例 #6
0
    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
コード例 #7
0
    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
コード例 #8
0
    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
コード例 #9
0
    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
コード例 #10
0
    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)
コード例 #11
0
    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
コード例 #12
0
    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)
コード例 #13
0
    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)
コード例 #14
0
    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)
コード例 #15
0
    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
コード例 #16
0
    def test_add_invalid_type():

        changelog = model.Changelog(sha='sha', current_version='0.0.1')
        with pytest.raises(exceptions.InvalidArgumentsException):
            changelog.add({})
コード例 #17
0
    def test_empty():

        changelog = model.Changelog(sha='sha', current_version='0.0.1')

        assert changelog.empty
コード例 #18
0
    def test_current_version_not_semantic():

        with pytest.raises(exceptions.InvalidArgumentsException):
            model.Changelog(sha='sha', current_version='123')
コード例 #19
0
    def test_no_current_version():

        with pytest.raises(exceptions.InvalidArgumentsException):
            model.Changelog(sha='sha', current_version='')