summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Schilling <rschilling@student.tugraz.at>2016-04-12 18:52:43 +0200
committerRobert Schilling <rschilling@student.tugraz.at>2016-04-13 14:26:41 +0200
commit3ab9ea8dae1edc6ab8c8563843342890736eb24c (patch)
treeca7d663b5f6761db6973101338bf8c5fb8a838e6
parentea2193aaeb1127746dc78d2dda7037d998911662 (diff)
downloadgitlab-ce-3ab9ea8dae1edc6ab8c8563843342890736eb24c.tar.gz
Make staring API more restful
-rw-r--r--doc/api/projects.md12
-rw-r--r--lib/api/projects.rb11
-rw-r--r--spec/requests/api/projects_spec.rb8
3 files changed, 15 insertions, 16 deletions
diff --git a/doc/api/projects.md b/doc/api/projects.md
index c5ffc5514c7..b25c9080080 100644
--- a/doc/api/projects.md
+++ b/doc/api/projects.md
@@ -493,8 +493,8 @@ Parameters:
### Star a project
-Stars a given project. Returns status code 201 and the project on success and
-304 if the project is already starred.
+Stars a given project. Returns status code `201` and the project on success and
+`304` if the project is already starred.
```
POST /projects/:id/star
@@ -556,11 +556,11 @@ Example response:
### Unstar a project
-Unstars a given project. Returns status code 201 and the project on success
-and 304 if the project is already unstarred.
+Unstars a given project. Returns status code `200` and the project on success
+and `304` if the project is not starred.
```
-POST /projects/:id/unstar
+DELETE /projects/:id/star
```
| Attribute | Type | Required | Description |
@@ -568,7 +568,7 @@ POST /projects/:id/unstar
| `id` | integer | yes | The ID of the project |
```bash
-curl -X POST -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/projects/5/unstar"
+curl -X DELETE -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/projects/5/star"
```
Example response:
diff --git a/lib/api/projects.rb b/lib/api/projects.rb
index ebcf7a4eedd..c7fdfbfe57b 100644
--- a/lib/api/projects.rb
+++ b/lib/api/projects.rb
@@ -279,13 +279,12 @@ module API
# Example Request:
# POST /projects/:id/star
post ':id/star' do
- if !current_user.starred?(user_project)
+ if current_user.starred?(user_project)
+ not_modified!
+ else
current_user.toggle_star(user_project)
user_project.reload
present user_project, with: Entities::Project
-
- else
- not_modified!
end
end
@@ -294,8 +293,8 @@ module API
# Parameters:
# id (required) - The ID of a project
# Example Request:
- # POST /projects/:id/unstar
- post ':id/unstar' do
+ # DELETE /projects/:id/unstar
+ delete ':id/star' do
if current_user.starred?(user_project)
current_user.toggle_star(user_project)
user_project.reload
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index f05622f77fe..2a7c55fe65e 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -1045,7 +1045,7 @@ describe API::API, api: true do
end
end
- describe 'POST /projects/:id/unstar' do
+ describe 'DELETE /projects/:id/star' do
context 'on a starred project' do
before do
user.toggle_star(project)
@@ -1053,16 +1053,16 @@ describe API::API, api: true do
end
it 'unstars the project' do
- post api("/projects/#{project.id}/unstar", user)
+ delete api("/projects/#{project.id}/star", user)
- expect(response.status).to eq(201)
+ expect(response.status).to eq(200)
expect(json_response['star_count']).to eq(0)
end
end
context 'on an unstarred project' do
it 'does not modify the star count' do
- post api("/projects/#{project.id}/unstar", user)
+ delete api("/projects/#{project.id}/star", user)
expect(response.status).to eq(304)
expect(project.star_count).to eq(0)