Commit 32f1eaaf0f966ccc45635693679bcc8658e71815
1 parent
ecf53bb9
Exists in
master
and in
4 other branches
API: system hooks API functions and documentation updated
* updated system hooks documentation and code comments * fixed access to system hooks if no user given resulting in a `500 Server Error` * added tests
Showing
3 changed files
with
36 additions
and
12 deletions
Show diff stats
doc/api/system_hooks.md
@@ -8,7 +8,10 @@ Get list of system hooks | @@ -8,7 +8,10 @@ Get list of system hooks | ||
8 | GET /hooks | 8 | GET /hooks |
9 | ``` | 9 | ``` |
10 | 10 | ||
11 | -Will return hooks with status `200 OK` on success, or `404 Not found` on fail. | 11 | +Parameters: |
12 | + | ||
13 | ++ **none** | ||
14 | + | ||
12 | 15 | ||
13 | ## Add new system hook hook | 16 | ## Add new system hook hook |
14 | 17 | ||
@@ -20,7 +23,6 @@ Parameters: | @@ -20,7 +23,6 @@ Parameters: | ||
20 | 23 | ||
21 | + `url` (required) - The hook URL | 24 | + `url` (required) - The hook URL |
22 | 25 | ||
23 | -Will return status `201 Created` on success, or `404 Not found` on fail. | ||
24 | 26 | ||
25 | ## Test system hook | 27 | ## Test system hook |
26 | 28 | ||
@@ -32,10 +34,12 @@ Parameters: | @@ -32,10 +34,12 @@ Parameters: | ||
32 | 34 | ||
33 | + `id` (required) - The ID of hook | 35 | + `id` (required) - The ID of hook |
34 | 36 | ||
35 | -Will return hook with status `200 OK` on success, or `404 Not found` on fail. | ||
36 | 37 | ||
37 | ## Delete system hook | 38 | ## Delete system hook |
38 | 39 | ||
40 | +Deletes a system hook. This is an idempotent API function and returns `200 Ok` even if the hook | ||
41 | +is not available. If the hook is deleted it is also returned as JSON. | ||
42 | + | ||
39 | ``` | 43 | ``` |
40 | DELETE /hooks/:id | 44 | DELETE /hooks/:id |
41 | ``` | 45 | ``` |
@@ -43,5 +47,3 @@ DELETE /hooks/:id | @@ -43,5 +47,3 @@ DELETE /hooks/:id | ||
43 | Parameters: | 47 | Parameters: |
44 | 48 | ||
45 | + `id` (required) - The ID of hook | 49 | + `id` (required) - The ID of hook |
46 | - | ||
47 | -Will return status `200 OK` on success, or `404 Not found` on fail. | ||
48 | \ No newline at end of file | 50 | \ No newline at end of file |
lib/api/system_hooks.rb
1 | module Gitlab | 1 | module Gitlab |
2 | # Hooks API | 2 | # Hooks API |
3 | class SystemHooks < Grape::API | 3 | class SystemHooks < Grape::API |
4 | - before { authenticated_as_admin! } | 4 | + before { |
5 | + authenticate! | ||
6 | + authenticated_as_admin! | ||
7 | + } | ||
5 | 8 | ||
6 | resource :hooks do | 9 | resource :hooks do |
7 | # Get the list of system hooks | 10 | # Get the list of system hooks |
@@ -21,6 +24,7 @@ module Gitlab | @@ -21,6 +24,7 @@ module Gitlab | ||
21 | # POST /hooks | 24 | # POST /hooks |
22 | post do | 25 | post do |
23 | attrs = attributes_for_keys [:url] | 26 | attrs = attributes_for_keys [:url] |
27 | + required_attributes! [:url] | ||
24 | @hook = SystemHook.new attrs | 28 | @hook = SystemHook.new attrs |
25 | if @hook.save | 29 | if @hook.save |
26 | present @hook, with: Entities::Hook | 30 | present @hook, with: Entities::Hook |
@@ -47,13 +51,19 @@ module Gitlab | @@ -47,13 +51,19 @@ module Gitlab | ||
47 | data | 51 | data |
48 | end | 52 | end |
49 | 53 | ||
50 | - # Delete a hook | ||
51 | - # | 54 | + # Delete a hook. This is an idempotent function. |
55 | + # | ||
56 | + # Parameters: | ||
57 | + # id (required) - ID of the hook | ||
52 | # Example Request: | 58 | # Example Request: |
53 | # DELETE /hooks/:id | 59 | # DELETE /hooks/:id |
54 | delete ":id" do | 60 | delete ":id" do |
55 | - @hook = SystemHook.find(params[:id]) | ||
56 | - @hook.destroy | 61 | + begin |
62 | + @hook = SystemHook.find(params[:id]) | ||
63 | + @hook.destroy | ||
64 | + rescue | ||
65 | + # SystemHook raises an Error if no hook with id found | ||
66 | + end | ||
57 | end | 67 | end |
58 | end | 68 | end |
59 | end | 69 | end |
spec/requests/api/system_hooks_spec.rb
@@ -10,6 +10,13 @@ describe Gitlab::API do | @@ -10,6 +10,13 @@ describe Gitlab::API do | ||
10 | before { stub_request(:post, hook.url) } | 10 | before { stub_request(:post, hook.url) } |
11 | 11 | ||
12 | describe "GET /hooks" do | 12 | describe "GET /hooks" do |
13 | + context "when no user" do | ||
14 | + it "should return authentication error" do | ||
15 | + get api("/hooks") | ||
16 | + response.status.should == 401 | ||
17 | + end | ||
18 | + end | ||
19 | + | ||
13 | context "when not an admin" do | 20 | context "when not an admin" do |
14 | it "should return forbidden error" do | 21 | it "should return forbidden error" do |
15 | get api("/hooks", user) | 22 | get api("/hooks", user) |
@@ -34,9 +41,9 @@ describe Gitlab::API do | @@ -34,9 +41,9 @@ describe Gitlab::API do | ||
34 | }.to change { SystemHook.count }.by(1) | 41 | }.to change { SystemHook.count }.by(1) |
35 | end | 42 | end |
36 | 43 | ||
37 | - it "should respond with 404 on failure" do | 44 | + it "should respond with 400 if url not given" do |
38 | post api("/hooks", admin) | 45 | post api("/hooks", admin) |
39 | - response.status.should == 404 | 46 | + response.status.should == 400 |
40 | end | 47 | end |
41 | 48 | ||
42 | it "should not create new hook without url" do | 49 | it "should not create new hook without url" do |
@@ -65,5 +72,10 @@ describe Gitlab::API do | @@ -65,5 +72,10 @@ describe Gitlab::API do | ||
65 | delete api("/hooks/#{hook.id}", admin) | 72 | delete api("/hooks/#{hook.id}", admin) |
66 | }.to change { SystemHook.count }.by(-1) | 73 | }.to change { SystemHook.count }.by(-1) |
67 | end | 74 | end |
75 | + | ||
76 | + it "should return success if hook id not found" do | ||
77 | + delete api("/hooks/12345", admin) | ||
78 | + response.status.should == 200 | ||
79 | + end | ||
68 | end | 80 | end |
69 | end | 81 | end |
70 | \ No newline at end of file | 82 | \ No newline at end of file |