diff options
| author | Izaak Alpert <ialpert@blackberry.com> | 2013-09-04 11:19:03 -0400 |
|---|---|---|
| committer | Izaak Alpert <ialpert@blackberry.com> | 2013-09-04 13:17:17 -0400 |
| commit | 8248e1f2b83895f394a3fecd25dcea4a8b40303b (patch) | |
| tree | b863098af85b8dc1d1dbd956799eab2b5058a60a /spec/requests | |
| parent | 626359831402aeede4c4cb12cb10c7534a0dae79 (diff) | |
| download | gitlab-ce-8248e1f2b83895f394a3fecd25dcea4a8b40303b.tar.gz | |
Add group membership api
Change-Id: I5b174bba02856ede788dcb51ec9b0d598ea7d0df
Diffstat (limited to 'spec/requests')
| -rw-r--r-- | spec/requests/api/groups_spec.rb | 116 |
1 files changed, 108 insertions, 8 deletions
diff --git a/spec/requests/api/groups_spec.rb b/spec/requests/api/groups_spec.rb index d2e25fb9e23..51d6384a261 100644 --- a/spec/requests/api/groups_spec.rb +++ b/spec/requests/api/groups_spec.rb @@ -3,11 +3,11 @@ require 'spec_helper' describe API::API do include ApiHelpers - let(:user1) { create(:user) } - let(:user2) { create(:user) } + let(:user1) { create(:user) } + let(:user2) { create(:user) } let(:admin) { create(:admin) } - let!(:group1) { create(:group, owner: user1) } - let!(:group2) { create(:group, owner: user2) } + let!(:group1) { create(:group, owner: user1) } + let!(:group2) { create(:group, owner: user2) } describe "GET /groups" do context "when unauthenticated" do @@ -52,7 +52,7 @@ describe API::API do it "should not return a group not attached to user1" do get api("/groups/#{group2.id}", user1) - response.status.should == 404 + response.status.should == 403 end end @@ -90,7 +90,7 @@ describe API::API do end it "should return 400 bad request error if name not given" do - post api("/groups", admin), { path: group2.path } + post api("/groups", admin), {path: group2.path} response.status.should == 400 end @@ -104,8 +104,8 @@ describe API::API do describe "POST /groups/:id/projects/:project_id" do let(:project) { create(:project) } before(:each) do - project.stub!(:transfer).and_return(true) - Project.stub(:find).and_return(project) + project.stub!(:transfer).and_return(true) + Project.stub(:find).and_return(project) end @@ -123,4 +123,104 @@ describe API::API do end end end + + describe "members" do + let(:owner) { create(:user) } + let(:reporter) { create(:user) } + let(:developer) { create(:user) } + let(:master) { create(:user) } + let(:guest) { create(:user) } + let!(:group_with_members) do + group = create(:group, owner: owner) + group.add_users([reporter.id], UsersGroup::REPORTER) + group.add_users([developer.id], UsersGroup::DEVELOPER) + group.add_users([master.id], UsersGroup::MASTER) + group.add_users([guest.id], UsersGroup::GUEST) + group + end + let!(:group_no_members) { create(:group, owner: owner) } + describe "GET /groups/:id/members" do + context "when authenticated as user that is part or the group" do + it "each user: should return an array of members groups of group3" do + [owner, master, developer, reporter, guest].each do |user| + get api("/groups/#{group_with_members.id}/members", user) + response.status.should == 200 + json_response.should be_an Array + json_response.size.should == 5 + json_response.find { |e| e['id']==owner.id }['access_level'].should == UsersGroup::OWNER + json_response.find { |e| e['id']==reporter.id }['access_level'].should == UsersGroup::REPORTER + json_response.find { |e| e['id']==developer.id }['access_level'].should == UsersGroup::DEVELOPER + json_response.find { |e| e['id']==master.id }['access_level'].should == UsersGroup::MASTER + json_response.find { |e| e['id']==guest.id }['access_level'].should == UsersGroup::GUEST + end + end + it "users not part of the group should get access error" do + get api("/groups/#{group_with_members.id}/members", user1) + response.status.should == 403 + end + end + end + + describe "POST /groups/:id/members" do + context "when not a member of the group" do + it "should not add guest as member of group_no_members when adding being done by person outside the group" do + post api("/groups/#{group_no_members.id}/members", reporter), user_id: guest.id, access_level: UsersGroup::MASTER + response.status.should == 403 + end + end + + context "when a member of the group" do + it "should return ok and add new member" do + count_before=group_no_members.users_groups.count + new_user = create(:user) + post api("/groups/#{group_no_members.id}/members", owner), user_id: new_user.id, access_level: UsersGroup::MASTER + response.status.should == 201 + json_response['name'].should == new_user.name + json_response['access_level'].should == UsersGroup::MASTER + group_no_members.users_groups.count.should == count_before + 1 + end + it "should return error if member already exists" do + post api("/groups/#{group_with_members.id}/members", owner), user_id: master.id, access_level: UsersGroup::MASTER + response.status.should == 409 + end + it "should return a 400 error when user id is not given" do + post api("/groups/#{group_no_members.id}/members", owner), access_level: UsersGroup::MASTER + response.status.should == 400 + end + it "should return a 400 error when access level is not given" do + post api("/groups/#{group_no_members.id}/members", owner), user_id: master.id + response.status.should == 400 + end + + it "should return a 422 error when access level is not known" do + post api("/groups/#{group_no_members.id}/members", owner), user_id: master.id, access_level: 1234 + response.status.should == 422 + end + + end + end + + describe "DELETE /groups/:id/members/:user_id" do + context "when not a member of the group" do + it "should not delete guest's membership of group_with_members" do + random_user = create(:user) + delete api("/groups/#{group_with_members.id}/members/#{owner.id}", random_user) + response.status.should == 403 + end + end + + context "when a member of the group" do + it "should delete guest's membership of group" do + count_before=group_with_members.users_groups.count + delete api("/groups/#{group_with_members.id}/members/#{guest.id}", owner) + response.status.should == 200 + group_with_members.users_groups.count.should == count_before - 1 + end + it "should return a 404 error when user id is not known" do + delete api("/groups/#{group_with_members.id}/members/1328", owner) + response.status.should == 404 + end + end + end + end end |
