diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-08-18 11:17:02 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-08-18 11:17:02 +0300 |
commit | b39512ed755239198a9c294b6a45e65c05900235 (patch) | |
tree | d234a3efade1de67c46b9e5a38ce813627726aa7 /spec/presenters/project_member_presenter_spec.rb | |
parent | d31474cf3b17ece37939d20082b07f6657cc79a9 (diff) |
Add latest changes from gitlab-org/gitlab@15-3-stable-eev15.3.0-rc42
Diffstat (limited to 'spec/presenters/project_member_presenter_spec.rb')
-rw-r--r-- | spec/presenters/project_member_presenter_spec.rb | 118 |
1 files changed, 98 insertions, 20 deletions
diff --git a/spec/presenters/project_member_presenter_spec.rb b/spec/presenters/project_member_presenter_spec.rb index ad45a23c183..1cfc8cfb53b 100644 --- a/spec/presenters/project_member_presenter_spec.rb +++ b/spec/presenters/project_member_presenter_spec.rb @@ -55,39 +55,95 @@ RSpec.describe ProjectMemberPresenter do end describe '#can_update?' do - context 'when user can update_project_member' do + context 'when user is NOT attempting to update an Owner' do before do - allow(presenter).to receive(:can?).with(user, :update_project_member, presenter).and_return(true) + allow(project_member).to receive(:owner?).and_return(false) end - it { expect(presenter.can_update?).to eq(true) } + context 'when user can update_project_member' do + before do + allow(presenter).to receive(:can?).with(user, :update_project_member, presenter).and_return(true) + end + + specify { expect(presenter.can_update?).to eq(true) } + end + + context 'when user cannot update_project_member' do + before do + allow(presenter).to receive(:can?).with(user, :update_project_member, presenter).and_return(false) + allow(presenter).to receive(:can?).with(user, :override_project_member, presenter).and_return(false) + end + + specify { expect(presenter.can_update?).to eq(false) } + end end - context 'when user cannot update_project_member' do + context 'when user is attempting to update an Owner' do before do - allow(presenter).to receive(:can?).with(user, :update_project_member, presenter).and_return(false) - allow(presenter).to receive(:can?).with(user, :override_project_member, presenter).and_return(false) + allow(project_member).to receive(:owner?).and_return(true) + end + + context 'when user can manage owners' do + before do + allow(presenter).to receive(:can?).with(user, :manage_owners, project).and_return(true) + end + + specify { expect(presenter.can_update?).to eq(true) } end - it { expect(presenter.can_update?).to eq(false) } + context 'when user cannot manage owners' do + before do + allow(presenter).to receive(:can?).with(user, :manage_owners, project).and_return(false) + end + + specify { expect(presenter.can_update?).to eq(false) } + end end end describe '#can_remove?' do - context 'when user can destroy_project_member' do + context 'when user is NOT attempting to remove an Owner' do before do - allow(presenter).to receive(:can?).with(user, :destroy_project_member, presenter).and_return(true) + allow(project_member).to receive(:owner?).and_return(false) end - it { expect(presenter.can_remove?).to eq(true) } + context 'when user can destroy_project_member' do + before do + allow(presenter).to receive(:can?).with(user, :destroy_project_member, presenter).and_return(true) + end + + specify { expect(presenter.can_remove?).to eq(true) } + end + + context 'when user cannot destroy_project_member' do + before do + allow(presenter).to receive(:can?).with(user, :destroy_project_member, presenter).and_return(false) + end + + specify { expect(presenter.can_remove?).to eq(false) } + end end - context 'when user cannot destroy_project_member' do + context 'when user is attempting to remove an Owner' do before do - allow(presenter).to receive(:can?).with(user, :destroy_project_member, presenter).and_return(false) + allow(project_member).to receive(:owner?).and_return(true) + end + + context 'when user can manage owners' do + before do + allow(presenter).to receive(:can?).with(user, :manage_owners, project).and_return(true) + end + + specify { expect(presenter.can_remove?).to eq(true) } end - it { expect(presenter.can_remove?).to eq(false) } + context 'when user cannot manage owners' do + before do + allow(presenter).to receive(:can?).with(user, :manage_owners, project).and_return(false) + end + + specify { expect(presenter.can_remove?).to eq(false) } + end end end @@ -99,7 +155,7 @@ RSpec.describe ProjectMemberPresenter do context 'and user can update_project_member' do before do - allow(presenter).to receive(:can?).with(user, :update_project_member, presenter).and_return(true) + allow(presenter).to receive(:can_update?).and_return(true) end it { expect(presenter.can_approve?).to eq(true) } @@ -107,8 +163,7 @@ RSpec.describe ProjectMemberPresenter do context 'and user cannot update_project_member' do before do - allow(presenter).to receive(:can?).with(user, :update_project_member, presenter).and_return(false) - allow(presenter).to receive(:can?).with(user, :override_project_member, presenter).and_return(false) + allow(presenter).to receive(:can_update?).and_return(false) end it { expect(presenter.can_approve?).to eq(false) } @@ -122,7 +177,7 @@ RSpec.describe ProjectMemberPresenter do context 'and user can update_project_member' do before do - allow(presenter).to receive(:can?).with(user, :update_project_member, presenter).and_return(true) + allow(presenter).to receive(:can_update?).and_return(true) end it { expect(presenter.can_approve?).to eq(false) } @@ -130,7 +185,7 @@ RSpec.describe ProjectMemberPresenter do context 'and user cannot update_project_member' do before do - allow(presenter).to receive(:can?).with(user, :update_project_member, presenter).and_return(false) + allow(presenter).to receive(:can_update?).and_return(false) end it { expect(presenter.can_approve?).to eq(false) } @@ -138,9 +193,32 @@ RSpec.describe ProjectMemberPresenter do end end - it_behaves_like '#valid_level_roles', :project do + describe 'valid level roles' do before do - entity.group = group + allow(Ability).to receive(:allowed?).and_call_original + allow(Ability).to receive(:allowed?).with(member_user, :manage_owners, entity).and_return(can_manage_owners) + end + + context 'when user cannot manage owners' do + it_behaves_like '#valid_level_roles', :project do + let(:expected_roles) { { 'Developer' => 30, 'Maintainer' => 40, 'Reporter' => 20 } } + let(:can_manage_owners) { false } + + before do + entity.group = group + end + end + end + + context 'when user can manage owners' do + it_behaves_like '#valid_level_roles', :project do + let(:expected_roles) { { 'Developer' => 30, 'Maintainer' => 40, 'Owner' => 50, 'Reporter' => 20 } } + let(:can_manage_owners) { true } + + before do + entity.group = group + end + end end end end |