From e144369009f3404072f7e0f969f7cded93195a01 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Fri, 14 Feb 2020 00:09:07 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .../services/merge_requests/create_service_spec.rb | 40 +++++++++++++++++++ .../services/merge_requests/update_service_spec.rb | 46 ++++++++++++++++++++++ 2 files changed, 86 insertions(+) (limited to 'spec/services/merge_requests') diff --git a/spec/services/merge_requests/create_service_spec.rb b/spec/services/merge_requests/create_service_spec.rb index 8490127058c..aebead481ce 100644 --- a/spec/services/merge_requests/create_service_spec.rb +++ b/spec/services/merge_requests/create_service_spec.rb @@ -291,6 +291,46 @@ describe MergeRequests::CreateService, :clean_gitlab_redis_shared_state do expect { service.execute }.to change { counter.read(:create) }.by(1) end + + context 'after_save callback to store_mentions' do + let(:labels) { create_pair(:label, project: project) } + let(:milestone) { create(:milestone, project: project) } + let(:req_opts) { { source_branch: 'feature', target_branch: 'master' } } + + context 'when mentionable attributes change' do + let(:opts) { { title: 'Title', description: "Description with #{user.to_reference}" }.merge(req_opts) } + + it 'saves mentions' do + expect_next_instance_of(MergeRequest) do |instance| + expect(instance).to receive(:store_mentions!).and_call_original + end + expect(merge_request.user_mentions.count).to eq 1 + end + end + + context 'when mentionable attributes do not change' do + let(:opts) { { label_ids: labels.map(&:id), milestone_id: milestone.id }.merge(req_opts) } + + it 'does not call store_mentions' do + expect_next_instance_of(MergeRequest) do |instance| + expect(instance).not_to receive(:store_mentions!).and_call_original + end + expect(merge_request.valid?).to be false + expect(merge_request.user_mentions.count).to eq 0 + end + end + + context 'when save fails' do + let(:opts) { { label_ids: labels.map(&:id), milestone_id: milestone.id } } + + it 'does not call store_mentions' do + expect_next_instance_of(MergeRequest) do |instance| + expect(instance).not_to receive(:store_mentions!).and_call_original + end + expect(merge_request.valid?).to be false + end + end + end end it_behaves_like 'new issuable record that supports quick actions' do diff --git a/spec/services/merge_requests/update_service_spec.rb b/spec/services/merge_requests/update_service_spec.rb index baa0ecf27e3..f295f3c4a81 100644 --- a/spec/services/merge_requests/update_service_spec.rb +++ b/spec/services/merge_requests/update_service_spec.rb @@ -162,6 +162,52 @@ describe MergeRequests::UpdateService, :mailer do end end + context 'after_save callback to store_mentions' do + let(:merge_request) { create(:merge_request, title: 'Old title', description: "simple description", source_branch: 'test', source_project: project, author: user) } + let(:labels) { create_pair(:label, project: project) } + let(:milestone) { create(:milestone, project: project) } + let(:req_opts) { { source_branch: 'feature', target_branch: 'master' } } + + subject { MergeRequests::UpdateService.new(project, user, opts).execute(merge_request) } + + context 'when mentionable attributes change' do + let(:opts) { { description: "Description with #{user.to_reference}" }.merge(req_opts) } + + it 'saves mentions' do + expect(merge_request).to receive(:store_mentions!).and_call_original + + expect { subject }.to change { MergeRequestUserMention.count }.by(1) + + expect(merge_request.referenced_users).to match_array([user]) + end + end + + context 'when mentionable attributes do not change' do + let(:opts) { { label_ids: [label.id, label2.id], milestone_id: milestone.id }.merge(req_opts) } + + it 'does not call store_mentions' do + expect(merge_request).not_to receive(:store_mentions!).and_call_original + + expect { subject }.not_to change { MergeRequestUserMention.count } + + expect(merge_request.referenced_users).to be_empty + end + end + + context 'when save fails' do + let(:opts) { { title: '', label_ids: labels.map(&:id), milestone_id: milestone.id } } + + it 'does not call store_mentions' do + expect(merge_request).not_to receive(:store_mentions!).and_call_original + + expect { subject }.not_to change { MergeRequestUserMention.count } + + expect(merge_request.referenced_users).to be_empty + expect(merge_request.valid?).to be false + end + end + end + context 'merge' do let(:opts) do { -- cgit v1.2.1