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