diff --git a/app/models/group.rb b/app/models/group.rb index 215d6624fd3421d2b69ef3f8fb2c04ed2aea479f..e1c883069175227dcabf2246134efe1cc5b2c5e2 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 0236ae9dc9e8d467dfbfe6268f8cf95c1a15622e..279d4bc194e29ac0e7c5afbc07ee67ec4ecd2c26 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