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
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), )
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)
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)
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, )
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, )
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, )
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, )
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, )
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!")
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)
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)