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

Add some fixes after review

parent ab2c6cc0
No related branches found
No related tags found
1 merge request!2207Add builds API
Pipeline #
Loading
Loading
@@ -40,23 +40,14 @@ Parameters:
"user": {
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
"bio": null,
"can_create_group": true,
"can_create_project": true,
"color_scheme_id": 2,
"created_at": "2015-12-21T13:14:24.077Z",
"current_sign_in_at": "2016-01-11T09:31:40.472Z",
"email": "admin@example.com",
"id": 1,
"identities": [],
"is_admin": true,
"linkedin": "",
"name": "Administrator",
"projects_limit": 100,
"skype": "",
"state": "active",
"theme_id": 3,
"twitter": "",
"two_factor_enabled": false,
"username": "root",
"web_url": "http://gitlab.dev/u/root",
"website_url": ""
Loading
Loading
@@ -87,23 +78,14 @@ Parameters:
"user": {
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
"bio": null,
"can_create_group": true,
"can_create_project": true,
"color_scheme_id": 2,
"created_at": "2015-12-21T13:14:24.077Z",
"current_sign_in_at": "2016-01-11T09:31:40.472Z",
"email": "admin@example.com",
"id": 1,
"identities": [],
"is_admin": true,
"linkedin": "",
"name": "Administrator",
"projects_limit": 100,
"skype": "",
"state": "active",
"theme_id": 3,
"twitter": "",
"two_factor_enabled": false,
"username": "root",
"web_url": "http://gitlab.dev/u/root",
"website_url": ""
Loading
Loading
@@ -177,23 +159,14 @@ Parameters:
"user": {
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
"bio": null,
"can_create_group": true,
"can_create_project": true,
"color_scheme_id": 2,
"created_at": "2015-12-21T13:14:24.077Z",
"current_sign_in_at": "2016-01-12T10:30:48.315Z",
"email": "admin@example.com",
"id": 1,
"identities": [],
"is_admin": true,
"linkedin": "",
"name": "Administrator",
"projects_limit": 100,
"skype": "",
"state": "active",
"theme_id": 3,
"twitter": "",
"two_factor_enabled": false,
"username": "root",
"web_url": "http://gitlab.dev/u/root",
"website_url": ""
Loading
Loading
@@ -241,23 +214,14 @@ Parameters:
"user": {
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
"bio": null,
"can_create_group": true,
"can_create_project": true,
"color_scheme_id": 2,
"created_at": "2015-12-21T13:14:24.077Z",
"current_sign_in_at": "2016-01-11T09:31:40.472Z",
"email": "admin@example.com",
"id": 1,
"identities": [],
"is_admin": true,
"linkedin": "",
"name": "Administrator",
"projects_limit": 100,
"skype": "",
"state": "active",
"theme_id": 3,
"twitter": "",
"two_factor_enabled": false,
"username": "root",
"web_url": "http://gitlab.dev/u/root",
"website_url": ""
Loading
Loading
Loading
Loading
@@ -35,6 +35,7 @@ module API
 
builds = commit.builds.order('id DESC')
builds = filter_builds(builds, params[:scope])
present paginate(builds), with: Entities::Build,
user_can_download_artifacts: can?(current_user, :download_build_artifacts, user_project)
end
Loading
Loading
@@ -118,25 +119,26 @@ module API
 
helpers do
def get_build(id)
user_project.builds.where(id: id).first
user_project.builds.find_by(id: id.to_i)
end
 
def filter_builds(builds, scope)
available_scopes = Ci::Build.available_statuses
return builds if scope.nil? || scope.empty?
available_statuses = 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
if scope.is_a?(String)
[scope]
elsif scope.is_a?(Hashie::Mash)
scope.values
else
[]
['unknown']
end
 
return builds if scope.empty?
unknown = scope - available_statuses
render_api_error!('Scope contains invalid value(s)', 400) unless unknown.empty?
 
builds.where(status: scope)
builds.where(status: available_statuses && scope)
end
 
def authorize_manage_builds!
Loading
Loading
Loading
Loading
@@ -378,18 +378,16 @@ module API
expose :id, :status, :stage, :name, :ref, :tag, :coverage
expose :created_at, :started_at, :finished_at
expose :user, with: User
# TODO: download_url in Ci:Build model is an GitLab Web Interface URL, not API URL. We should think on some API
# for downloading of artifacts (see: https://gitlab.com/gitlab-org/gitlab-ce/issues/4255)
expose :download_url do |repo_obj, options|
if options[:user_can_download_artifacts]
repo_obj.download_url
else
nil
end
end
expose :commit, with: RepoCommit do |repo_obj, _options|
if repo_obj.respond_to?(:commit)
repo_obj.commit.commit_data
else
nil
end
end
expose :runner, with: Runner
Loading
Loading
Loading
Loading
@@ -35,6 +35,12 @@ describe API::API, api: true do
expect(response.status).to eq(200)
expect(json_response).to be_an Array
end
it 'should respond 400 when scope contains invalid state' do
get api("/projects/#{project.id}/builds?scope[0]=pending&scope[1]=unknown_status", user)
expect(response.status).to eq(400)
end
end
 
context 'unauthorized user' do
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