diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2018-04-05 13:19:24 +0200 |
---|---|---|
committer | Sean McGivern <sean@gitlab.com> | 2018-04-09 11:58:06 +0100 |
commit | 20fdbbe86a6cffbf467f08d50a0d8ef0f5c87f50 (patch) | |
tree | 771a649785183c6d355483538a69a66824ad320c /spec | |
parent | 63ab7c0f009001b99f6e7d7a7f21dadde1e6b969 (diff) | |
download | gitlab-ce-20fdbbe86a6cffbf467f08d50a0d8ef0f5c87f50.tar.gz |
Use Goldiloader for handling N+1 queries
Goldiloader (https://github.com/salsify/goldiloader) can eager load
associations automatically. This removes the need for adding "includes"
calls in a variety of different places. This also comes with the added
benefit of not having to eager load data if it's not used.
Diffstat (limited to 'spec')
-rw-r--r-- | spec/requests/api/pipeline_schedules_spec.rb | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/spec/requests/api/pipeline_schedules_spec.rb b/spec/requests/api/pipeline_schedules_spec.rb index 7ea25059756..91d4d5d3de9 100644 --- a/spec/requests/api/pipeline_schedules_spec.rb +++ b/spec/requests/api/pipeline_schedules_spec.rb @@ -17,6 +17,17 @@ describe API::PipelineSchedules do pipeline_schedule.pipelines << build(:ci_pipeline, project: project) end + def create_pipeline_schedules(count) + create_list(:ci_pipeline_schedule, count, project: project) + .each do |pipeline_schedule| + create(:user).tap do |user| + project.add_developer(user) + pipeline_schedule.update_attributes(owner: user) + end + pipeline_schedule.pipelines << build(:ci_pipeline, project: project) + end + end + it 'returns list of pipeline_schedules' do get api("/projects/#{project.id}/pipeline_schedules", developer) @@ -26,18 +37,14 @@ describe API::PipelineSchedules do end it 'avoids N + 1 queries' do + # We need at least two users to trigger a preload for that relation. + create_pipeline_schedules(1) + control_count = ActiveRecord::QueryRecorder.new do get api("/projects/#{project.id}/pipeline_schedules", developer) end.count - create_list(:ci_pipeline_schedule, 10, project: project) - .each do |pipeline_schedule| - create(:user).tap do |user| - project.add_developer(user) - pipeline_schedule.update_attributes(owner: user) - end - pipeline_schedule.pipelines << build(:ci_pipeline, project: project) - end + create_pipeline_schedules(10) expect do get api("/projects/#{project.id}/pipeline_schedules", developer) |