Commit 6fc3263e15b71830e6f1b2a66891da5f4c055137
1 parent
54ab9bb6
Exists in
master
and in
4 other branches
API: extracted helper method to provide 400 bad request error with description
Extracted a method for 400 error (Bad request) and adjusted code accordingly. The name of the missing attribute is used to show which one was missing from the request. It is used to give an appropriate message in the json response.
Showing
6 changed files
with
28 additions
and
17 deletions
Show diff stats
lib/api/helpers.rb
| ... | ... | @@ -55,6 +55,12 @@ module Gitlab |
| 55 | 55 | render_api_error!('403 Forbidden', 403) |
| 56 | 56 | end |
| 57 | 57 | |
| 58 | + def bad_request!(attribute) | |
| 59 | + message = ["400 (Bad request)"] | |
| 60 | + message << "\"" + attribute.to_s + "\" not given" | |
| 61 | + render_api_error!(message.join(' '), 400) | |
| 62 | + end | |
| 63 | + | |
| 58 | 64 | def not_found!(resource = nil) |
| 59 | 65 | message = ["404"] |
| 60 | 66 | message << resource if resource | ... | ... |
lib/api/merge_requests.rb
| ... | ... | @@ -13,9 +13,9 @@ module Gitlab |
| 13 | 13 | # |
| 14 | 14 | def handle_merge_request_error(merge_request_errors) |
| 15 | 15 | if merge_request_errors[:target_branch].any? |
| 16 | - error!(merge_request_errors[:target_branch], 400) | |
| 16 | + bad_request!(:target_branch) | |
| 17 | 17 | elsif merge_request_errors[:source_branch].any? |
| 18 | - error!(merge_request_errors[:source_branch], 400) | |
| 18 | + bad_request!(:source_branch) | |
| 19 | 19 | elsif merge_request_errors[:base].any? |
| 20 | 20 | error!(merge_request_errors[:base], 422) |
| 21 | 21 | end |
| ... | ... | @@ -129,7 +129,7 @@ module Gitlab |
| 129 | 129 | present note, with: Entities::MRNote |
| 130 | 130 | else |
| 131 | 131 | if note.errors[:note].any? |
| 132 | - error!(note.errors[:note], 400) | |
| 132 | + bad_request!(:note) | |
| 133 | 133 | end |
| 134 | 134 | not_found! |
| 135 | 135 | end | ... | ... |
lib/api/milestones.rb
lib/api/notes.rb
| ... | ... | @@ -44,7 +44,7 @@ module Gitlab |
| 44 | 44 | present @note, with: Entities::Note |
| 45 | 45 | else |
| 46 | 46 | # :note is exposed as :body, but :note is set on error |
| 47 | - error!(@note.errors[:note], 400) if @note.errors[:note].any? | |
| 47 | + bad_request!(:note) if @note.errors[:note].any? | |
| 48 | 48 | not_found! |
| 49 | 49 | end |
| 50 | 50 | end | ... | ... |
lib/api/projects.rb
| ... | ... | @@ -45,7 +45,7 @@ module Gitlab |
| 45 | 45 | # Example Request |
| 46 | 46 | # POST /projects |
| 47 | 47 | post do |
| 48 | - error!("Name is required", 400) if !params.has_key? :name | |
| 48 | + bad_request!(:name) if !params.has_key? :name | |
| 49 | 49 | attrs = attributes_for_keys [:name, |
| 50 | 50 | :description, |
| 51 | 51 | :default_branch, |
| ... | ... | @@ -101,8 +101,8 @@ module Gitlab |
| 101 | 101 | post ":id/members" do |
| 102 | 102 | authorize! :admin_project, user_project |
| 103 | 103 | |
| 104 | - error!("User id not given", 400) if !params.has_key? :user_id | |
| 105 | - error!("Access level not given", 400) if !params.has_key? :access_level | |
| 104 | + bad_request!(:user_id) if !params.has_key? :user_id | |
| 105 | + bad_request!(:access_level) if !params.has_key? :access_level | |
| 106 | 106 | |
| 107 | 107 | # either the user is already a team member or a new one |
| 108 | 108 | team_member = user_project.team_member_by_id(params[:user_id]) |
| ... | ... | @@ -133,8 +133,8 @@ module Gitlab |
| 133 | 133 | authorize! :admin_project, user_project |
| 134 | 134 | |
| 135 | 135 | team_member = user_project.users_projects.find_by_user_id(params[:user_id]) |
| 136 | - error!("Access level not given", 400) if !params.has_key? :access_level | |
| 137 | - error!("User can not be found", 404) if team_member.nil? | |
| 136 | + bad_request!(:access_level) if !params.has_key? :access_level | |
| 137 | + not_found!("User can not be found") if team_member.nil? | |
| 138 | 138 | |
| 139 | 139 | if team_member.update_attributes(project_access: params[:access_level]) |
| 140 | 140 | @member = team_member.user |
| ... | ... | @@ -196,7 +196,7 @@ module Gitlab |
| 196 | 196 | post ":id/hooks" do |
| 197 | 197 | authorize! :admin_project, user_project |
| 198 | 198 | |
| 199 | - error!("Url not given", 400) unless params.has_key? :url | |
| 199 | + bad_request!(:url) unless params.has_key? :url | |
| 200 | 200 | |
| 201 | 201 | @hook = user_project.hooks.new({"url" => params[:url]}) |
| 202 | 202 | if @hook.save |
| ... | ... | @@ -218,7 +218,7 @@ module Gitlab |
| 218 | 218 | @hook = user_project.hooks.find(params[:hook_id]) |
| 219 | 219 | authorize! :admin_project, user_project |
| 220 | 220 | |
| 221 | - error!("Url not given", 400) unless params.has_key? :url | |
| 221 | + bad_request!(:url) unless params.has_key? :url | |
| 222 | 222 | |
| 223 | 223 | attrs = attributes_for_keys [:url] |
| 224 | 224 | if @hook.update_attributes attrs |
| ... | ... | @@ -237,7 +237,7 @@ module Gitlab |
| 237 | 237 | # DELETE /projects/:id/hooks |
| 238 | 238 | delete ":id/hooks" do |
| 239 | 239 | authorize! :admin_project, user_project |
| 240 | - error!("Hook id not given", 400) unless params.has_key? :hook_id | |
| 240 | + bad_request!(:hook_id) unless params.has_key? :hook_id | |
| 241 | 241 | |
| 242 | 242 | begin |
| 243 | 243 | @hook = ProjectHook.find(params[:hook_id]) |
| ... | ... | @@ -368,9 +368,9 @@ module Gitlab |
| 368 | 368 | post ":id/snippets" do |
| 369 | 369 | authorize! :write_snippet, user_project |
| 370 | 370 | |
| 371 | - error!("Title not given", 400) if !params[:title].present? | |
| 372 | - error!("Filename not given", 400) if !params[:file_name].present? | |
| 373 | - error!("Code not given", 400) if !params[:code].present? | |
| 371 | + bad_request!(:title) if !params[:title].present? | |
| 372 | + bad_request!(:file_name) if !params[:file_name].present? | |
| 373 | + bad_request!(:code) if !params[:code].present? | |
| 374 | 374 | |
| 375 | 375 | attrs = attributes_for_keys [:title, :file_name] |
| 376 | 376 | attrs[:expires_at] = params[:lifetime] if params[:lifetime].present? |
| ... | ... | @@ -451,7 +451,7 @@ module Gitlab |
| 451 | 451 | get ":id/repository/commits/:sha/blob" do |
| 452 | 452 | authorize! :download_code, user_project |
| 453 | 453 | |
| 454 | - error!("Filepath must be specified", 400) if !params.has_key? :filepath | |
| 454 | + bad_request!(:filepath) if !params.has_key? :filepath | |
| 455 | 455 | |
| 456 | 456 | ref = params[:sha] |
| 457 | 457 | ... | ... |
spec/requests/api/merge_requests_spec.rb
| ... | ... | @@ -32,6 +32,11 @@ describe Gitlab::API do |
| 32 | 32 | response.status.should == 200 |
| 33 | 33 | json_response['title'].should == merge_request.title |
| 34 | 34 | end |
| 35 | + | |
| 36 | + it "should return a 404 error if merge_request_id not found" do | |
| 37 | + get api("/projects/#{project.id}/merge_request/999", user) | |
| 38 | + response.status.should == 404 | |
| 39 | + end | |
| 35 | 40 | end |
| 36 | 41 | |
| 37 | 42 | describe "POST /projects/:id/merge_requests" do | ... | ... |