Commit b59ba979984072af6dfa89121eb12686c83ac44d

Authored by Dmitriy Zaporozhets
2 parents f614fa97 434d276d

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

doc/api/projects.md
... ... @@ -2,7 +2,7 @@
2 2  
3 3 ### List projects
4 4  
5   -Get a list of projects owned by the authenticated user.
  5 +Get a list of projects accessible by the authenticated user.
6 6  
7 7 ```
8 8 GET /projects
... ... @@ -82,6 +82,22 @@ GET /projects
82 82 ```
83 83  
84 84  
  85 +#### List owned projects
  86 +
  87 +Get a list of projects owned by the authenticated user.
  88 +
  89 +```
  90 +GET /projects/owned
  91 +```
  92 +
  93 +#### List ALL projects
  94 +
  95 +Get a list of all GitLab projects (admin only).
  96 +
  97 +```
  98 +GET /projects/all
  99 +```
  100 +
85 101 ### Get single project
86 102  
87 103 Get a specific project, identified by project ID or NAMESPACE/PROJECT_NAME , which is owned by the authentication user.
... ...
lib/api/projects.rb
... ... @@ -31,6 +31,16 @@ module API
31 31 present @projects, with: Entities::Project
32 32 end
33 33  
  34 + # Get all projects for admin user
  35 + #
  36 + # Example Request:
  37 + # GET /projects/all
  38 + get '/all' do
  39 + authenticated_as_admin!
  40 + @projects = paginate Project
  41 + present @projects, with: Entities::Project
  42 + end
  43 +
34 44 # Get a single project
35 45 #
36 46 # Parameters:
... ...
spec/requests/api/projects_spec.rb
... ... @@ -36,6 +36,32 @@ describe API::API do
36 36 end
37 37 end
38 38  
  39 + describe "GET /projects/all" do
  40 + context "when unauthenticated" do
  41 + it "should return authentication error" do
  42 + get api("/projects/all")
  43 + response.status.should == 401
  44 + end
  45 + end
  46 +
  47 + context "when authenticated as regular user" do
  48 + it "should return authentication error" do
  49 + get api("/projects/all", user)
  50 + response.status.should == 403
  51 + end
  52 + end
  53 +
  54 + context "when authenticated as admin" do
  55 + it "should return an array of all projects" do
  56 + get api("/projects/all", admin)
  57 + response.status.should == 200
  58 + json_response.should be_an Array
  59 + json_response.first['name'].should == project.name
  60 + json_response.first['owner']['email'].should == user.email
  61 + end
  62 + end
  63 + end
  64 +
39 65 describe "POST /projects" do
40 66 context "maximum number of projects reached" do
41 67 before do
... ...