summaryrefslogtreecommitdiff
path: root/spec/models/merge_request_spec.rb
diff options
context:
space:
mode:
authorOswaldo Ferreira <oswaldo@gitlab.com>2019-09-06 18:19:48 -0300
committerOswaldo Ferreira <oswaldo@gitlab.com>2019-09-10 20:33:46 -0300
commitf66c00adc6d475162b14eed29290923e9ea8a25f (patch)
tree4818d002b22ec95272458e03a1ebb93df812e68f /spec/models/merge_request_spec.rb
parent0402fc13d2bca3e483a36676c6c11157b5863cd7 (diff)
downloadgitlab-ce-f66c00adc6d475162b14eed29290923e9ea8a25f.tar.gz
Improve the performance for MR discussions loadosw-improve-discussions-query
It considerably improves the query for preloading MR discussion diffs for: 1. MR diff comments (made at Diffs tab; presented at the main MR page) 2. Comments on commits being listed at the MR Additionally, it also prevents a second similar query that was unnecessarily being made.
Diffstat (limited to 'spec/models/merge_request_spec.rb')
-rw-r--r--spec/models/merge_request_spec.rb59
1 files changed, 30 insertions, 29 deletions
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb
index 11234982dd4..57bf1cbf933 100644
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -652,9 +652,35 @@ describe MergeRequest do
end
end
- describe '#preload_discussions_diff_highlight' do
+ describe '#discussions_diffs' do
let(:merge_request) { create(:merge_request) }
+ shared_examples 'discussions diffs collection' do
+ it 'initializes Gitlab::DiscussionsDiff::FileCollection with correct data' do
+ note_diff_file = diff_note.note_diff_file
+
+ expect(Gitlab::DiscussionsDiff::FileCollection)
+ .to receive(:new)
+ .with([note_diff_file])
+ .and_call_original
+
+ result = merge_request.discussions_diffs
+
+ expect(result).to be_a(Gitlab::DiscussionsDiff::FileCollection)
+ end
+
+ it 'eager loads relations' do
+ result = merge_request.discussions_diffs
+
+ recorder = ActiveRecord::QueryRecorder.new do
+ result.first.diff_note
+ result.first.diff_note.project
+ end
+
+ expect(recorder.count).to be_zero
+ end
+ end
+
context 'with commit diff note' do
let(:other_merge_request) { create(:merge_request) }
@@ -666,40 +692,15 @@ describe MergeRequest do
create(:diff_note_on_commit, project: other_merge_request.project)
end
- it 'preloads diff highlighting' do
- expect_next_instance_of(Gitlab::DiscussionsDiff::FileCollection) do |collection|
- note_diff_file = diff_note.note_diff_file
-
- expect(collection)
- .to receive(:load_highlight)
- .with([note_diff_file.id]).and_call_original
- end
-
- merge_request.preload_discussions_diff_highlight
- end
+ it_behaves_like 'discussions diffs collection'
end
context 'with merge request diff note' do
- let!(:unresolved_diff_note) do
+ let!(:diff_note) do
create(:diff_note_on_merge_request, project: merge_request.project, noteable: merge_request)
end
- let!(:resolved_diff_note) do
- create(:diff_note_on_merge_request, :resolved, project: merge_request.project, noteable: merge_request)
- end
-
- it 'preloads diff highlighting' do
- expect_next_instance_of(Gitlab::DiscussionsDiff::FileCollection) do |collection|
- note_diff_file = unresolved_diff_note.note_diff_file
-
- expect(collection)
- .to receive(:load_highlight)
- .with([note_diff_file.id])
- .and_call_original
- end
-
- merge_request.preload_discussions_diff_highlight
- end
+ it_behaves_like 'discussions diffs collection'
end
end