diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-07-20 09:55:51 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-07-20 09:55:51 +0000 |
commit | e8d2c2579383897a1dd7f9debd359abe8ae8373d (patch) | |
tree | c42be41678c2586d49a75cabce89322082698334 /spec/services/merge_requests | |
parent | fc845b37ec3a90aaa719975f607740c22ba6a113 (diff) | |
download | gitlab-ce-e8d2c2579383897a1dd7f9debd359abe8ae8373d.tar.gz |
Add latest changes from gitlab-org/gitlab@14-1-stable-eev14.1.0-rc42
Diffstat (limited to 'spec/services/merge_requests')
5 files changed, 118 insertions, 36 deletions
diff --git a/spec/services/merge_requests/build_service_spec.rb b/spec/services/merge_requests/build_service_spec.rb index d10f82289bd..0f282384661 100644 --- a/spec/services/merge_requests/build_service_spec.rb +++ b/spec/services/merge_requests/build_service_spec.rb @@ -252,8 +252,8 @@ RSpec.describe MergeRequests::BuildService do context 'when the source branch matches an issue' do where(:factory, :source_branch, :closing_message) do - :jira_service | 'FOO-123-fix-issue' | 'Closes FOO-123' - :jira_service | 'fix-issue' | nil + :jira_integration | 'FOO-123-fix-issue' | 'Closes FOO-123' + :jira_integration | 'fix-issue' | nil :custom_issue_tracker_integration | '123-fix-issue' | 'Closes #123' :custom_issue_tracker_integration | 'fix-issue' | nil nil | '123-fix-issue' | 'Closes #123' @@ -351,8 +351,8 @@ RSpec.describe MergeRequests::BuildService do context 'when the source branch matches an issue' do where(:factory, :source_branch, :title, :closing_message) do - :jira_service | 'FOO-123-fix-issue' | 'Resolve FOO-123 "Fix issue"' | 'Closes FOO-123' - :jira_service | 'fix-issue' | 'Fix issue' | nil + :jira_integration | 'FOO-123-fix-issue' | 'Resolve FOO-123 "Fix issue"' | 'Closes FOO-123' + :jira_integration | 'fix-issue' | 'Fix issue' | nil :custom_issue_tracker_integration | '123-fix-issue' | 'Resolve #123 "Fix issue"' | 'Closes #123' :custom_issue_tracker_integration | 'fix-issue' | 'Fix issue' | nil nil | '123-fix-issue' | 'Resolve "A bug"' | 'Closes #123' @@ -400,8 +400,8 @@ RSpec.describe MergeRequests::BuildService do context 'when the source branch matches an issue' do where(:factory, :source_branch, :title, :closing_message) do - :jira_service | 'FOO-123-fix-issue' | 'Resolve FOO-123 "Fix issue"' | 'Closes FOO-123' - :jira_service | 'fix-issue' | 'Fix issue' | nil + :jira_integration | 'FOO-123-fix-issue' | 'Resolve FOO-123 "Fix issue"' | 'Closes FOO-123' + :jira_integration | 'fix-issue' | 'Fix issue' | nil :custom_issue_tracker_integration | '123-fix-issue' | 'Resolve #123 "Fix issue"' | 'Closes #123' :custom_issue_tracker_integration | 'fix-issue' | 'Fix issue' | nil nil | '123-fix-issue' | 'Resolve "A bug"' | 'Closes #123' diff --git a/spec/services/merge_requests/handle_assignees_change_service_spec.rb b/spec/services/merge_requests/handle_assignees_change_service_spec.rb index f9eed6eea2d..c43f5db6059 100644 --- a/spec/services/merge_requests/handle_assignees_change_service_spec.rb +++ b/spec/services/merge_requests/handle_assignees_change_service_spec.rb @@ -104,9 +104,9 @@ RSpec.describe MergeRequests::HandleAssigneesChangeService do context 'when execute_hooks option is set to true' do let(:options) { { execute_hooks: true } } - it 'execute hooks and services' do + it 'executes hooks and integrations' do expect(merge_request.project).to receive(:execute_hooks).with(anything, :merge_request_hooks) - expect(merge_request.project).to receive(:execute_services).with(anything, :merge_request_hooks) + expect(merge_request.project).to receive(:execute_integrations).with(anything, :merge_request_hooks) expect(service).to receive(:enqueue_jira_connect_messages_for).with(merge_request) execute diff --git a/spec/services/merge_requests/merge_service_spec.rb b/spec/services/merge_requests/merge_service_spec.rb index 503c0282bd6..b3af4d67896 100644 --- a/spec/services/merge_requests/merge_service_spec.rb +++ b/spec/services/merge_requests/merge_service_spec.rb @@ -163,14 +163,14 @@ RSpec.describe MergeRequests::MergeService do context 'with Jira integration' do include JiraServiceHelper - let(:jira_tracker) { project.create_jira_service } + let(:jira_tracker) { project.create_jira_integration } let(:jira_issue) { ExternalIssue.new('JIRA-123', project) } let(:commit) { double('commit', safe_message: "Fixes #{jira_issue.to_reference}") } before do - stub_jira_service_test + stub_jira_integration_test project.update!(has_external_issue_tracker: true) - jira_service_settings + jira_integration_settings stub_jira_urls(jira_issue.id) allow(merge_request).to receive(:commits).and_return([commit]) end diff --git a/spec/services/merge_requests/push_options_handler_service_spec.rb b/spec/services/merge_requests/push_options_handler_service_spec.rb index 87c3fc6a2d8..5f76f6f5c44 100644 --- a/spec/services/merge_requests/push_options_handler_service_spec.rb +++ b/spec/services/merge_requests/push_options_handler_service_spec.rb @@ -5,11 +5,16 @@ require 'spec_helper' RSpec.describe MergeRequests::PushOptionsHandlerService do include ProjectForksHelper - let_it_be(:project) { create(:project, :public, :repository) } + let_it_be(:parent_group) { create(:group, :public) } + let_it_be(:child_group) { create(:group, :public, parent: parent_group) } + let_it_be(:project) { create(:project, :public, :repository, group: child_group) } let_it_be(:user1) { create(:user, developer_projects: [project]) } let_it_be(:user2) { create(:user, developer_projects: [project]) } let_it_be(:user3) { create(:user, developer_projects: [project]) } let_it_be(:forked_project) { fork_project(project, user1, repository: true) } + let_it_be(:parent_group_milestone) { create(:milestone, group: parent_group, title: 'ParentGroupMilestone1.0') } + let_it_be(:child_group_milestone) { create(:milestone, group: child_group, title: 'ChildGroupMilestone1.0') } + let_it_be(:project_milestone) { create(:milestone, project: project, title: 'ProjectMilestone1.0') } let(:service) { described_class.new(project: project, current_user: user1, changes: changes, push_options: push_options) } let(:source_branch) { 'fix' } @@ -59,6 +64,16 @@ RSpec.describe MergeRequests::PushOptionsHandlerService do end end + shared_examples_for 'a service that can set the milestone of a merge request' do + subject(:last_mr) { MergeRequest.last } + + it 'sets the milestone' do + service.execute + + expect(last_mr.milestone&.title).to eq(expected_milestone) + end + end + shared_examples_for 'a service that can set the merge request to merge when pipeline succeeds' do subject(:last_mr) { MergeRequest.last } @@ -514,6 +529,90 @@ RSpec.describe MergeRequests::PushOptionsHandlerService do it_behaves_like 'with the project default branch' end + describe '`milestone` push option' do + context 'with a valid milestone' do + let(:expected_milestone) { project_milestone.title } + let(:push_options) { { milestone: project_milestone.title } } + + context 'with a new branch' do + let(:changes) { new_branch_changes } + + it_behaves_like 'a service that does not create a merge request' + + it 'adds an error to the service' do + service.execute + + expect(service.errors).to include(error_mr_required) + end + + context 'when coupled with the `create` push option' do + let(:push_options) { { create: true, milestone: project_milestone.title } } + + it_behaves_like 'a service that can create a merge request' + it_behaves_like 'a service that can set the milestone of a merge request' + end + end + + context 'with an existing branch but no open MR' do + let(:changes) { existing_branch_changes } + + it_behaves_like 'a service that does not create a merge request' + + it 'adds an error to the service' do + service.execute + + expect(service.errors).to include(error_mr_required) + end + + context 'when coupled with the `create` push option' do + let(:push_options) { { create: true, milestone: project_milestone.title } } + + it_behaves_like 'a service that can create a merge request' + it_behaves_like 'a service that can set the milestone of a merge request' + end + end + + context 'with an existing branch that has a merge request open' do + let(:changes) { existing_branch_changes } + let!(:merge_request) { create(:merge_request, source_project: project, source_branch: source_branch)} + + it_behaves_like 'a service that does not create a merge request' + it_behaves_like 'a service that can set the milestone of a merge request' + end + + it_behaves_like 'with a deleted branch' + it_behaves_like 'with the project default branch' + end + + context 'with invalid milestone' do + let(:expected_milestone) { nil } + let(:changes) { new_branch_changes } + let(:push_options) { { create: true, milestone: 'invalid_milestone' } } + + it_behaves_like 'a service that can set the milestone of a merge request' + end + + context 'with an ancestor milestone' do + let(:changes) { existing_branch_changes } + + context 'with immediate parent milestone' do + let(:push_options) { { create: true, milestone: child_group_milestone.title } } + let(:expected_milestone) { child_group_milestone.title } + + it_behaves_like 'a service that can create a merge request' + it_behaves_like 'a service that can set the milestone of a merge request' + end + + context 'with multi-level ancestor milestone' do + let(:push_options) { { create: true, milestone: parent_group_milestone.title } } + let(:expected_milestone) { parent_group_milestone.title } + + it_behaves_like 'a service that can create a merge request' + it_behaves_like 'a service that can set the milestone of a merge request' + end + end + end + shared_examples 'with an existing branch that has a merge request open in foss' do let(:changes) { existing_branch_changes } let!(:merge_request) { create(:merge_request, source_project: project, source_branch: source_branch)} diff --git a/spec/services/merge_requests/rebase_service_spec.rb b/spec/services/merge_requests/rebase_service_spec.rb index a46f3cf6148..ca561376581 100644 --- a/spec/services/merge_requests/rebase_service_spec.rb +++ b/spec/services/merge_requests/rebase_service_spec.rb @@ -25,30 +25,6 @@ RSpec.describe MergeRequests::RebaseService do end describe '#execute' do - context 'when another rebase is already in progress' do - before do - allow(repository).to receive(:rebase_in_progress?).with(merge_request.id).and_return(true) - end - - it 'saves the error message' do - service.execute(merge_request) - - expect(merge_request.reload.merge_error).to eq 'Rebase task canceled: Another rebase is already in progress' - end - - it 'returns an error' do - expect(service.execute(merge_request)).to match(status: :error, - message: described_class::REBASE_ERROR) - end - - it 'clears rebase_jid' do - expect { service.execute(merge_request) } - .to change { merge_request.rebase_jid } - .from(rebase_jid) - .to(nil) - end - end - shared_examples 'sequence of failure and success' do it 'properly clears the error message' do allow(repository).to receive(:gitaly_operation_client).and_raise('Something went wrong') @@ -150,6 +126,13 @@ RSpec.describe MergeRequests::RebaseService do it_behaves_like 'a service that can execute a successful rebase' + it 'clears rebase_jid' do + expect { service.execute(merge_request) } + .to change(merge_request, :rebase_jid) + .from(rebase_jid) + .to(nil) + end + context 'when skip_ci flag is set' do let(:skip_ci) { true } |