Skip to content
Snippets Groups Projects
Commit 549a2fa7 authored by Tomasz Maczukin's avatar Tomasz Maczukin
Browse files

Modify builds scope filtering in builds API

parent a862ade5
No related branches found
No related tags found
1 merge request!2207Add builds API
Loading
Loading
@@ -94,6 +94,10 @@ module Ci
new_build.save
new_build
end
def available_statuses
state_machines[:status].states.map &:value
end
end
 
state_machine :status, initial: :pending do
Loading
Loading
Loading
Loading
@@ -11,7 +11,7 @@ GET /projects/:id/builds
Parameters:
 
- `id` (required) - The ID of a project
- `scope` (optional) - The scope of builds to show (one of: `all`, `finished`, `running`; default: `all`)
- `scope` (optional) - The scope of builds to show (one or array of: pending, running, failed, success, canceled; if none provided showing all builds)
 
```json
[
Loading
Loading
@@ -64,8 +64,7 @@ Parameters:
 
- `id` (required) - The ID of a project
- `sha` (required) - The SHA id of a commit
- `scope` (optional) - The scope of builds to show (one of: `all`, `finished`, `running`; default: `all`)
- `scope` (optional) - The scope of builds to show (one or array of: pending, running, failed, success, canceled; if none provided showing all builds)
 
```json
[
Loading
Loading
Loading
Loading
@@ -8,9 +8,8 @@ module API
#
# Parameters:
# id (required) - The ID of a project
# scope (optional) - The scope of builds to show (one of: all, finished, running; default: all)
# page (optional) - The page number for pagination
# per_page (ooptional) - The value of items per page to show
# scope (optional) - The scope of builds to show (one or array of: pending, running, failed, success, canceled;
# if none provided showing all builds)
# Example Request:
# GET /projects/:id/builds
get ':id/builds' do
Loading
Loading
@@ -24,7 +23,8 @@ module API
# Parameters:
# id (required) - The ID of a project
# sha (required) - The SHA id of a commit
# scope (optional) - The scope of builds to show (one of: all, finished, running; default: all)
# scope (optional) - The scope of builds to show (one or array of: pending, running, failed, success, canceled;
# if none provided showing all builds)
# Example Request:
# GET /projects/:id/builds/commit/:sha
get ':id/builds/commit/:sha' do
Loading
Loading
@@ -112,14 +112,21 @@ module API
end
 
def filter_builds(builds, scope)
case scope
when 'finished'
builds.finished
when 'running'
builds.running
else
builds
end
available_scopes = Ci::Build.available_statuses
scope =
if scope.is_a?(String) || scope.is_a?(Symbol)
available_scopes & [scope.to_s]
elsif scope.is_a?(Array)
available_scopes & scope
elsif scope.respond_to?(:to_h)
available_scopes & scope.to_h.values
else
[]
end
return builds if scope.empty?
builds.where(status: scope)
end
 
def authorize_manage_builds!
Loading
Loading
Loading
Loading
@@ -18,7 +18,20 @@ describe API::API, api: true do
it 'should return project builds' do
get api("/projects/#{project.id}/builds", user)
 
puts json_response
expect(response.status).to eq(200)
expect(json_response).to be_an Array
end
it 'should filter project with one scope element' do
get api("/projects/#{project.id}/builds?scope=pending", user)
expect(response.status).to eq(200)
expect(json_response).to be_an Array
end
it 'should filter project with array of scope elements' do
get api("/projects/#{project.id}/builds?scope[0]=pending&scope[1]=running", user)
expect(response.status).to eq(200)
expect(json_response).to be_an Array
end
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment