Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/group_spec.rb')
-rw-r--r--spec/models/group_spec.rb229
1 files changed, 228 insertions, 1 deletions
diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb
index 93cb6d83489..4184f2d07cc 100644
--- a/spec/models/group_spec.rb
+++ b/spec/models/group_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Group do
+RSpec.describe Group do
let!(:group) { create(:group) }
describe 'associations' do
@@ -1313,4 +1313,231 @@ describe Group do
expect(groups).to contain_exactly(parent_group1, parent_group2, child_group1, child_group2, child_group3)
end
end
+
+ describe '#shared_runners_allowed?' do
+ using RSpec::Parameterized::TableSyntax
+
+ where(:shared_runners_enabled, :allow_descendants_override, :expected_shared_runners_allowed) do
+ true | false | true
+ true | true | true
+ false | false | false
+ false | true | true
+ end
+
+ with_them do
+ let!(:group) { create(:group, shared_runners_enabled: shared_runners_enabled, allow_descendants_override_disabled_shared_runners: allow_descendants_override) }
+
+ it 'returns the expected result' do
+ expect(group.shared_runners_allowed?).to eq(expected_shared_runners_allowed)
+ end
+ end
+ end
+
+ describe '#parent_allows_shared_runners?' do
+ context 'when parent group is present' do
+ using RSpec::Parameterized::TableSyntax
+
+ where(:shared_runners_enabled, :allow_descendants_override, :expected_shared_runners_allowed) do
+ true | false | true
+ true | true | true
+ false | false | false
+ false | true | true
+ end
+
+ with_them do
+ let!(:parent_group) { create(:group, shared_runners_enabled: shared_runners_enabled, allow_descendants_override_disabled_shared_runners: allow_descendants_override) }
+ let!(:group) { create(:group, parent: parent_group) }
+
+ it 'returns the expected result' do
+ expect(group.parent_allows_shared_runners?).to eq(expected_shared_runners_allowed)
+ end
+ end
+ end
+
+ context 'when parent group is missing' do
+ let!(:group) { create(:group) }
+
+ it 'returns true' do
+ expect(group.parent_allows_shared_runners?).to be_truthy
+ end
+ end
+ end
+
+ describe '#parent_enabled_shared_runners?' do
+ subject { group.parent_enabled_shared_runners? }
+
+ context 'when parent group is present' do
+ context 'When shared Runners are disabled' do
+ let!(:parent_group) { create(:group, :shared_runners_disabled) }
+ let!(:group) { create(:group, parent: parent_group) }
+
+ it { is_expected.to be_falsy }
+ end
+
+ context 'When shared Runners are enabled' do
+ let!(:parent_group) { create(:group) }
+ let!(:group) { create(:group, parent: parent_group) }
+
+ it { is_expected.to be_truthy }
+ end
+ end
+
+ context 'when parent group is missing' do
+ let!(:group) { create(:group) }
+
+ it { is_expected.to be_truthy }
+ end
+ end
+
+ describe '#enable_shared_runners!' do
+ subject { group.enable_shared_runners! }
+
+ context 'group that its ancestors have shared runners disabled' do
+ let_it_be(:parent) { create(:group, :shared_runners_disabled) }
+ let_it_be(:group) { create(:group, :shared_runners_disabled, parent: parent) }
+ let_it_be(:project) { create(:project, shared_runners_enabled: false, group: group) }
+
+ it 'raises error and does not enable shared Runners' do
+ expect { subject }
+ .to raise_error(described_class::UpdateSharedRunnersError, 'Shared Runners disabled for the parent group')
+ .and not_change { parent.reload.shared_runners_enabled }
+ .and not_change { group.reload.shared_runners_enabled }
+ .and not_change { project.reload.shared_runners_enabled }
+ end
+ end
+
+ context 'root group with shared runners disabled' do
+ let_it_be(:group) { create(:group, :shared_runners_disabled) }
+ let_it_be(:sub_group) { create(:group, :shared_runners_disabled, parent: group) }
+ let_it_be(:project) { create(:project, shared_runners_enabled: false, group: sub_group) }
+
+ it 'enables shared Runners only for itself' do
+ expect { subject }
+ .to change { group.reload.shared_runners_enabled }.from(false).to(true)
+ .and not_change { sub_group.reload.shared_runners_enabled }
+ .and not_change { project.reload.shared_runners_enabled }
+ end
+ end
+ end
+
+ describe '#disable_shared_runners!' do
+ let_it_be(:group) { create(:group) }
+ let_it_be(:sub_group) { create(:group, :shared_runners_disabled, :allow_descendants_override_disabled_shared_runners, parent: group) }
+ let_it_be(:sub_group_2) { create(:group, parent: group) }
+ let_it_be(:project) { create(:project, group: group, shared_runners_enabled: true) }
+ let_it_be(:project_2) { create(:project, group: sub_group_2, shared_runners_enabled: true) }
+
+ subject { group.disable_shared_runners! }
+
+ it 'disables shared Runners for all descendant groups and projects' do
+ expect { subject }
+ .to change { group.reload.shared_runners_enabled }.from(true).to(false)
+ .and not_change { group.reload.allow_descendants_override_disabled_shared_runners }
+ .and not_change { sub_group.reload.shared_runners_enabled }
+ .and not_change { sub_group.reload.allow_descendants_override_disabled_shared_runners }
+ .and change { sub_group_2.reload.shared_runners_enabled }.from(true).to(false)
+ .and not_change { sub_group_2.reload.allow_descendants_override_disabled_shared_runners }
+ .and change { project.reload.shared_runners_enabled }.from(true).to(false)
+ .and change { project_2.reload.shared_runners_enabled }.from(true).to(false)
+ end
+ end
+
+ describe '#allow_descendants_override_disabled_shared_runners!' do
+ subject { group.allow_descendants_override_disabled_shared_runners! }
+
+ context 'top level group' do
+ let_it_be(:group) { create(:group, :shared_runners_disabled) }
+ let_it_be(:sub_group) { create(:group, :shared_runners_disabled, parent: group) }
+ let_it_be(:project) { create(:project, shared_runners_enabled: false, group: sub_group) }
+
+ it 'enables allow descendants to override only for itself' do
+ expect { subject }
+ .to change { group.reload.allow_descendants_override_disabled_shared_runners }.from(false).to(true)
+ .and not_change { group.reload.shared_runners_enabled }
+ .and not_change { sub_group.reload.allow_descendants_override_disabled_shared_runners }
+ .and not_change { sub_group.reload.shared_runners_enabled }
+ .and not_change { project.reload.shared_runners_enabled }
+ end
+ end
+
+ context 'group that its ancestors have shared Runners disabled but allows to override' do
+ let_it_be(:parent) { create(:group, :shared_runners_disabled, :allow_descendants_override_disabled_shared_runners) }
+ let_it_be(:group) { create(:group, :shared_runners_disabled, parent: parent) }
+ let_it_be(:project) { create(:project, shared_runners_enabled: false, group: group) }
+
+ it 'enables allow descendants to override' do
+ expect { subject }
+ .to not_change { parent.reload.allow_descendants_override_disabled_shared_runners }
+ .and not_change { parent.reload.shared_runners_enabled }
+ .and change { group.reload.allow_descendants_override_disabled_shared_runners }.from(false).to(true)
+ .and not_change { group.reload.shared_runners_enabled }
+ .and not_change { project.reload.shared_runners_enabled }
+ end
+ end
+
+ context 'when parent does not allow' do
+ let_it_be(:parent) { create(:group, :shared_runners_disabled, allow_descendants_override_disabled_shared_runners: false ) }
+ let_it_be(:group) { create(:group, :shared_runners_disabled, allow_descendants_override_disabled_shared_runners: false, parent: parent) }
+
+ it 'raises error and does not allow descendants to override' do
+ expect { subject }
+ .to raise_error(described_class::UpdateSharedRunnersError, 'Group level shared Runners not allowed')
+ .and not_change { parent.reload.allow_descendants_override_disabled_shared_runners }
+ .and not_change { parent.reload.shared_runners_enabled }
+ .and not_change { group.reload.allow_descendants_override_disabled_shared_runners }
+ .and not_change { group.reload.shared_runners_enabled }
+ end
+ end
+
+ context 'top level group that has shared Runners enabled' do
+ let_it_be(:group) { create(:group, shared_runners_enabled: true) }
+ let_it_be(:sub_group) { create(:group, :shared_runners_disabled, parent: group) }
+ let_it_be(:project) { create(:project, shared_runners_enabled: false, group: sub_group) }
+
+ it 'raises error and does not change config' do
+ expect { subject }
+ .to raise_error(described_class::UpdateSharedRunnersError, 'Shared Runners enabled')
+ .and not_change { group.reload.allow_descendants_override_disabled_shared_runners }
+ .and not_change { group.reload.shared_runners_enabled }
+ .and not_change { sub_group.reload.allow_descendants_override_disabled_shared_runners }
+ .and not_change { sub_group.reload.shared_runners_enabled }
+ .and not_change { project.reload.shared_runners_enabled }
+ end
+ end
+ end
+
+ describe '#disallow_descendants_override_disabled_shared_runners!' do
+ subject { group.disallow_descendants_override_disabled_shared_runners! }
+
+ context 'top level group' do
+ let_it_be(:group) { create(:group, :shared_runners_disabled, :allow_descendants_override_disabled_shared_runners ) }
+ let_it_be(:sub_group) { create(:group, :shared_runners_disabled, :allow_descendants_override_disabled_shared_runners, parent: group) }
+ let_it_be(:project) { create(:project, shared_runners_enabled: true, group: sub_group) }
+
+ it 'disables allow project to override for descendants and disables project shared Runners' do
+ expect { subject }
+ .to not_change { group.reload.shared_runners_enabled }
+ .and change { group.reload.allow_descendants_override_disabled_shared_runners }.from(true).to(false)
+ .and not_change { sub_group.reload.shared_runners_enabled }
+ .and change { sub_group.reload.allow_descendants_override_disabled_shared_runners }.from(true).to(false)
+ .and change { project.reload.shared_runners_enabled }.from(true).to(false)
+ end
+ end
+
+ context 'top level group that has shared Runners enabled' do
+ let_it_be(:group) { create(:group, shared_runners_enabled: true) }
+ let_it_be(:sub_group) { create(:group, :shared_runners_disabled, parent: group) }
+ let_it_be(:project) { create(:project, shared_runners_enabled: false, group: sub_group) }
+
+ it 'results error and does not change config' do
+ expect { subject }
+ .to raise_error(described_class::UpdateSharedRunnersError, 'Shared Runners enabled')
+ .and not_change { group.reload.allow_descendants_override_disabled_shared_runners }
+ .and not_change { group.reload.shared_runners_enabled }
+ .and not_change { sub_group.reload.allow_descendants_override_disabled_shared_runners }
+ .and not_change { sub_group.reload.shared_runners_enabled }
+ .and not_change { project.reload.shared_runners_enabled }
+ end
+ end
+ end
end