Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/presenters/project_member_presenter_spec.rb')
-rw-r--r--spec/presenters/project_member_presenter_spec.rb118
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