summaryrefslogtreecommitdiff
path: root/spec/models
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models')
-rw-r--r--spec/models/namespace_spec.rb48
-rw-r--r--spec/models/project_spec.rb47
2 files changed, 95 insertions, 0 deletions
diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb
index 60f0dd49ff3..93ad6008aec 100644
--- a/spec/models/namespace_spec.rb
+++ b/spec/models/namespace_spec.rb
@@ -954,4 +954,52 @@ describe Namespace do
expect(group.has_parent?).to be_falsy
end
end
+
+ describe '#closest_setting' do
+ using RSpec::Parameterized::TableSyntax
+
+ shared_examples_for 'fetching closest setting' do
+ let!(:root_namespace) { create(:namespace) }
+ let!(:namespace) { create(:namespace, parent: root_namespace) }
+
+ let(:setting) { namespace.closest_setting(setting_name) }
+
+ before do
+ root_namespace.update_attribute(setting_name, root_setting)
+ namespace.update_attribute(setting_name, child_setting)
+ end
+
+ it 'returns closest non-nil value' do
+ expect(setting).to eq(result)
+ end
+ end
+
+ context 'when setting is of non-boolean type' do
+ where(:root_setting, :child_setting, :result) do
+ 100 | 200 | 200
+ 100 | nil | 100
+ nil | nil | nil
+ end
+
+ with_them do
+ let(:setting_name) { :max_artifacts_size }
+
+ it_behaves_like 'fetching closest setting'
+ end
+ end
+
+ context 'when setting is of boolean type' do
+ where(:root_setting, :child_setting, :result) do
+ true | false | false
+ true | nil | true
+ nil | nil | nil
+ end
+
+ with_them do
+ let(:setting_name) { :lfs_enabled }
+
+ it_behaves_like 'fetching closest setting'
+ end
+ end
+ end
end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index c6d1a17c6cb..d9936a62191 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -5121,6 +5121,53 @@ describe Project do
end
end
+ describe '#closest_setting' do
+ using RSpec::Parameterized::TableSyntax
+
+ shared_examples_for 'fetching closest setting' do
+ let!(:namespace) { create(:namespace) }
+ let!(:project) { create(:project, namespace: namespace) }
+
+ let(:setting_name) { :some_setting }
+ let(:setting) { project.closest_setting(setting_name) }
+
+ before do
+ allow(project).to receive(:read_attribute).with(setting_name).and_return(project_setting)
+ allow(namespace).to receive(:closest_setting).with(setting_name).and_return(group_setting)
+ allow(Gitlab::CurrentSettings).to receive(setting_name).and_return(global_setting)
+ end
+
+ it 'returns closest non-nil value' do
+ expect(setting).to eq(result)
+ end
+ end
+
+ context 'when setting is of non-boolean type' do
+ where(:global_setting, :group_setting, :project_setting, :result) do
+ 100 | 200 | 300 | 300
+ 100 | 200 | nil | 200
+ 100 | nil | nil | 100
+ nil | nil | nil | nil
+ end
+
+ with_them do
+ it_behaves_like 'fetching closest setting'
+ end
+ end
+
+ context 'when setting is of boolean type' do
+ where(:global_setting, :group_setting, :project_setting, :result) do
+ true | true | false | false
+ true | false | nil | false
+ true | nil | nil | true
+ end
+
+ with_them do
+ it_behaves_like 'fetching closest setting'
+ end
+ end
+ end
+
def rugged_config
rugged_repo(project.repository).config
end