Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-02-14 03:09:07 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-02-14 03:09:07 +0300
commite144369009f3404072f7e0f969f7cded93195a01 (patch)
treed7a354e2c3c69a7ad65dc81aba8fe2ba59b0a26f /spec/services/merge_requests
parentd466ee5042520ad078fe050cb078d81dc2ebe196 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/services/merge_requests')
-rw-r--r--spec/services/merge_requests/create_service_spec.rb40
-rw-r--r--spec/services/merge_requests/update_service_spec.rb46
2 files changed, 86 insertions, 0 deletions
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
{