Include owner for pipeline_schedules. Improve N+1 spec. Use PipelineBasic for small payload.

This commit is contained in:
Shinya Maeda 2017-05-18 17:45:08 +09:00
parent 17b9128b30
commit 20a07d26ff
4 changed files with 8 additions and 26 deletions

View File

@ -690,7 +690,7 @@ module API
expose :id
expose :description, :ref, :cron, :cron_timezone, :next_run_at, :active
expose :created_at, :updated_at, :deleted_at
expose :last_pipeline, using: Entities::Pipeline
expose :last_pipeline, using: Entities::PipelineBasic
expose :owner, using: Entities::UserBasic
end

View File

@ -17,7 +17,7 @@ module API
get ':id/pipeline_schedules' do
authorize! :read_pipeline_schedule, user_project
pipeline_schedules = user_project.pipeline_schedules.includes(last_pipeline: {statuses: :latest})
pipeline_schedules = user_project.pipeline_schedules.includes([:owner, last_pipeline: {statuses: :latest}])
present paginate(pipeline_schedules), with: Entities::PipelineSchedule
end

View File

@ -17,29 +17,7 @@
"id": { "type": "integer" },
"sha": { "type": "string" },
"ref": { "type": "string" },
"status": { "type": "string" },
"before_sha": { "type": ["string", "null"] },
"tag": { "type": ["boolean", "null"] },
"yaml_errors": { "type": ["string", "null"] },
"user": {
"type": ["object", "null"],
"properties": {
"name": { "type": "string" },
"username": { "type": "string" },
"id": { "type": "integer" },
"state": { "type": "string" },
"avatar_url": { "type": "uri" },
"web_url": { "type": "uri" }
},
"additionalProperties": false
},
"created_at": { "type": "date" },
"updated_at": { "type": "date" },
"started_at": { "type": "date" },
"finished_at": { "type": "date" },
"committed_at": { "type": ["string", "null"] },
"duration": { "type": ["integer", "null"] },
"coverage": { "type": ["string", "null"] }
"status": { "type": "string" }
},
"additionalProperties": false
},

View File

@ -30,8 +30,12 @@ describe API::PipelineSchedules do
get api("/projects/#{project.id}/pipeline_schedules", developer)
end.count
create_list(:ci_pipeline_schedule, 10, project: project, owner: developer)
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