Commit 7cc4339f authored by Sebastian Ziebell's avatar Sebastian Ziebell

API: changed status codes for project hooks functions

Different status codes in the API lib are returned on hook creation, update or deletion.
If a required parameter is not given (e.g. `url` in `/projects/:id/hooks/:hook_id`) status
code 400 (Bad request) is returned. On hook deletion a 200 status code is returned, regardless if
the hook is present or not. This makes the DELETE function an idempotent operation. Appropriate tests
are added to check these status codes.
parent 44938026
...@@ -195,11 +195,14 @@ module Gitlab ...@@ -195,11 +195,14 @@ module Gitlab
# POST /projects/:id/hooks # POST /projects/:id/hooks
post ":id/hooks" do post ":id/hooks" do
authorize! :admin_project, user_project authorize! :admin_project, user_project
error!("Url not given", 400) unless params.has_key? :url
@hook = user_project.hooks.new({"url" => params[:url]}) @hook = user_project.hooks.new({"url" => params[:url]})
if @hook.save if @hook.save
present @hook, with: Entities::Hook present @hook, with: Entities::Hook
else else
error!({'message' => '404 Not found'}, 404) not_found!
end end
end end
...@@ -215,7 +218,7 @@ module Gitlab ...@@ -215,7 +218,7 @@ module Gitlab
@hook = user_project.hooks.find(params[:hook_id]) @hook = user_project.hooks.find(params[:hook_id])
authorize! :admin_project, user_project authorize! :admin_project, user_project
error!("Url not given", 400) if !params.has_key? :url error!("Url not given", 400) unless params.has_key? :url
attrs = attributes_for_keys [:url] attrs = attributes_for_keys [:url]
if @hook.update_attributes attrs if @hook.update_attributes attrs
...@@ -234,8 +237,13 @@ module Gitlab ...@@ -234,8 +237,13 @@ module Gitlab
# DELETE /projects/:id/hooks # DELETE /projects/:id/hooks
delete ":id/hooks" do delete ":id/hooks" do
authorize! :admin_project, user_project authorize! :admin_project, user_project
@hook = user_project.hooks.find(params[:hook_id]) error!("Hook id not given", 400) unless params.has_key? :hook_id
@hook.destroy
begin
@hook = ProjectHook.find(params[:hook_id])
@hook.destroy
rescue
end
end end
# Get a project repository branches # Get a project repository branches
......
...@@ -6,8 +6,8 @@ describe Gitlab::API do ...@@ -6,8 +6,8 @@ describe Gitlab::API do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:user2) { create(:user) } let(:user2) { create(:user) }
let(:user3) { create(:user) } let(:user3) { create(:user) }
let!(:hook) { create(:project_hook, project: project, url: "http://example.com") }
let!(:project) { create(:project, namespace: user.namespace ) } let!(:project) { create(:project, namespace: user.namespace ) }
let!(:hook) { create(:project_hook, project: project, url: "http://example.com") }
let!(:snippet) { create(:snippet, author: user, project: project, title: 'example') } let!(:snippet) { create(:snippet, author: user, project: project, title: 'example') }
let!(:users_project) { create(:users_project, user: user, project: project, project_access: UsersProject::MASTER) } let!(:users_project) { create(:users_project, user: user, project: project, project_access: UsersProject::MASTER) }
let!(:users_project2) { create(:users_project, user: user3, project: project, project_access: UsersProject::DEVELOPER) } let!(:users_project2) { create(:users_project, user: user3, project: project, project_access: UsersProject::DEVELOPER) }
...@@ -290,6 +290,11 @@ describe Gitlab::API do ...@@ -290,6 +290,11 @@ describe Gitlab::API do
}.to change {project.hooks.count}.by(1) }.to change {project.hooks.count}.by(1)
response.status.should == 201 response.status.should == 201
end end
it "should return a 400 error if url not given" do
post api("/projects/#{project.id}/hooks", user)
response.status.should == 400
end
end end
describe "PUT /projects/:id/hooks/:hook_id" do describe "PUT /projects/:id/hooks/:hook_id" do
...@@ -300,7 +305,7 @@ describe Gitlab::API do ...@@ -300,7 +305,7 @@ describe Gitlab::API do
json_response['url'].should == 'http://example.org' json_response['url'].should == 'http://example.org'
end end
it "should return 404 error if hook id is not found" do it "should return 404 error if hook id not found" do
put api("/projects/#{project.id}/hooks/1234", user), url: 'http://example.org' put api("/projects/#{project.id}/hooks/1234", user), url: 'http://example.org'
response.status.should == 404 response.status.should == 404
end end
...@@ -319,6 +324,21 @@ describe Gitlab::API do ...@@ -319,6 +324,21 @@ describe Gitlab::API do
}.to change {project.hooks.count}.by(-1) }.to change {project.hooks.count}.by(-1)
response.status.should == 200 response.status.should == 200
end end
it "should return success when deleting hook" do
delete api("/projects/#{project.id}/hooks", user), hook_id: hook.id
response.status.should == 200
end
it "should return success when deleting non existent hook" do
delete api("/projects/#{project.id}/hooks", user), hook_id: 42
response.status.should == 200
end
it "should return a 400 error if hook id not given" do
delete api("/projects/#{project.id}/hooks", user)
response.status.should == 400
end
end end
describe "GET /projects/:id/repository/tags" do describe "GET /projects/:id/repository/tags" do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment