Commit e96d77d3dbd789981b8e85e7afba9a5908d79483

Authored by Sebastian Ziebell
1 parent dffc2b8a

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.
doc/api/issues.md
1 ## List issues 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 GET /issues 7 GET /issues
@@ -68,9 +69,18 @@ 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 ## List project issues 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 GET /projects/:id/issues 86 GET /projects/:id/issues
@@ -80,9 +90,16 @@ Parameters: @@ -80,9 +90,16 @@ Parameters:
80 90
81 + `id` (required) - The ID of a project 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 ## Single issue 100 ## Single issue
84 101
85 -Get a project issue. 102 +Gets a single project issue.
86 103
87 ``` 104 ```
88 GET /projects/:id/issues/:issue_id 105 GET /projects/:id/issues/:issue_id
@@ -133,9 +150,16 @@ Parameters: @@ -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 ## New issue 160 ## New issue
137 161
138 -Create a new project issue. 162 +Creates a new project issue.
139 163
140 ``` 164 ```
141 POST /projects/:id/issues 165 POST /projects/:id/issues
@@ -150,11 +174,17 @@ Parameters: @@ -150,11 +174,17 @@ Parameters:
150 + `milestone_id` (optional) - The ID of a milestone to assign issue 174 + `milestone_id` (optional) - The ID of a milestone to assign issue
151 + `labels` (optional) - Comma-separated label names for an issue 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 ## Edit issue 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 PUT /projects/:id/issues/:issue_id 190 PUT /projects/:id/issues/:issue_id
@@ -171,5 +201,28 @@ Parameters: @@ -171,5 +201,28 @@ Parameters:
171 + `labels` (optional) - Comma-separated label names for an issue 201 + `labels` (optional) - Comma-separated label names for an issue
172 + `closed` (optional) - The state of an issue (0 = false, 1 = true) 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,6 +48,7 @@ module Gitlab
48 # Example Request: 48 # Example Request:
49 # POST /projects/:id/issues 49 # POST /projects/:id/issues
50 post ":id/issues" do 50 post ":id/issues" do
  51 + bad_request!(:title) unless params[:title].present?
51 attrs = attributes_for_keys [:title, :description, :assignee_id, :milestone_id] 52 attrs = attributes_for_keys [:title, :description, :assignee_id, :milestone_id]
52 attrs[:label_list] = params[:labels] if params[:labels].present? 53 attrs[:label_list] = params[:labels] if params[:labels].present?
53 @issue = user_project.issues.new attrs 54 @issue = user_project.issues.new attrs
spec/requests/api/issues_spec.rb
@@ -41,6 +41,11 @@ describe Gitlab::API do @@ -41,6 +41,11 @@ describe Gitlab::API do
41 response.status.should == 200 41 response.status.should == 200
42 json_response['title'].should == issue.title 42 json_response['title'].should == issue.title
43 end 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 end 49 end
45 50
46 describe "POST /projects/:id/issues" do 51 describe "POST /projects/:id/issues" do
@@ -52,6 +57,11 @@ describe Gitlab::API do @@ -52,6 +57,11 @@ describe Gitlab::API do
52 json_response['description'].should be_nil 57 json_response['description'].should be_nil
53 json_response['labels'].should == ['label', 'label2'] 58 json_response['labels'].should == ['label', 'label2']
54 end 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 end 65 end
56 66
57 describe "PUT /projects/:id/issues/:issue_id to update only title" do 67 describe "PUT /projects/:id/issues/:issue_id to update only title" do
@@ -62,6 +72,12 @@ describe Gitlab::API do @@ -62,6 +72,12 @@ describe Gitlab::API do
62 72
63 json_response['title'].should == 'updated title' 73 json_response['title'].should == 'updated title'
64 end 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 end 81 end
66 82
67 describe "PUT /projects/:id/issues/:issue_id to update state and label" do 83 describe "PUT /projects/:id/issues/:issue_id to update state and label" do