From 49c8bf4e9b510be51859dcc301cb46b29b750cb0 Mon Sep 17 00:00:00 2001
From: Tomasz Maczukin <tomasz@maczukin.pl>
Date: Tue, 5 Jan 2016 11:44:10 +0100
Subject: [PATCH] Add create feature to triggers API

---
 lib/api/triggers.rb                | 16 ++++++++++++++++
 spec/requests/api/triggers_spec.rb | 29 +++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+)

diff --git a/lib/api/triggers.rb b/lib/api/triggers.rb
index 3cb7810241f..38cf1e9a2e0 100644
--- a/lib/api/triggers.rb
+++ b/lib/api/triggers.rb
@@ -62,6 +62,22 @@ module API
         present triggers, with: Entities::Trigger
       end
 
+      # Create trigger
+      #
+      # Parameters:
+      #   id (required) - The ID of a project
+      # Example Request:
+      #   POST /projects/:id/triggers
+      post ':id/triggers' do
+        authenticate!
+        authorize_admin_project
+
+        trigger = user_project.triggers.new
+        trigger.save
+
+        present trigger, with: Entities::Trigger
+      end
+
       # Delete trigger
       #
       # Parameters:
diff --git a/spec/requests/api/triggers_spec.rb b/spec/requests/api/triggers_spec.rb
index 4e073a55d9c..316c2ae958d 100644
--- a/spec/requests/api/triggers_spec.rb
+++ b/spec/requests/api/triggers_spec.rb
@@ -115,6 +115,35 @@ describe API::API do
     end
   end
 
+  describe 'POST /projects/:id/triggets' do
+    context 'authenticated user with valid permissions' do
+      it 'should create trigger' do
+        expect do
+          post api("/projects/#{project.id}/triggers", user)
+        end.to change{project.triggers.count}.by(1)
+
+        expect(response.status).to eq(201)
+        expect(json_response).to be_a(Hash)
+      end
+    end
+
+    context 'authenticated user with invalid permissions' do
+      it 'should not create trigger' do
+        post api("/projects/#{project.id}/triggers", user2)
+
+        expect(response.status).to eq(403)
+      end
+    end
+
+    context 'unauthentikated user' do
+      it 'should not create trigger' do
+        post api("/projects/#{project.id}/triggers")
+
+        expect(response.status).to eq(401)
+      end
+    end
+  end
+
   describe 'DELETE /projects/:id/triggets/:trigger_id' do
     context 'authenticated user with valid permissions' do
       it 'should delete trigger' do
-- 
GitLab