diff options
author | Oswaldo Ferreira <oswaldo@gitlab.com> | 2019-09-06 18:19:48 -0300 |
---|---|---|
committer | Oswaldo Ferreira <oswaldo@gitlab.com> | 2019-09-10 20:33:46 -0300 |
commit | f66c00adc6d475162b14eed29290923e9ea8a25f (patch) | |
tree | 4818d002b22ec95272458e03a1ebb93df812e68f /spec/models/merge_request_spec.rb | |
parent | 0402fc13d2bca3e483a36676c6c11157b5863cd7 (diff) | |
download | gitlab-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.rb | 59 |
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 |