Commit 9544f9038981b881b539419be72276b2b2fd079f
1 parent
818caf0b
Exists in
master
and in
4 other branches
Adding a project hook returns status code 400 if url is not given
When adding a project hook a url must be specified or a 400 error code is returned * Specs added to check status code on handling project hooks * refactored code, extracted a method
Showing
2 changed files
with
41 additions
and
12 deletions
Show diff stats
lib/api/projects.rb
... | ... | @@ -4,6 +4,15 @@ module Gitlab |
4 | 4 | before { authenticate! } |
5 | 5 | |
6 | 6 | resource :projects do |
7 | + helpers do | |
8 | + def handle_project_member_errors(errors) | |
9 | + if errors[:project_access].any? | |
10 | + error!(errors[:project_access], 422) | |
11 | + end | |
12 | + not_found! | |
13 | + end | |
14 | + end | |
15 | + | |
7 | 16 | # Get a projects list for authenticated user |
8 | 17 | # |
9 | 18 | # Example Request: |
... | ... | @@ -36,6 +45,7 @@ module Gitlab |
36 | 45 | # Example Request |
37 | 46 | # POST /projects |
38 | 47 | post do |
48 | + error!("Name is required", 400) if !params.has_key? :name | |
39 | 49 | attrs = attributes_for_keys [:name, |
40 | 50 | :description, |
41 | 51 | :default_branch, |
... | ... | @@ -43,6 +53,7 @@ module Gitlab |
43 | 53 | :wall_enabled, |
44 | 54 | :merge_requests_enabled, |
45 | 55 | :wiki_enabled] |
56 | + | |
46 | 57 | @project = ::Projects::CreateContext.new(current_user, attrs).execute |
47 | 58 | if @project.saved? |
48 | 59 | present @project, with: Entities::Project |
... | ... | @@ -106,10 +117,7 @@ module Gitlab |
106 | 117 | @member = team_member.user |
107 | 118 | present @member, with: Entities::ProjectMember, project: user_project |
108 | 119 | else |
109 | - if team_member.errors[:project_access].any? | |
110 | - error!(team_member.errors[:project_access], 422) | |
111 | - end | |
112 | - not_found! | |
120 | + handle_project_member_errors team_member.errors | |
113 | 121 | end |
114 | 122 | end |
115 | 123 | |
... | ... | @@ -132,10 +140,7 @@ module Gitlab |
132 | 140 | @member = team_member.user |
133 | 141 | present @member, with: Entities::ProjectMember, project: user_project |
134 | 142 | else |
135 | - if team_member.errors[:project_access].any? | |
136 | - error!(team_member.errors[:project_access], 422) | |
137 | - end | |
138 | - not_found! | |
143 | + handle_project_member_errors team_member.errors | |
139 | 144 | end |
140 | 145 | end |
141 | 146 | |
... | ... | @@ -210,8 +215,9 @@ module Gitlab |
210 | 215 | @hook = user_project.hooks.find(params[:hook_id]) |
211 | 216 | authorize! :admin_project, user_project |
212 | 217 | |
213 | - attrs = attributes_for_keys [:url] | |
218 | + error!("Url not given", 400) if !params.has_key? :url | |
214 | 219 | |
220 | + attrs = attributes_for_keys [:url] | |
215 | 221 | if @hook.update_attributes attrs |
216 | 222 | present @hook, with: Entities::Hook |
217 | 223 | else | ... | ... |
spec/requests/api/projects_spec.rb
... | ... | @@ -46,9 +46,9 @@ describe Gitlab::API do |
46 | 46 | response.status.should == 201 |
47 | 47 | end |
48 | 48 | |
49 | - it "should respond with 404 on failure" do | |
49 | + it "should respond with 400 if name is not given" do | |
50 | 50 | post api("/projects", user) |
51 | - response.status.should == 404 | |
51 | + response.status.should == 400 | |
52 | 52 | end |
53 | 53 | |
54 | 54 | it "should assign attributes to project" do |
... | ... | @@ -237,6 +237,13 @@ describe Gitlab::API do |
237 | 237 | delete api("/projects/#{project.id}/members/#{user3.id}", user) |
238 | 238 | }.to change { UsersProject.count }.by(-1) |
239 | 239 | end |
240 | + | |
241 | + it "should return 200 if team member is not part of a project" do | |
242 | + delete api("/projects/#{project.id}/members/#{user3.id}", user) | |
243 | + expect { | |
244 | + delete api("/projects/#{project.id}/members/#{user3.id}", user) | |
245 | + }.to_not change { UsersProject.count }.by(1) | |
246 | + end | |
240 | 247 | end |
241 | 248 | |
242 | 249 | describe "DELETE /projects/:id/members/:user_id" do |
... | ... | @@ -268,6 +275,11 @@ describe Gitlab::API do |
268 | 275 | response.status.should == 200 |
269 | 276 | json_response['url'].should == hook.url |
270 | 277 | end |
278 | + | |
279 | + it "should return a 404 error if hook id is not available" do | |
280 | + get api("/projects/#{project.id}/hooks/1234", user) | |
281 | + response.status.should == 404 | |
282 | + end | |
271 | 283 | end |
272 | 284 | |
273 | 285 | describe "POST /projects/:id/hooks" do |
... | ... | @@ -276,6 +288,7 @@ describe Gitlab::API do |
276 | 288 | post api("/projects/#{project.id}/hooks", user), |
277 | 289 | "url" => "http://example.com" |
278 | 290 | }.to change {project.hooks.count}.by(1) |
291 | + response.status.should == 200 | |
279 | 292 | end |
280 | 293 | end |
281 | 294 | |
... | ... | @@ -286,8 +299,17 @@ describe Gitlab::API do |
286 | 299 | response.status.should == 200 |
287 | 300 | json_response['url'].should == 'http://example.org' |
288 | 301 | end |
289 | - end | |
290 | 302 | |
303 | + it "should return 404 error if hook id is not found" do | |
304 | + put api("/projects/#{project.id}/hooks/1234", user), url: 'http://example.org' | |
305 | + response.status.should == 404 | |
306 | + end | |
307 | + | |
308 | + it "should return 400 error if url is not given" do | |
309 | + put api("/projects/#{project.id}/hooks/#{hook.id}", user) | |
310 | + response.status.should == 400 | |
311 | + end | |
312 | + end | |
291 | 313 | |
292 | 314 | describe "DELETE /projects/:id/hooks" do |
293 | 315 | it "should delete hook from project" do |
... | ... | @@ -295,6 +317,7 @@ describe Gitlab::API do |
295 | 317 | delete api("/projects/#{project.id}/hooks", user), |
296 | 318 | hook_id: hook.id |
297 | 319 | }.to change {project.hooks.count}.by(-1) |
320 | + response.status.should == 200 | |
298 | 321 | end |
299 | 322 | end |
300 | 323 | ... | ... |