summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Maczukin <tomasz@maczukin.pl>2016-01-04 16:38:32 +0100
committerTomasz Maczukin <tomasz@maczukin.pl>2016-01-04 16:44:09 +0100
commitd9da81f736b770bb44c4869aef5d5c455e74ab7a (patch)
treeeee8dad25362491e89c750e822e01bcdd0266d9d
parent0a62d3b5d55311eb425e92ca161d1786d16d2a0c (diff)
downloadgitlab-ce-d9da81f736b770bb44c4869aef5d5c455e74ab7a.tar.gz
Add triggers feature to API
-rw-r--r--lib/api/entities.rb10
-rw-r--r--lib/api/triggers.rb18
-rw-r--r--spec/factories/ci/trigger_requests.rb2
-rw-r--r--spec/requests/api/triggers_spec.rb45
4 files changed, 71 insertions, 4 deletions
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
index 26e7c956e8f..bc0cd76a2b8 100644
--- a/lib/api/entities.rb
+++ b/lib/api/entities.rb
@@ -365,5 +365,15 @@ module API
class TriggerRequest < Grape::Entity
expose :id, :variables
end
+
+ class Trigger < Grape::Entity
+ expose :id, :token, :created_at, :updated_at, :deleted_at
+ expose :last_used do |repo_obj, _options|
+ if repo_obj.respond_to?(:last_trigger_request)
+ request = repo_obj.last_trigger_request
+ request.created_at if request
+ end
+ end
+ end
end
end
diff --git a/lib/api/triggers.rb b/lib/api/triggers.rb
index 2781f1cf191..9a1e3fdc976 100644
--- a/lib/api/triggers.rb
+++ b/lib/api/triggers.rb
@@ -43,6 +43,24 @@ module API
render_api_error!(errors, 400)
end
end
+
+ # Get triggers list
+ #
+ # Parameters:
+ # id (required) - The ID of a project
+ # page (optional) - The page number for pagination
+ # per_page (optional) - The value of items per page to show
+ # Example Request:
+ # GET /projects/:id/triggers
+ get ':id/triggers' do
+ authenticate!
+ authorize_admin_project
+
+ triggers = user_project.triggers.includes(:trigger_requests)
+ triggers = paginate(triggers)
+
+ present triggers, with: Entities::Trigger
+ end
end
end
end
diff --git a/spec/factories/ci/trigger_requests.rb b/spec/factories/ci/trigger_requests.rb
index db053c610cd..5298d9fa7c3 100644
--- a/spec/factories/ci/trigger_requests.rb
+++ b/spec/factories/ci/trigger_requests.rb
@@ -3,6 +3,8 @@
FactoryGirl.define do
factory :ci_trigger_request, class: Ci::TriggerRequest do
factory :ci_trigger_request_with_variables do
+ trigger :ci_trigger
+
variables do
{
TRIGGER_KEY: 'TRIGGER_VALUE'
diff --git a/spec/requests/api/triggers_spec.rb b/spec/requests/api/triggers_spec.rb
index 314bd7ddc59..4b356108c80 100644
--- a/spec/requests/api/triggers_spec.rb
+++ b/spec/requests/api/triggers_spec.rb
@@ -3,11 +3,19 @@ require 'spec_helper'
describe API::API do
include ApiHelpers
+ let(:user) { create(:user) }
+ let(:user2) { create(:user) }
+ let!(:trigger_token) { 'secure token' }
+ let!(:trigger_token_2) { 'secure token 2' }
+ let!(:project) { create(:project, creator_id: user.id) }
+ let!(:master) { create(:project_member, user: user, project: project, access_level: ProjectMember::MASTER) }
+ let!(:developer) { create(:project_member, user: user2, project: project, access_level: ProjectMember::DEVELOPER) }
+ let!(:trigger) { create(:ci_trigger, project: project, token: trigger_token) }
+ let!(:trigger2) { create(:ci_trigger, project: project, token: trigger_token_2) }
+ let!(:trigger_request) { create(:ci_trigger_request, trigger: trigger, created_at: '2015-01-01 12:13:14') }
+
describe 'POST /projects/:project_id/trigger' do
- let!(:trigger_token) { 'secure token' }
- let!(:project) { FactoryGirl.create(:project) }
- let!(:project2) { FactoryGirl.create(:empty_project) }
- let!(:trigger) { FactoryGirl.create(:ci_trigger, project: project, token: trigger_token) }
+ let!(:project2) { create(:empty_project) }
let(:options) do
{
token: trigger_token
@@ -77,4 +85,33 @@ describe API::API do
end
end
end
+
+ describe 'GET /projects/:id/triggets' do
+ context 'authenticated user with valid permissions' do
+ it 'should return list of triggers' do
+ get api("/projects/#{project.id}/triggers", user)
+
+ expect(response.status).to eq(200)
+ expect(json_response).to be_a(Array)
+ expect(json_response[0]['token']).to eq(trigger_token)
+ expect(json_response[1]['token']).to eq(trigger_token_2)
+ end
+ end
+
+ context 'authenticated user with invalid permissions' do
+ it 'should not return triggers list' do
+ get api("/projects/#{project.id}/triggers", user2)
+
+ expect(response.status).to eq(403)
+ end
+ end
+
+ context 'unauthentikated user' do
+ it 'should not return triggers list' do
+ get api("/projects/#{project.id}/triggers")
+
+ expect(response.status).to eq(401)
+ end
+ end
+ end
end