예제 #1
0
 def test_default(self):
     assert MergeJobOptions.default() == MergeJobOptions(
         add_tested=False,
         add_part_of=False,
         add_reviewers=False,
         reapprove=False,
         embargo=marge.interval.IntervalUnion.empty(),
         ci_timeout=timedelta(minutes=15),
     )
예제 #2
0
 def test_default(self):
     assert MergeJobOptions.default() == MergeJobOptions(
         add_tested=False,
         add_part_of=False,
         add_reviewers=False,
         reapprove=False,
         approval_timeout=timedelta(seconds=0),
         embargo=marge.interval.IntervalUnion.empty(),
         ci_timeout=timedelta(minutes=15),
         merge_strategy=MergeStrategy.rebase,
         require_ci_run_by_me=False,
     )
예제 #3
0
 def test_default(self):
     assert MergeJobOptions.default() == MergeJobOptions(
         add_tested=False,
         add_part_of=False,
         add_reviewers=False,
         keep_source_branch=False,
         reapprove=False,
         approval_timeout=timedelta(seconds=0),
         embargo=marge.interval.IntervalUnion.empty(),
         ci_timeout=timedelta(minutes=15),
         fusion=Fusion.rebase,
     )
예제 #4
0
 def test_default(self):
     assert MergeJobOptions.default() == MergeJobOptions(
         add_tested=False,
         add_part_of=False,
         add_reviewers=False,
         reapprove=False,
         approval_timeout=timedelta(seconds=0),
         embargo=marge.interval.IntervalUnion.empty(),
         ci_timeout=timedelta(minutes=15),
         fusion=Fusion.rebase,
         use_no_ff_batches=False,
         use_merge_commit_batches=False,
         skip_ci_batches=False,
     )
예제 #5
0
    def test_require_ci_run_by_me(self):
        with patch('marge.job.Pipeline',
                   autospec=True) as pipeline_class, patch('time.sleep'):
            merge_job = self.get_merge_job(options=MergeJobOptions.default(
                ci_timeout=timedelta(seconds=1), require_ci_run_by_me=True))
            merge_job._user.username = '******'
            merge_request = self._mock_merge_request(sha='abc')

            pipelines = [
                [],
                [Mock(spec=pipeline_class, sha='abc', status='success')],
            ]
            pipeline_class.pipelines_by_branch.side_effect = lambda *args, **kw: pipelines.pop(
                0)
            merge_job.wait_for_ci_to_pass(merge_request)

            # Asked for pipelines started by me, started a pipeline, returned
            # without timing out.
            pipeline_class.pipelines_by_branch.assert_any_call(
                merge_request.source_project_id,
                merge_request.source_branch,
                merge_job._api,
                username='******',
            )
            assert pipeline_class.start.call_count == 1
예제 #6
0
 def get_merge_job(self, **merge_kwargs):
     params = {
         'api': create_autospec(marge.gitlab.Api, spec_set=True),
         'user': create_autospec(marge.user.User, spec_set=True),
         'project': create_autospec(marge.project.Project, spec_set=True),
         'repo': create_autospec(marge.git.Repo, spec_set=True),
         'options': MergeJobOptions.default(),
     }
     params.update(merge_kwargs)
     return MergeJob(**params)
예제 #7
0
 def get_merge_job(self, **merge_kwargs):
     params = {
         'api': Mock(),
         'user': Mock(),
         'project': Mock(),
         'repo': Mock(),
         'options': MergeJobOptions.default(),
     }
     params.update(merge_kwargs)
     return MergeJob(**params)
예제 #8
0
    def test_fuse_using_merge(self):
        merge_job = self.get_merge_job(options=MergeJobOptions.default(fusion=Fusion.merge))
        branch_a = 'A'
        branch_b = 'B'

        merge_job.fuse(branch_a, branch_b)

        merge_job._repo.merge.assert_called_once_with(
            branch_a,
            branch_b,
            source_repo_url=ANY,
            local=ANY,
        )
예제 #9
0
    def test_fuse_using_rebase(self):
        merge_job = self.get_merge_job(options=MergeJobOptions.default(
            use_merge_strategy=False))
        branch_a = 'A'
        branch_b = 'B'

        merge_job.fuse(branch_a, branch_b)

        merge_job._repo.rebase.assert_called_once_with(
            branch_a,
            branch_b,
            source_repo_url=ANY,
            local=ANY,
        )
예제 #10
0
    def test_ensure_mergeable_mr_squash_and_trailers(self):
        merge_job = self.get_merge_job(options=MergeJobOptions.default(
            add_reviewers=True))
        merge_request = self._mock_merge_request(
            assignee_ids=[merge_job._user.id],
            state='opened',
            work_in_progress=False,
            squash=True,
        )
        merge_request.fetch_approvals.return_value.sufficient = True
        with pytest.raises(CannotMerge) as exc_info:
            merge_job.ensure_mergeable_mr(merge_request)

        assert (exc_info.value.reason ==
                "Sorry, merging requests marked as auto-squash "
                "would ruin my commit tagging!")
예제 #11
0
    def get_batch_merge_job(self, api, mocklab, **batch_merge_kwargs):
        project_id = mocklab.project_info['id']
        merge_request_iid = mocklab.merge_request_info['iid']

        merge_request = MergeRequest.fetch_by_iid(project_id, merge_request_iid, api)

        params = {
            'api': api,
            'user': marge.user.User.myself(api),
            'project': marge.project.Project.fetch_by_id(project_id, api),
            'repo': create_autospec(marge.git.Repo, spec_set=True),
            'options': MergeJobOptions.default(),
            'merge_requests': [merge_request]
        }
        params.update(batch_merge_kwargs)
        return BatchMergeJob(**params)
예제 #12
0
 def test_default_ci_time(self):
     three_min = timedelta(minutes=3)
     assert MergeJobOptions.default(
         ci_timeout=three_min) == MergeJobOptions.default()._replace(
             ci_timeout=three_min)