From f00607431cd13a952731e36701ebc3b39e64d09b Mon Sep 17 00:00:00 2001
From: Tomasz Maczukin <tomasz@maczukin.pl>
Date: Tue, 5 Jan 2016 11:27:38 +0100
Subject: [PATCH] Add delete feature to triggers API

---
 lib/api/triggers.rb                | 19 +++++++++++++++++
 spec/requests/api/triggers_spec.rb | 33 ++++++++++++++++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/lib/api/triggers.rb b/lib/api/triggers.rb
index 9a1e3fdc976..3cb7810241f 100644
--- a/lib/api/triggers.rb
+++ b/lib/api/triggers.rb
@@ -61,6 +61,25 @@ module API
 
         present triggers, with: Entities::Trigger
       end
+
+      # Delete trigger
+      #
+      # Parameters:
+      #   id (required) - The ID of a project
+      #   trigger_id - The ID of trigger to delete
+      # Example Request:
+      #   DELETE /projects/:id/triggers/:trigger_id
+      delete ':id/triggers/:trigger_id' do
+        authenticate!
+        authorize_admin_project
+
+        trigger = user_project.triggers.where(id: params[:trigger_id].to_i).first
+        return not_found!('Trigger') unless trigger
+
+        trigger.destroy
+
+        present trigger, with: Entities::Trigger
+      end
     end
   end
 end
diff --git a/spec/requests/api/triggers_spec.rb b/spec/requests/api/triggers_spec.rb
index 4b356108c80..4e073a55d9c 100644
--- a/spec/requests/api/triggers_spec.rb
+++ b/spec/requests/api/triggers_spec.rb
@@ -114,4 +114,37 @@ describe API::API do
       end
     end
   end
+
+  describe 'DELETE /projects/:id/triggets/:trigger_id' do
+    context 'authenticated user with valid permissions' do
+      it 'should delete trigger' do
+        expect do
+          delete api("/projects/#{project.id}/triggers/#{trigger.id}", user)
+        end.to change{project.triggers.count}.by(-1)
+        expect(response.status).to eq(200)
+      end
+
+      it 'should responde with 404 Not Found if requesting non-existing trigger' do
+        delete api("/projects/#{project.id}/triggers/9999", user)
+
+        expect(response.status).to eq(404)
+      end
+    end
+
+    context 'authenticated user with invalid permissions' do
+      it 'should not delete trigger' do
+        delete api("/projects/#{project.id}/triggers/#{trigger.id}", user2)
+
+        expect(response.status).to eq(403)
+      end
+    end
+
+    context 'unauthentikated user' do
+      it 'should not delete trigger' do
+        delete api("/projects/#{project.id}/triggers/#{trigger.id}")
+
+        expect(response.status).to eq(401)
+      end
+    end
+  end
 end
-- 
GitLab