Commit 7af1bc3b88e3a32cb07d7aee7962af22c2339c02
Exists in
master
and in
4 other branches
Merge branch 'feature/api_remove_project' of /home/git/repositories/gitlab/gitlabhq
Showing
4 changed files
with
60 additions
and
1 deletions
Show diff stats
doc/api/projects.md
| @@ -244,6 +244,18 @@ Parameters: | @@ -244,6 +244,18 @@ Parameters: | ||
| 244 | + `public` (optional) | 244 | + `public` (optional) |
| 245 | 245 | ||
| 246 | 246 | ||
| 247 | +## Remove project | ||
| 248 | + | ||
| 249 | +Removes project with all resources(issues, merge requests etc) | ||
| 250 | + | ||
| 251 | +``` | ||
| 252 | +DELETE /projects/:id | ||
| 253 | +``` | ||
| 254 | + | ||
| 255 | +Parameters: | ||
| 256 | + | ||
| 257 | ++ `id` (required) - The ID of a project | ||
| 258 | + | ||
| 247 | 259 | ||
| 248 | ## Team members | 260 | ## Team members |
| 249 | 261 |
lib/api/groups.rb
lib/api/projects.rb
| @@ -129,6 +129,16 @@ module API | @@ -129,6 +129,16 @@ module API | ||
| 129 | end | 129 | end |
| 130 | end | 130 | end |
| 131 | 131 | ||
| 132 | + # Remove project | ||
| 133 | + # | ||
| 134 | + # Parameters: | ||
| 135 | + # id (required) - The ID of a project | ||
| 136 | + # Example Request: | ||
| 137 | + # DELETE /projects/:id | ||
| 138 | + delete ":id" do | ||
| 139 | + authorize! :remove_project, user_project | ||
| 140 | + user_project.destroy | ||
| 141 | + end | ||
| 132 | 142 | ||
| 133 | # Mark this project as forked from another | 143 | # Mark this project as forked from another |
| 134 | # | 144 | # |
spec/requests/api/projects_spec.rb
| @@ -730,4 +730,42 @@ describe API::API do | @@ -730,4 +730,42 @@ describe API::API do | ||
| 730 | end | 730 | end |
| 731 | end | 731 | end |
| 732 | end | 732 | end |
| 733 | + | ||
| 734 | + describe "DELETE /projects/:id" do | ||
| 735 | + context "when authenticated as user" do | ||
| 736 | + it "should remove project" do | ||
| 737 | + delete api("/projects/#{project.id}", user) | ||
| 738 | + response.status.should == 200 | ||
| 739 | + end | ||
| 740 | + | ||
| 741 | + it "should not remove a project if not an owner" do | ||
| 742 | + user3 = create(:user) | ||
| 743 | + project.team << [user3, :developer] | ||
| 744 | + delete api("/projects/#{project.id}", user3) | ||
| 745 | + response.status.should == 403 | ||
| 746 | + end | ||
| 747 | + | ||
| 748 | + it "should not remove a non existing project" do | ||
| 749 | + delete api("/projects/1328", user) | ||
| 750 | + response.status.should == 404 | ||
| 751 | + end | ||
| 752 | + | ||
| 753 | + it "should not remove a project not attached to user" do | ||
| 754 | + delete api("/projects/#{project.id}", user2) | ||
| 755 | + response.status.should == 404 | ||
| 756 | + end | ||
| 757 | + end | ||
| 758 | + | ||
| 759 | + context "when authenticated as admin" do | ||
| 760 | + it "should remove any existing project" do | ||
| 761 | + delete api("/projects/#{project.id}", admin) | ||
| 762 | + response.status.should == 200 | ||
| 763 | + end | ||
| 764 | + | ||
| 765 | + it "should not remove a non existing project" do | ||
| 766 | + delete api("/projects/1328", admin) | ||
| 767 | + response.status.should == 404 | ||
| 768 | + end | ||
| 769 | + end | ||
| 770 | + end | ||
| 733 | end | 771 | end |