diff options
author | Jan Provaznik <jprovaznik@gitlab.com> | 2019-08-27 06:41:38 +0000 |
---|---|---|
committer | Jan Provaznik <jprovaznik@gitlab.com> | 2019-08-27 06:41:38 +0000 |
commit | f91b5d5840996736ee18ef457653cdd225f8445f (patch) | |
tree | fea494a3ece52fe6a972ef7ae3d85ed1a665aef1 /spec/features/dashboard | |
parent | b23dbdf41a047bcf9c001cc34b88a3ce05b69d75 (diff) | |
parent | 29e60b0643ca5451919df233a9aeb4825779e846 (diff) | |
download | gitlab-ce-f91b5d5840996736ee18ef457653cdd225f8445f.tar.gz |
Merge branch 'sh-project-feature-nplus-one' into 'master'
Remove N+1 SQL query loading project feature in dashboard
Closes #66482
See merge request gitlab-org/gitlab-ce!32169
Diffstat (limited to 'spec/features/dashboard')
-rw-r--r-- | spec/features/dashboard/projects_spec.rb | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/spec/features/dashboard/projects_spec.rb b/spec/features/dashboard/projects_spec.rb index e4728f37217..973d5a2dcfc 100644 --- a/spec/features/dashboard/projects_spec.rb +++ b/spec/features/dashboard/projects_spec.rb @@ -220,4 +220,26 @@ describe 'Dashboard Projects' do expect(find('input#merge_request_target_branch', visible: false).value).to eq 'master' end end + + it 'avoids an N+1 query in dashboard index' do + create(:ci_pipeline, :with_job, status: :success, project: project, ref: project.default_branch, sha: project.commit.sha) + visit dashboard_projects_path + + control_count = ActiveRecord::QueryRecorder.new { visit dashboard_projects_path }.count + + new_project = create(:project, :repository, name: 'new project') + create(:ci_pipeline, :with_job, status: :success, project: new_project, ref: new_project.commit.sha) + new_project.add_developer(user) + + ActiveRecord::QueryRecorder.new { visit dashboard_projects_path }.count + + # There are three known N+1 queries: + # 1. Project#open_issues_count + # 2. Project#open_merge_requests_count + # 3. Project#forks_count + # + # In addition, ProjectsHelper#load_pipeline_status also adds an + # additional query. + expect { visit dashboard_projects_path }.not_to exceed_query_limit(control_count + 4) + end end |