Commit e96d77d3dbd789981b8e85e7afba9a5908d79483
1 parent
dffc2b8a
Exists in
master
and in
4 other branches
API: issues documentation and API functions updated
The issues documentation is updated with infos to status codes and the deprecated `DELETE` function and how to close an issue. A few more tests added to check status codes of API functions.
Showing
3 changed files
with
77 additions
and
7 deletions
Show diff stats
doc/api/issues.md
| 1 | 1 | ## List issues |
| 2 | 2 | |
| 3 | -Get all issues created by authenticed user. | |
| 3 | +Get all issues created by authenticed user. This function takes pagination parameters | |
| 4 | +`page` and `per_page` to get a list of issues. | |
| 4 | 5 | |
| 5 | 6 | ``` |
| 6 | 7 | GET /issues |
| ... | ... | @@ -68,9 +69,18 @@ GET /issues |
| 68 | 69 | ] |
| 69 | 70 | ``` |
| 70 | 71 | |
| 72 | +Return values: | |
| 73 | + | |
| 74 | ++ `200 Ok` on success and the list of issues | |
| 75 | ++ `401 Unauthorized` if user is not authenticated | |
| 76 | ++ `404 Not Found` if something fails | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 71 | 80 | ## List project issues |
| 72 | 81 | |
| 73 | -Get a list of project issues. | |
| 82 | +Get a list of project issues. This function accepts pagination parameters `page` and `per_page` | |
| 83 | +to return the list of project issues. | |
| 74 | 84 | |
| 75 | 85 | ``` |
| 76 | 86 | GET /projects/:id/issues |
| ... | ... | @@ -80,9 +90,16 @@ Parameters: |
| 80 | 90 | |
| 81 | 91 | + `id` (required) - The ID of a project |
| 82 | 92 | |
| 93 | +Return values: | |
| 94 | + | |
| 95 | ++ `200 Ok` on success and the list of project issues | |
| 96 | ++ `401 Unauthorized` if user is not authenticated | |
| 97 | ++ `404 Not Found` if project ID not found | |
| 98 | + | |
| 99 | + | |
| 83 | 100 | ## Single issue |
| 84 | 101 | |
| 85 | -Get a project issue. | |
| 102 | +Gets a single project issue. | |
| 86 | 103 | |
| 87 | 104 | ``` |
| 88 | 105 | GET /projects/:id/issues/:issue_id |
| ... | ... | @@ -133,9 +150,16 @@ Parameters: |
| 133 | 150 | } |
| 134 | 151 | ``` |
| 135 | 152 | |
| 153 | +Return values: | |
| 154 | + | |
| 155 | ++ `200 Ok` on success and the list of project issues | |
| 156 | ++ `401 Unauthorized` if user is not authenticated | |
| 157 | ++ `404 Not Found` if project ID or issue ID not found | |
| 158 | + | |
| 159 | + | |
| 136 | 160 | ## New issue |
| 137 | 161 | |
| 138 | -Create a new project issue. | |
| 162 | +Creates a new project issue. | |
| 139 | 163 | |
| 140 | 164 | ``` |
| 141 | 165 | POST /projects/:id/issues |
| ... | ... | @@ -150,11 +174,17 @@ Parameters: |
| 150 | 174 | + `milestone_id` (optional) - The ID of a milestone to assign issue |
| 151 | 175 | + `labels` (optional) - Comma-separated label names for an issue |
| 152 | 176 | |
| 153 | -Will return created issue with status `201 Created` on success, or `404 Not found` on fail. | |
| 177 | +Return values: | |
| 178 | + | |
| 179 | ++ `201 Created` on success and the newly created project issue | |
| 180 | ++ `400 Bad Request` if the required attribute title is not given | |
| 181 | ++ `401 Unauthorized` if user is not authenticated | |
| 182 | ++ `404 Not Found` if project ID not found | |
| 183 | + | |
| 154 | 184 | |
| 155 | 185 | ## Edit issue |
| 156 | 186 | |
| 157 | -Update an existing project issue. | |
| 187 | +Updates an existing project issue. This function is also used to mark an issue as closed. | |
| 158 | 188 | |
| 159 | 189 | ``` |
| 160 | 190 | PUT /projects/:id/issues/:issue_id |
| ... | ... | @@ -171,5 +201,28 @@ Parameters: |
| 171 | 201 | + `labels` (optional) - Comma-separated label names for an issue |
| 172 | 202 | + `closed` (optional) - The state of an issue (0 = false, 1 = true) |
| 173 | 203 | |
| 174 | -Will return updated issue with status `200 OK` on success, or `404 Not found` on fail. | |
| 204 | +Return values: | |
| 205 | + | |
| 206 | ++ `200 Ok` on success and the update project issue | |
| 207 | ++ `401 Unauthorized` if user is not authenticated | |
| 208 | ++ `404 Not Found` if project ID or issue ID not found | |
| 209 | + | |
| 210 | + | |
| 211 | +## Delete existing issue (**Deprecated**) | |
| 212 | + | |
| 213 | +The function is deprecated and returns a `405 Method Not Allowed` | |
| 214 | +error if called. An issue gets now closed and is done by calling `PUT /projects/:id/issues/:issue_id` with | |
| 215 | +parameter `closed` set to 1. | |
| 216 | + | |
| 217 | +``` | |
| 218 | +DELETE /projects/:id/issues/:issue_id | |
| 219 | +``` | |
| 220 | + | |
| 221 | +Parameters: | |
| 222 | + | |
| 223 | ++ `id` (required) - The project ID | |
| 224 | ++ `issue_id` (required) - The ID of the issue | |
| 225 | + | |
| 226 | +Return values: | |
| 175 | 227 | |
| 228 | ++ `405 Method Not Allowed` is always returned, because the function is deprecated | ... | ... |
lib/api/issues.rb
| ... | ... | @@ -48,6 +48,7 @@ module Gitlab |
| 48 | 48 | # Example Request: |
| 49 | 49 | # POST /projects/:id/issues |
| 50 | 50 | post ":id/issues" do |
| 51 | + bad_request!(:title) unless params[:title].present? | |
| 51 | 52 | attrs = attributes_for_keys [:title, :description, :assignee_id, :milestone_id] |
| 52 | 53 | attrs[:label_list] = params[:labels] if params[:labels].present? |
| 53 | 54 | @issue = user_project.issues.new attrs | ... | ... |
spec/requests/api/issues_spec.rb
| ... | ... | @@ -41,6 +41,11 @@ describe Gitlab::API do |
| 41 | 41 | response.status.should == 200 |
| 42 | 42 | json_response['title'].should == issue.title |
| 43 | 43 | end |
| 44 | + | |
| 45 | + it "should return 404 if issue id not found" do | |
| 46 | + get api("/projects/#{project.id}/issues/54321", user) | |
| 47 | + response.status.should == 404 | |
| 48 | + end | |
| 44 | 49 | end |
| 45 | 50 | |
| 46 | 51 | describe "POST /projects/:id/issues" do |
| ... | ... | @@ -52,6 +57,11 @@ describe Gitlab::API do |
| 52 | 57 | json_response['description'].should be_nil |
| 53 | 58 | json_response['labels'].should == ['label', 'label2'] |
| 54 | 59 | end |
| 60 | + | |
| 61 | + it "should return a 400 bad request if title not given" do | |
| 62 | + post api("/projects/#{project.id}/issues", user), labels: 'label, label2' | |
| 63 | + response.status.should == 400 | |
| 64 | + end | |
| 55 | 65 | end |
| 56 | 66 | |
| 57 | 67 | describe "PUT /projects/:id/issues/:issue_id to update only title" do |
| ... | ... | @@ -62,6 +72,12 @@ describe Gitlab::API do |
| 62 | 72 | |
| 63 | 73 | json_response['title'].should == 'updated title' |
| 64 | 74 | end |
| 75 | + | |
| 76 | + it "should return 404 error if issue id not found" do | |
| 77 | + put api("/projects/#{project.id}/issues/44444", user), | |
| 78 | + title: 'updated title' | |
| 79 | + response.status.should == 404 | |
| 80 | + end | |
| 65 | 81 | end |
| 66 | 82 | |
| 67 | 83 | describe "PUT /projects/:id/issues/:issue_id to update state and label" do | ... | ... |