From 191c0c2ef622cce66aac14abaac31693a2e14adb Mon Sep 17 00:00:00 2001 From: Ruby Nealon <rnealon@gitlab.com> Date: Thu, 30 Nov 2023 14:01:38 +0000 Subject: [PATCH] Fix scope of project visibility checks when changing group visibility Changelog: fixed --- app/models/group.rb | 2 +- spec/models/group_spec.rb | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/models/group.rb b/app/models/group.rb index 215d6624fd342..e1c8830691752 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -406,7 +406,7 @@ def visibility_level_allowed_by_parent?(level = self.visibility_level) end def visibility_level_allowed_by_projects?(level = self.visibility_level) - !projects.without_deleted.where('visibility_level > ?', level).exists? + !projects.not_aimed_for_deletion.where('visibility_level > ?', level).exists? end def visibility_level_allowed_by_sub_groups?(level = self.visibility_level) diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb index 0236ae9dc9e8d..279d4bc194e29 100644 --- a/spec/models/group_spec.rb +++ b/spec/models/group_spec.rb @@ -391,12 +391,19 @@ expect(internal_group.errors[:visibility_level]).to include('private is not allowed since this group contains projects with higher visibility.') end - it 'is valid if higher visibility project is deleted' do + it 'is valid if higher visibility project is currently undergoing deletion' do internal_project.update_attribute(:pending_delete, true) internal_group.visibility_level = Gitlab::VisibilityLevel::PRIVATE expect(internal_group).to be_valid end + + it 'is valid if higher visibility project is pending deletion via marked_for_deletion_at' do + internal_project.update_attribute(:marked_for_deletion_at, Time.current) + internal_group.visibility_level = Gitlab::VisibilityLevel::PRIVATE + + expect(internal_group).to be_valid + end end context 'when group has a higher visibility' do -- GitLab