Commit 7af1bc3b88e3a32cb07d7aee7962af22c2339c02

Authored by Dmitriy Zaporozhets
2 parents 551fa4c9 51825e43

Merge branch 'feature/api_remove_project' of /home/git/repositories/gitlab/gitlabhq

doc/api/projects.md
... ... @@ -244,6 +244,18 @@ Parameters:
244 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 260 ## Team members
249 261  
... ...
lib/api/groups.rb
... ... @@ -66,7 +66,6 @@ module API
66 66 present group, with: Entities::GroupDetail
67 67 end
68 68  
69   -
70 69 # Remove group
71 70 #
72 71 # Parameters:
... ...
lib/api/projects.rb
... ... @@ -129,6 +129,16 @@ module API
129 129 end
130 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 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 730 end
731 731 end
732 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 771 end
... ...