summaryrefslogtreecommitdiff
path: root/spec/controllers/dashboard
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2019-06-23 07:54:08 -0700
committerStan Hu <stanhu@gmail.com>2019-06-24 09:57:38 -0700
commit211a00473b78ada629d1c401ec443b766392185e (patch)
tree4932e6f52a698ec8ffbc6756d53ede7695616ff0 /spec/controllers/dashboard
parent7f6de7fe29c2731975166b1a864c5a5cf3141132 (diff)
downloadgitlab-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.rb28
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)