Commit fc0c69287069af9a47176abb1488f653f91eebdb
1 parent
8edc6b6a
Exists in
master
and in
4 other branches
Add docs/tests for groups api
Showing
3 changed files
with
134 additions
and
0 deletions
Show diff stats
doc/api/README.md
... | ... | @@ -32,6 +32,7 @@ When listing resources you can pass the following parameters: |
32 | 32 | + [Users](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/users.md) |
33 | 33 | + [Session](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/session.md) |
34 | 34 | + [Projects](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/projects.md) |
35 | ++ [Groups](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/groups.md) | |
35 | 36 | + [Snippets](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/snippets.md) |
36 | 37 | + [Repositories](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/repositories.md) |
37 | 38 | + [Issues](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/issues.md) | ... | ... |
... | ... | @@ -0,0 +1,45 @@ |
1 | +## List project groups | |
2 | + | |
3 | +Get a list of groups. (As user: my groups, as admin: all groups) | |
4 | + | |
5 | +``` | |
6 | +GET /groups | |
7 | +``` | |
8 | + | |
9 | +```json | |
10 | +[ | |
11 | + { | |
12 | + "id": 1, | |
13 | + "name": "Foobar Group", | |
14 | + "path": "foo-bar", | |
15 | + "owner_id": 18 | |
16 | + } | |
17 | +] | |
18 | +``` | |
19 | + | |
20 | +## Details of group | |
21 | + | |
22 | +Get all details of a group. | |
23 | + | |
24 | +``` | |
25 | +GET /groups/:id | |
26 | +``` | |
27 | + | |
28 | +Parameters: | |
29 | + | |
30 | ++ `id` (required) - The ID of a group | |
31 | + | |
32 | +## New group | |
33 | + | |
34 | +Create a new project group. Available only for admin | |
35 | + | |
36 | +``` | |
37 | +POST /groups | |
38 | +``` | |
39 | + | |
40 | +Parameters: | |
41 | ++ `name` (required) - Email | |
42 | ++ `path` - Password | |
43 | + | |
44 | +Will return created group with status `201 Created` on success, or `404 Not found` on fail. | |
45 | + | ... | ... |
... | ... | @@ -0,0 +1,88 @@ |
1 | +require 'spec_helper' | |
2 | + | |
3 | +describe Gitlab::API do | |
4 | + include ApiHelpers | |
5 | + | |
6 | + let(:user1) { create(:user) } | |
7 | + let(:user2) { create(:user) } | |
8 | + let(:admin) { create(:admin) } | |
9 | + let!(:group1) { create(:group, owner: user1) } | |
10 | + let!(:group2) { create(:group, owner: user2) } | |
11 | + | |
12 | + describe "GET /groups" do | |
13 | + context "when unauthenticated" do | |
14 | + it "should return authentication error" do | |
15 | + get api("/groups") | |
16 | + response.status.should == 401 | |
17 | + end | |
18 | + end | |
19 | + | |
20 | + context "when authenticated as user" do | |
21 | + it "normal user: should return an array of groups of user1" do | |
22 | + get api("/groups", user1) | |
23 | + response.status.should == 200 | |
24 | + json_response.should be_an Array | |
25 | + json_response.length.should == 1 | |
26 | + json_response.first['name'].should == group1.name | |
27 | + end | |
28 | + end | |
29 | + | |
30 | + context "when authenticated as admin" do | |
31 | + it "admin: should return an array of all groups" do | |
32 | + get api("/groups", admin) | |
33 | + response.status.should == 200 | |
34 | + json_response.should be_an Array | |
35 | + json_response.length.should == 2 | |
36 | + end | |
37 | + end | |
38 | + end | |
39 | + | |
40 | + describe "GET /groups/:id" do | |
41 | + context "when authenticated as user" do | |
42 | + it "should return one of user1's groups" do | |
43 | + get api("/groups/#{group1.id}", user1) | |
44 | + response.status.should == 200 | |
45 | + json_response['name'] == group1.name | |
46 | + end | |
47 | + | |
48 | + it "should not return a non existing group" do | |
49 | + get api("/groups/1328", user1) | |
50 | + response.status.should == 404 | |
51 | + end | |
52 | + | |
53 | + it "should not return a group not attached to user1" do | |
54 | + get api("/groups/#{group2.id}", user1) | |
55 | + response.status.should == 404 | |
56 | + end | |
57 | + end | |
58 | + | |
59 | + context "when authenticated as admin" do | |
60 | + it "should return any existing group" do | |
61 | + get api("/groups/#{group2.id}", admin) | |
62 | + response.status.should == 200 | |
63 | + json_response['name'] == group2.name | |
64 | + end | |
65 | + | |
66 | + it "should not return a non existing group" do | |
67 | + get api("/groups/1328", admin) | |
68 | + response.status.should == 404 | |
69 | + end | |
70 | + end | |
71 | + end | |
72 | + | |
73 | + describe "POST /groups" do | |
74 | + context "when authenticated as user" do | |
75 | + it "should not create group" do | |
76 | + post api("/groups", user1), attributes_for(:group) | |
77 | + response.status.should == 403 | |
78 | + end | |
79 | + end | |
80 | + | |
81 | + context "when authenticated as admin" do | |
82 | + it "should create group" do | |
83 | + post api("/groups", admin), attributes_for(:group) | |
84 | + response.status.should == 201 | |
85 | + end | |
86 | + end | |
87 | + end | |
88 | +end | ... | ... |