summaryrefslogtreecommitdiff
path: root/spec/services
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-10-27 10:15:59 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-10-27 10:16:27 +0000
commiteff560cfb9a337623d25b912d9bb233fae25fbf1 (patch)
treedd96ba1b42ddc1cdc588c0ff4096a4d47d0b5e0d /spec/services
parent14b92217e768aa4f3ce2d8b30f2c2acbdfdd8f6a (diff)
downloadgitlab-ce-eff560cfb9a337623d25b912d9bb233fae25fbf1.tar.gz
Add latest changes from gitlab-org/security/gitlab@14-4-stable-ee
Diffstat (limited to 'spec/services')
-rw-r--r--spec/services/groups/transfer_service_spec.rb55
1 files changed, 54 insertions, 1 deletions
diff --git a/spec/services/groups/transfer_service_spec.rb b/spec/services/groups/transfer_service_spec.rb
index ee38c0fbb44..8b506d2bc2c 100644
--- a/spec/services/groups/transfer_service_spec.rb
+++ b/spec/services/groups/transfer_service_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Groups::TransferService do
+RSpec.describe Groups::TransferService, :sidekiq_inline do
shared_examples 'project namespace path is in sync with project path' do
it 'keeps project and project namespace attributes in sync' do
projects_with_project_namespace.each do |project|
@@ -653,6 +653,59 @@ RSpec.describe Groups::TransferService do
transfer_service.execute(new_parent_group)
end
end
+
+ context 'transferring groups with shared_projects' do
+ let_it_be_with_reload(:shared_project) { create(:project, :public) }
+
+ shared_examples_for 'drops the authorizations of ancestor members from the old hierarchy' do
+ it 'drops the authorizations of ancestor members from the old hierarchy' do
+ expect { transfer_service.execute(new_parent_group) }.to change {
+ ProjectAuthorization.where(project: shared_project, user: old_group_member).size
+ }.from(1).to(0)
+ end
+ end
+
+ context 'when the group that has existing project share is transferred' do
+ before do
+ create(:project_group_link, :maintainer, project: shared_project, group: group)
+ end
+
+ it_behaves_like 'drops the authorizations of ancestor members from the old hierarchy'
+ end
+
+ context 'when the group whose subgroup has an existing project share is transferred' do
+ let_it_be_with_reload(:subgroup) { create(:group, :private, parent: group) }
+
+ before do
+ create(:project_group_link, :maintainer, project: shared_project, group: subgroup)
+ end
+
+ it_behaves_like 'drops the authorizations of ancestor members from the old hierarchy'
+ end
+ end
+
+ context 'when a group that has existing group share is transferred' do
+ let(:shared_with_group) { group }
+
+ let_it_be(:member_of_shared_with_group) { create(:user) }
+ let_it_be(:shared_group) { create(:group, :private) }
+ let_it_be(:project_in_shared_group) { create(:project, namespace: shared_group) }
+
+ before do
+ shared_with_group.add_developer(member_of_shared_with_group)
+ create(:group_group_link, :maintainer, shared_group: shared_group, shared_with_group: shared_with_group)
+ shared_with_group.refresh_members_authorized_projects
+ end
+
+ it 'retains the authorizations of direct members' do
+ expect { transfer_service.execute(new_parent_group) }.not_to change {
+ ProjectAuthorization.where(
+ project: project_in_shared_group,
+ user: member_of_shared_with_group,
+ access_level: Gitlab::Access::DEVELOPER).size
+ }.from(1)
+ end
+ end
end
end