group_members_controller_spec.rb 6.4 KB
Newer Older
F
Felipe Artur 已提交
1 2 3 4
require 'spec_helper'

describe Groups::GroupMembersController do
  let(:user)  { create(:user) }
5
  let(:group) { create(:group, :public, :access_requestable) }
F
Felipe Artur 已提交
6

7 8
  describe 'GET index' do
    it 'renders index with 200 status code' do
R
Rémy Coutable 已提交
9
      get :index, group_id: group
F
Felipe Artur 已提交
10

11
      expect(response).to have_gitlab_http_status(200)
F
Felipe Artur 已提交
12
      expect(response).to render_template(:index)
F
Felipe Artur 已提交
13 14
    end
  end
R
Rémy Coutable 已提交
15

16 17 18
  describe 'POST create' do
    let(:group_user) { create(:user) }

19 20 21
    before do
      sign_in(user)
    end
22 23

    context 'when user does not have enough rights' do
24 25 26
      before do
        group.add_developer(user)
      end
27 28 29 30 31 32

      it 'returns 403' do
        post :create, group_id: group,
                      user_ids: group_user.id,
                      access_level: Gitlab::Access::GUEST

33
        expect(response).to have_gitlab_http_status(403)
34
        expect(group.users).not_to include group_user
35
      end
36
    end
37

38
    context 'when user has enough rights' do
39 40 41
      before do
        group.add_owner(user)
      end
42

43 44 45 46
      it 'adds user to members' do
        post :create, group_id: group,
                      user_ids: group_user.id,
                      access_level: Gitlab::Access::GUEST
47

48 49 50
        expect(response).to set_flash.to 'Users were successfully added.'
        expect(response).to redirect_to(group_group_members_path(group))
        expect(group.users).to include group_user
51 52
      end

53 54 55 56 57 58 59 60
      it 'adds no user to members' do
        post :create, group_id: group,
                      user_ids: '',
                      access_level: Gitlab::Access::GUEST

        expect(response).to set_flash.to 'No users specified.'
        expect(response).to redirect_to(group_group_members_path(group))
        expect(group.users).not_to include group_user
61 62 63 64
      end
    end
  end

65 66 67
  describe 'DELETE destroy' do
    let(:member) { create(:group_member, :developer, group: group) }

68 69 70
    before do
      sign_in(user)
    end
R
Rémy Coutable 已提交
71 72 73

    context 'when member is not found' do
      it 'returns 403' do
74
        delete :destroy, group_id: group, id: 42
R
Rémy Coutable 已提交
75

76
        expect(response).to have_gitlab_http_status(403)
R
Rémy Coutable 已提交
77 78 79 80 81
      end
    end

    context 'when member is found' do
      context 'when user does not have enough rights' do
82 83 84
        before do
          group.add_developer(user)
        end
R
Rémy Coutable 已提交
85 86

        it 'returns 403' do
87
          delete :destroy, group_id: group, id: member
R
Rémy Coutable 已提交
88

89
          expect(response).to have_gitlab_http_status(403)
90
          expect(group.members).to include member
R
Rémy Coutable 已提交
91 92 93 94
        end
      end

      context 'when user has enough rights' do
95 96 97
        before do
          group.add_owner(user)
        end
R
Rémy Coutable 已提交
98 99

        it '[HTML] removes user from members' do
100
          delete :destroy, group_id: group, id: member
R
Rémy Coutable 已提交
101 102 103

          expect(response).to set_flash.to 'User was successfully removed from group.'
          expect(response).to redirect_to(group_group_members_path(group))
104
          expect(group.members).not_to include member
R
Rémy Coutable 已提交
105 106 107
        end

        it '[JS] removes user from members' do
108
          xhr :delete, :destroy, group_id: group, id: member
R
Rémy Coutable 已提交
109 110

          expect(response).to be_success
111
          expect(group.members).not_to include member
R
Rémy Coutable 已提交
112 113 114 115 116
        end
      end
    end
  end

117
  describe 'DELETE leave' do
118 119 120
    before do
      sign_in(user)
    end
R
Rémy Coutable 已提交
121 122

    context 'when member is not found' do
123
      it 'returns 404' do
R
Rémy Coutable 已提交
124 125
        delete :leave, group_id: group

126
        expect(response).to have_gitlab_http_status(404)
R
Rémy Coutable 已提交
127 128 129 130 131
      end
    end

    context 'when member is found' do
      context 'and is not an owner' do
132 133 134
        before do
          group.add_developer(user)
        end
R
Rémy Coutable 已提交
135 136 137 138

        it 'removes user from members' do
          delete :leave, group_id: group

R
Rémy Coutable 已提交
139
          expect(response).to set_flash.to "You left the \"#{group.name}\" group."
R
Rémy Coutable 已提交
140 141 142
          expect(response).to redirect_to(dashboard_groups_path)
          expect(group.users).not_to include user
        end
143 144 145 146

        it 'supports json request' do
          delete :leave, group_id: group, format: :json

147
          expect(response).to have_gitlab_http_status(200)
A
Alfredo Sumaran 已提交
148
          expect(json_response['notice']).to eq "You left the \"#{group.name}\" group."
149
        end
R
Rémy Coutable 已提交
150 151 152
      end

      context 'and is an owner' do
153 154 155
        before do
          group.add_owner(user)
        end
R
Rémy Coutable 已提交
156 157 158 159

        it 'cannot removes himself from the group' do
          delete :leave, group_id: group

160
          expect(response).to have_gitlab_http_status(403)
R
Rémy Coutable 已提交
161 162 163 164
        end
      end

      context 'and is a requester' do
165 166 167
        before do
          group.request_access(user)
        end
R
Rémy Coutable 已提交
168 169 170 171

        it 'removes user from members' do
          delete :leave, group_id: group

R
Rémy Coutable 已提交
172
          expect(response).to set_flash.to 'Your access request to the group has been withdrawn.'
173
          expect(response).to redirect_to(group_path(group))
174
          expect(group.requesters).to be_empty
R
Rémy Coutable 已提交
175 176 177 178 179 180
          expect(group.users).not_to include user
        end
      end
    end
  end

181
  describe 'POST request_access' do
182 183 184
    before do
      sign_in(user)
    end
R
Rémy Coutable 已提交
185 186 187 188 189 190

    it 'creates a new GroupMember that is not a team member' do
      post :request_access, group_id: group

      expect(response).to set_flash.to 'Your request for access has been queued for review.'
      expect(response).to redirect_to(group_path(group))
191
      expect(group.requesters.exists?(user_id: user)).to be_truthy
R
Rémy Coutable 已提交
192 193 194 195
      expect(group.users).not_to include user
    end
  end

196 197 198
  describe 'POST approve_access_request' do
    let(:member) { create(:group_member, :access_request, group: group) }

199 200 201
    before do
      sign_in(user)
    end
R
Rémy Coutable 已提交
202 203 204

    context 'when member is not found' do
      it 'returns 403' do
205
        post :approve_access_request, group_id: group, id: 42
R
Rémy Coutable 已提交
206

207
        expect(response).to have_gitlab_http_status(403)
R
Rémy Coutable 已提交
208 209 210 211 212
      end
    end

    context 'when member is found' do
      context 'when user does not have enough rights' do
213 214 215
        before do
          group.add_developer(user)
        end
R
Rémy Coutable 已提交
216 217

        it 'returns 403' do
218
          post :approve_access_request, group_id: group, id: member
R
Rémy Coutable 已提交
219

220
          expect(response).to have_gitlab_http_status(403)
221
          expect(group.members).not_to include member
R
Rémy Coutable 已提交
222 223 224 225
        end
      end

      context 'when user has enough rights' do
226 227 228
        before do
          group.add_owner(user)
        end
R
Rémy Coutable 已提交
229 230

        it 'adds user to members' do
231
          post :approve_access_request, group_id: group, id: member
R
Rémy Coutable 已提交
232 233

          expect(response).to redirect_to(group_group_members_path(group))
234
          expect(group.members).to include member
R
Rémy Coutable 已提交
235 236 237 238
        end
      end
    end
  end
F
Felipe Artur 已提交
239
end