diff options
author | Stan Hu <stanhu@gmail.com> | 2019-06-23 07:54:08 -0700 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2019-06-24 09:57:38 -0700 |
commit | 211a00473b78ada629d1c401ec443b766392185e (patch) | |
tree | 4932e6f52a698ec8ffbc6756d53ede7695616ff0 /spec/controllers/dashboard | |
parent | 7f6de7fe29c2731975166b1a864c5a5cf3141132 (diff) | |
download | gitlab-ce-211a00473b78ada629d1c401ec443b766392185e.tar.gz |
Eliminate N+1 queries in Dashboard::TodosController
This appears to bring down the number of SQL queries on GitLab.com for
my Todos page from 672 to 100.
Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/43042
Diffstat (limited to 'spec/controllers/dashboard')
-rw-r--r-- | spec/controllers/dashboard/todos_controller_spec.rb | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/spec/controllers/dashboard/todos_controller_spec.rb b/spec/controllers/dashboard/todos_controller_spec.rb index 6243ddc03c0..9a3fbfaac51 100644 --- a/spec/controllers/dashboard/todos_controller_spec.rb +++ b/spec/controllers/dashboard/todos_controller_spec.rb @@ -44,6 +44,34 @@ describe Dashboard::TodosController do end end + context "with render_views" do + render_views + + it 'avoids N+1 queries', :request_store do + merge_request = create(:merge_request, source_project: project) + create(:todo, project: project, author: author, user: user, target: merge_request) + create(:issue, project: project, assignees: [user]) + + group = create(:group) + group.add_owner(user) + + get :index + + control = ActiveRecord::QueryRecorder.new { get :index } + + create(:issue, project: project, assignees: [user]) + group_2 = create(:group) + group_2.add_owner(user) + project_2 = create(:project) + project_2.add_developer(user) + merge_request_2 = create(:merge_request, source_project: project_2) + create(:todo, project: project, author: author, user: user, target: merge_request_2) + + expect { get :index }.not_to exceed_query_limit(control) + expect(response.status).to eq(200) + end + end + context 'group authorization' do it 'renders 404 when user does not have read access on given group' do unauthorized_group = create(:group, :private) |