diff options
author | Douwe Maan <douwe@gitlab.com> | 2017-10-03 08:29:14 +0000 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2017-10-03 08:29:14 +0000 |
commit | 848fdc813e0f30a4e915912d924088e7d09e99a0 (patch) | |
tree | ae268b8bad3a2ac062b6518145bc2cd543929017 /spec | |
parent | 4582fff6625208501a91a6da82da244e8914eee1 (diff) | |
parent | 10096256f1cf91cbf3bc10e4f02499d265a87bfb (diff) | |
download | gitlab-ce-848fdc813e0f30a4e915912d924088e7d09e99a0.tar.gz |
Merge branch 'sh-improve-perf-notes-actions' into 'master'
Improve performance of filtering notes in NotesController
See merge request gitlab-org/gitlab-ce!14645
Diffstat (limited to 'spec')
-rw-r--r-- | spec/controllers/projects/notes_controller_spec.rb | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/spec/controllers/projects/notes_controller_spec.rb b/spec/controllers/projects/notes_controller_spec.rb index 6ffe41b8608..c0337f96fc6 100644 --- a/spec/controllers/projects/notes_controller_spec.rb +++ b/spec/controllers/projects/notes_controller_spec.rb @@ -120,6 +120,40 @@ describe Projects::NotesController do expect(note_json[:diff_discussion_html]).to be_nil end end + + context 'with cross-reference system note', :request_store do + let(:new_issue) { create(:issue) } + let(:cross_reference) { "mentioned in #{new_issue.to_reference(issue.project)}" } + + before do + note + create(:discussion_note_on_issue, :system, noteable: issue, project: issue.project, note: cross_reference) + end + + it 'filters notes that the user should not see' do + get :index, request_params + + expect(parsed_response[:notes].count).to eq(1) + expect(note_json[:id]).to eq(note.id) + end + + it 'does not result in N+1 queries' do + # Instantiate the controller variables to ensure QueryRecorder has an accurate base count + get :index, request_params + + RequestStore.clear! + + control_count = ActiveRecord::QueryRecorder.new do + get :index, request_params + end.count + + RequestStore.clear! + + create_list(:discussion_note_on_issue, 2, :system, noteable: issue, project: issue.project, note: cross_reference) + + expect { get :index, request_params }.not_to exceed_query_limit(control_count) + end + end end describe 'POST create' do |