From 2db57d7d86fd83ed67c557480a0ffa19a2fdf5d4 Mon Sep 17 00:00:00 2001 From: Joe Woodward <jwoodward@gitlab.com> Date: Wed, 16 Oct 2024 07:17:23 +0000 Subject: [PATCH] Add specs to test for_role scopes This change adds test to cover the for_role scope. Also removes a duplicated spec which is already covered in the shared examples. --- .../protected_ref_access_shared_examples.rb | 23 ++++++++++++++ ...protected_branch_access_shared_examples.rb | 30 ------------------- .../protected_ref_access_shared_examples.rb | 13 ++++++++ 3 files changed, 36 insertions(+), 30 deletions(-) diff --git a/ee/spec/support/shared_examples/models/concerns/protected_ref_access_shared_examples.rb b/ee/spec/support/shared_examples/models/concerns/protected_ref_access_shared_examples.rb index c54059fa42acb..e4a943ad835d0 100644 --- a/ee/spec/support/shared_examples/models/concerns/protected_ref_access_shared_examples.rb +++ b/ee/spec/support/shared_examples/models/concerns/protected_ref_access_shared_examples.rb @@ -235,6 +235,29 @@ end end + describe 'scopes' do + describe '::for_role' do + subject(:for_role) { described_class.for_role } + + let_it_be(:developer_access) { create(described_factory, :developer_access) } + let_it_be(:maintainer_access) { create(described_factory, :maintainer_access) } + let_it_be(:user_access) do + create(described_factory, protected_ref_name => protected_ref, user: create(:user, developer_of: project)) + end + + let_it_be(:group_access) do + group = create(:project_group_link, :developer, project: project).group + create(described_factory, protected_ref_name => protected_ref, group: group) + end + + it 'includes all role based access levels' do + expect(described_class.all).to contain_exactly(developer_access, maintainer_access, user_access, group_access) + + expect(for_role).to contain_exactly(developer_access, maintainer_access) + end + end + end + describe '#type' do using RSpec::Parameterized::TableSyntax diff --git a/spec/support/shared_examples/models/concerns/protected_branch_access_shared_examples.rb b/spec/support/shared_examples/models/concerns/protected_branch_access_shared_examples.rb index 6c6b4f8add6c4..4703ac6a33d4a 100644 --- a/spec/support/shared_examples/models/concerns/protected_branch_access_shared_examples.rb +++ b/spec/support/shared_examples/models/concerns/protected_branch_access_shared_examples.rb @@ -32,34 +32,4 @@ expect(protected_ref).to have_received(:group) end end - - context 'when current_project is nil' do - context "and protected_branch_group isn't nil" do - let_it_be(:group) { create(:group) } - let_it_be(:current_user) { create(:user) } - let_it_be(:protected_ref) { create(:protected_branch, project: nil, group: group) } - let_it_be(:access_level) { ::Gitlab::Access::DEVELOPER } - - using RSpec::Parameterized::TableSyntax - - where(:assign_access_level, :expected_check_access) do - :guest | false - :reporter | false - :developer | true - :maintainer | true - :owner | true - end - - with_them do - subject do - group.add_member(current_user, assign_access_level) - - described_class.new(protected_branch: protected_ref, access_level: access_level).check_access(current_user, - nil) - end - - it { is_expected.to eq(expected_check_access) } - end - end - end end diff --git a/spec/support/shared_examples/models/concerns/protected_ref_access_shared_examples.rb b/spec/support/shared_examples/models/concerns/protected_ref_access_shared_examples.rb index b87c59b4e39bd..6676fbf070e47 100644 --- a/spec/support/shared_examples/models/concerns/protected_ref_access_shared_examples.rb +++ b/spec/support/shared_examples/models/concerns/protected_ref_access_shared_examples.rb @@ -33,6 +33,19 @@ end end + describe 'scopes' do + describe '::for_role' do + subject(:for_role) { described_class.for_role } + + let_it_be(:developer_access) { create(described_factory, :developer_access) } + let_it_be(:maintainer_access) { create(described_factory, :maintainer_access) } + + it 'includes all role based access levels' do + expect(for_role).to contain_exactly(developer_access, maintainer_access) + end + end + end + describe '::human_access_levels' do subject { described_class.human_access_levels } -- GitLab