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-04-15 15:09:18 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-04-15 15:09:18 +0300
commitb7c735c8ac11b8182807070fc6f84f2606e15427 (patch)
treee74b4d25abb8bbf23546f001dd94515e2840a3a3 /spec/services
parent221b529789f4090341a825695aeb49b8df6dd11d (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/services')
-rw-r--r--spec/services/discussions/capture_diff_note_position_service_spec.rb31
-rw-r--r--spec/services/discussions/capture_diff_note_positions_service_spec.rb67
-rw-r--r--spec/services/merge_requests/mergeability_check_service_spec.rb18
-rw-r--r--spec/services/notes/create_service_spec.rb13
4 files changed, 129 insertions, 0 deletions
diff --git a/spec/services/discussions/capture_diff_note_position_service_spec.rb b/spec/services/discussions/capture_diff_note_position_service_spec.rb
new file mode 100644
index 00000000000..fced2eb7fce
--- /dev/null
+++ b/spec/services/discussions/capture_diff_note_position_service_spec.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Discussions::CaptureDiffNotePositionService do
+ context 'image note on diff' do
+ let!(:note) { create(:image_diff_note_on_merge_request) }
+
+ subject { described_class.new(note.noteable, ['files/images/any_image.png']) }
+
+ it 'is note affected by the service' do
+ expect(Gitlab::Diff::PositionTracer).not_to receive(:new)
+
+ expect(subject.execute(note.discussion)).to eq(nil)
+ expect(note.diff_note_positions).to be_empty
+ end
+ end
+
+ context 'when empty paths are passed as a param' do
+ let!(:note) { create(:diff_note_on_merge_request) }
+
+ subject { described_class.new(note.noteable, []) }
+
+ it 'does not calculate positons' do
+ expect(Gitlab::Diff::PositionTracer).not_to receive(:new)
+
+ expect(subject.execute(note.discussion)).to eq(nil)
+ expect(note.diff_note_positions).to be_empty
+ end
+ end
+end
diff --git a/spec/services/discussions/capture_diff_note_positions_service_spec.rb b/spec/services/discussions/capture_diff_note_positions_service_spec.rb
new file mode 100644
index 00000000000..7b1e207f3eb
--- /dev/null
+++ b/spec/services/discussions/capture_diff_note_positions_service_spec.rb
@@ -0,0 +1,67 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Discussions::CaptureDiffNotePositionsService do
+ context 'when merge request has a discussion' do
+ let(:source_branch) { 'compare-with-merge-head-source' }
+ let(:target_branch) { 'compare-with-merge-head-target' }
+ let(:merge_request) { create(:merge_request, source_branch: source_branch, target_branch: target_branch) }
+ let(:project) { merge_request.project }
+
+ let(:offset) { 30 }
+ let(:first_new_line) { 508 }
+ let(:second_new_line) { 521 }
+
+ let(:service) { described_class.new(merge_request) }
+
+ def build_position(new_line, diff_refs)
+ path = 'files/markdown/ruby-style-guide.md'
+ Gitlab::Diff::Position.new(old_path: path, new_path: path,
+ new_line: new_line, diff_refs: diff_refs)
+ end
+
+ def note_for(new_line)
+ position = build_position(new_line, merge_request.diff_refs)
+ create(:diff_note_on_merge_request, project: project, position: position, noteable: merge_request)
+ end
+
+ def verify_diff_note_position!(note, line)
+ id, old_line, new_line = note.line_code.split('_')
+
+ expect(new_line).to eq(line.to_s)
+ expect(note.diff_note_positions.size).to eq(1)
+
+ diff_position = note.diff_note_positions.last
+ diff_refs = Gitlab::Diff::DiffRefs.new(
+ base_sha: merge_request.target_branch_sha,
+ start_sha: merge_request.target_branch_sha,
+ head_sha: merge_request.merge_ref_head.sha)
+
+ expect(diff_position.line_code).to eq("#{id}_#{old_line.to_i - offset}_#{new_line}")
+ expect(diff_position.position).to eq(build_position(new_line.to_i, diff_refs))
+ end
+
+ let!(:first_discussion_note) { note_for(first_new_line) }
+ let!(:second_discussion_note) { note_for(second_new_line) }
+ let!(:second_discussion_another_note) do
+ create(:diff_note_on_merge_request,
+ project: project,
+ position: second_discussion_note.position,
+ discussion_id: second_discussion_note.discussion_id,
+ noteable: merge_request)
+ end
+
+ context 'and position of the discussion changed on target branch head' do
+ it 'diff positions are created for the first notes of the discussions' do
+ MergeRequests::MergeToRefService.new(project, merge_request.author).execute(merge_request)
+ service.execute
+
+ verify_diff_note_position!(first_discussion_note, first_new_line)
+ verify_diff_note_position!(second_discussion_note, second_new_line)
+
+ expect(second_discussion_another_note.diff_note_positions).to be_empty
+ end
+ end
+ end
+end
diff --git a/spec/services/merge_requests/mergeability_check_service_spec.rb b/spec/services/merge_requests/mergeability_check_service_spec.rb
index 8f17e8083e3..45519ddf3d3 100644
--- a/spec/services/merge_requests/mergeability_check_service_spec.rb
+++ b/spec/services/merge_requests/mergeability_check_service_spec.rb
@@ -33,6 +33,24 @@ describe MergeRequests::MergeabilityCheckService, :clean_gitlab_redis_shared_sta
expect(merge_request.merge_status).to eq('can_be_merged')
end
+ it 'update diff discussion positions' do
+ expect_next_instance_of(Discussions::CaptureDiffNotePositionsService) do |service|
+ expect(service).to receive(:execute)
+ end
+
+ subject
+ end
+
+ context 'when merge_ref_head_comments is disabled' do
+ it 'does not update diff discussion positions' do
+ stub_feature_flags(merge_ref_head_comments: false)
+
+ expect(Discussions::CaptureDiffNotePositionsService).not_to receive(:new)
+
+ subject
+ end
+ end
+
it 'updates the merge ref' do
expect { subject }.to change(merge_request, :merge_ref_head).from(nil)
end
diff --git a/spec/services/notes/create_service_spec.rb b/spec/services/notes/create_service_spec.rb
index a03b78a9a7a..c461dd700ec 100644
--- a/spec/services/notes/create_service_spec.rb
+++ b/spec/services/notes/create_service_spec.rb
@@ -143,10 +143,21 @@ describe Notes::CreateService do
end
it 'note is associated with a note diff file' do
+ MergeRequests::MergeToRefService.new(merge_request.project, merge_request.author).execute(merge_request)
+
note = described_class.new(project_with_repo, user, new_opts).execute
expect(note).to be_persisted
expect(note.note_diff_file).to be_present
+ expect(note.diff_note_positions).to be_present
+ end
+
+ it 'does not create diff positions merge_ref_head_comments is disabled' do
+ stub_feature_flags(merge_ref_head_comments: false)
+
+ expect(Discussions::CaptureDiffNotePositionService).not_to receive(:new)
+
+ described_class.new(project_with_repo, user, new_opts).execute
end
end
@@ -160,6 +171,8 @@ describe Notes::CreateService do
end
it 'note is not associated with a note diff file' do
+ expect(Discussions::CaptureDiffNotePositionService).not_to receive(:new)
+
note = described_class.new(project_with_repo, user, new_opts).execute
expect(note).to be_persisted