Move some application setting examples to be shared
This commit is contained in:
		
							parent
							
								
									7067806634
								
							
						
					
					
						commit
						7ce990b161
					
				|  | @ -1,85 +1,33 @@ | |||
| require 'spec_helper' | ||||
| 
 | ||||
| describe Gitlab::FakeApplicationSettings do | ||||
|   let(:defaults) { { password_authentication_enabled_for_web: false, foobar: 'asdf', signup_enabled: true, 'test?' => 123 } } | ||||
|   let(:defaults) do | ||||
|     described_class.defaults.merge( | ||||
|       foobar: 'asdf', | ||||
|       'test?' => 123 | ||||
|     ) | ||||
|   end | ||||
| 
 | ||||
|   subject { described_class.new(defaults) } | ||||
|   let(:setting) { described_class.new(defaults) } | ||||
| 
 | ||||
|   it 'wraps OpenStruct variables properly' do | ||||
|     expect(subject.password_authentication_enabled_for_web).to be_falsey | ||||
|     expect(subject.signup_enabled).to be_truthy | ||||
|     expect(subject.foobar).to eq('asdf') | ||||
|     expect(setting.password_authentication_enabled_for_web).to be_truthy | ||||
|     expect(setting.signup_enabled).to be_truthy | ||||
|     expect(setting.foobar).to eq('asdf') | ||||
|   end | ||||
| 
 | ||||
|   it 'defines predicate methods' do | ||||
|     expect(subject.password_authentication_enabled_for_web?).to be_falsey | ||||
|     expect(subject.signup_enabled?).to be_truthy | ||||
|   end | ||||
| 
 | ||||
|   it 'predicate method changes when value is updated' do | ||||
|     subject.password_authentication_enabled_for_web = true | ||||
| 
 | ||||
|     expect(subject.password_authentication_enabled_for_web?).to be_truthy | ||||
|     expect(setting.password_authentication_enabled_for_web?).to be_truthy | ||||
|     expect(setting.signup_enabled?).to be_truthy | ||||
|   end | ||||
| 
 | ||||
|   it 'does not define a predicate method' do | ||||
|     expect(subject.foobar?).to be_nil | ||||
|     expect(setting.foobar?).to be_nil | ||||
|   end | ||||
| 
 | ||||
|   it 'does not override an existing predicate method' do | ||||
|     expect(subject.test?).to eq(123) | ||||
|     expect(setting.test?).to eq(123) | ||||
|   end | ||||
| 
 | ||||
|   describe '#commit_email_hostname' do | ||||
|     context 'when the value is provided' do | ||||
|       let(:defaults) { { commit_email_hostname: 'localhost' } } | ||||
| 
 | ||||
|       it 'returns the provided value' do | ||||
|         expect(subject.commit_email_hostname).to eq('localhost') | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'when the value is not provided' do | ||||
|       it 'returns the default from the class' do | ||||
|         expect(subject.commit_email_hostname) | ||||
|           .to eq(described_class.default_commit_email_hostname) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '#usage_ping_enabled' do | ||||
|     context 'when usage ping can be configured' do | ||||
|       before do | ||||
|         allow(Settings.gitlab) | ||||
|           .to receive(:usage_ping_enabled).and_return(true) | ||||
|       end | ||||
| 
 | ||||
|       it 'returns the value provided' do | ||||
|         subject.usage_ping_enabled = true | ||||
| 
 | ||||
|         expect(subject.usage_ping_enabled).to eq(true) | ||||
| 
 | ||||
|         subject.usage_ping_enabled = false | ||||
| 
 | ||||
|         expect(subject.usage_ping_enabled).to eq(false) | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'when usage ping cannot be configured' do | ||||
|       before do | ||||
|         allow(Settings.gitlab) | ||||
|           .to receive(:usage_ping_enabled).and_return(false) | ||||
|       end | ||||
| 
 | ||||
|       it 'always returns false' do | ||||
|         subject.usage_ping_enabled = true | ||||
| 
 | ||||
|         expect(subject.usage_ping_enabled).to eq(false) | ||||
| 
 | ||||
|         subject.usage_ping_enabled = false | ||||
| 
 | ||||
|         expect(subject.usage_ping_enabled).to eq(false) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|   it_behaves_like 'application settings examples' | ||||
| end | ||||
|  |  | |||
|  | @ -117,14 +117,6 @@ describe ApplicationSetting do | |||
|       it { expect(setting.repository_storages).to eq(['default']) } | ||||
|     end | ||||
| 
 | ||||
|     context '#commit_email_hostname' do | ||||
|       it 'returns configured gitlab hostname if commit_email_hostname is not defined' do | ||||
|         setting.update(commit_email_hostname: nil) | ||||
| 
 | ||||
|         expect(setting.commit_email_hostname).to eq("users.noreply.#{Gitlab.config.gitlab.host}") | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'auto_devops_domain setting' do | ||||
|       context 'when auto_devops_enabled? is true' do | ||||
|         before do | ||||
|  | @ -182,15 +174,6 @@ describe ApplicationSetting do | |||
|         it { is_expected.not_to allow_value("").for(:repository_storages) } | ||||
|         it { is_expected.not_to allow_value(nil).for(:repository_storages) } | ||||
|       end | ||||
| 
 | ||||
|       describe '.pick_repository_storage' do | ||||
|         it 'uses Array#sample to pick a random storage' do | ||||
|           array = double('array', sample: 'random') | ||||
|           expect(setting).to receive(:repository_storages).and_return(array) | ||||
| 
 | ||||
|           expect(setting.pick_repository_storage).to eq('random') | ||||
|         end | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'housekeeping settings' do | ||||
|  | @ -367,65 +350,6 @@ describe ApplicationSetting do | |||
|     end | ||||
|   end | ||||
| 
 | ||||
|   context 'restricted signup domains' do | ||||
|     it 'sets single domain' do | ||||
|       setting.domain_whitelist_raw = 'example.com' | ||||
|       expect(setting.domain_whitelist).to eq(['example.com']) | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domains with spaces' do | ||||
|       setting.domain_whitelist_raw = 'example.com *.example.com' | ||||
|       expect(setting.domain_whitelist).to eq(['example.com', '*.example.com']) | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domains with newlines and a space' do | ||||
|       setting.domain_whitelist_raw = "example.com\n *.example.com" | ||||
|       expect(setting.domain_whitelist).to eq(['example.com', '*.example.com']) | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domains with commas' do | ||||
|       setting.domain_whitelist_raw = "example.com, *.example.com" | ||||
|       expect(setting.domain_whitelist).to eq(['example.com', '*.example.com']) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   context 'blacklisted signup domains' do | ||||
|     it 'sets single domain' do | ||||
|       setting.domain_blacklist_raw = 'example.com' | ||||
|       expect(setting.domain_blacklist).to contain_exactly('example.com') | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domains with spaces' do | ||||
|       setting.domain_blacklist_raw = 'example.com *.example.com' | ||||
|       expect(setting.domain_blacklist).to contain_exactly('example.com', '*.example.com') | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domains with newlines and a space' do | ||||
|       setting.domain_blacklist_raw = "example.com\n *.example.com" | ||||
|       expect(setting.domain_blacklist).to contain_exactly('example.com', '*.example.com') | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domains with commas' do | ||||
|       setting.domain_blacklist_raw = "example.com, *.example.com" | ||||
|       expect(setting.domain_blacklist).to contain_exactly('example.com', '*.example.com') | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domains with semicolon' do | ||||
|       setting.domain_blacklist_raw = "example.com; *.example.com" | ||||
|       expect(setting.domain_blacklist).to contain_exactly('example.com', '*.example.com') | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domains with mixture of everything' do | ||||
|       setting.domain_blacklist_raw = "example.com; *.example.com\n test.com\sblock.com   yes.com" | ||||
|       expect(setting.domain_blacklist).to contain_exactly('example.com', '*.example.com', 'test.com', 'block.com', 'yes.com') | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domain with file' do | ||||
|       setting.domain_blacklist_file = File.open(Rails.root.join('spec/fixtures/', 'domain_blacklist.txt')) | ||||
|       expect(setting.domain_blacklist).to contain_exactly('example.com', 'test.com', 'foo.bar') | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe 'performance bar settings' do | ||||
|     describe 'performance_bar_allowed_group' do | ||||
|       context 'with no performance_bar_allowed_group_id saved' do | ||||
|  | @ -462,142 +386,6 @@ describe ApplicationSetting do | |||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe 'usage ping settings' do | ||||
|     context 'when the usage ping is disabled in gitlab.yml' do | ||||
|       before do | ||||
|         allow(Settings.gitlab).to receive(:usage_ping_enabled).and_return(false) | ||||
|       end | ||||
| 
 | ||||
|       it 'does not allow the usage ping to be configured' do | ||||
|         expect(setting.usage_ping_can_be_configured?).to be_falsey | ||||
|       end | ||||
| 
 | ||||
|       context 'when the usage ping is disabled in the DB' do | ||||
|         before do | ||||
|           setting.usage_ping_enabled = false | ||||
|         end | ||||
| 
 | ||||
|         it 'returns false for usage_ping_enabled' do | ||||
|           expect(setting.usage_ping_enabled).to be_falsey | ||||
|         end | ||||
|       end | ||||
| 
 | ||||
|       context 'when the usage ping is enabled in the DB' do | ||||
|         before do | ||||
|           setting.usage_ping_enabled = true | ||||
|         end | ||||
| 
 | ||||
|         it 'returns false for usage_ping_enabled' do | ||||
|           expect(setting.usage_ping_enabled).to be_falsey | ||||
|         end | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'when the usage ping is enabled in gitlab.yml' do | ||||
|       before do | ||||
|         allow(Settings.gitlab).to receive(:usage_ping_enabled).and_return(true) | ||||
|       end | ||||
| 
 | ||||
|       it 'allows the usage ping to be configured' do | ||||
|         expect(setting.usage_ping_can_be_configured?).to be_truthy | ||||
|       end | ||||
| 
 | ||||
|       context 'when the usage ping is disabled in the DB' do | ||||
|         before do | ||||
|           setting.usage_ping_enabled = false | ||||
|         end | ||||
| 
 | ||||
|         it 'returns false for usage_ping_enabled' do | ||||
|           expect(setting.usage_ping_enabled).to be_falsey | ||||
|         end | ||||
|       end | ||||
| 
 | ||||
|       context 'when the usage ping is enabled in the DB' do | ||||
|         before do | ||||
|           setting.usage_ping_enabled = true | ||||
|         end | ||||
| 
 | ||||
|         it 'returns true for usage_ping_enabled' do | ||||
|           expect(setting.usage_ping_enabled).to be_truthy | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '#allowed_key_types' do | ||||
|     it 'includes all key types by default' do | ||||
|       expect(setting.allowed_key_types).to contain_exactly(*described_class::SUPPORTED_KEY_TYPES) | ||||
|     end | ||||
| 
 | ||||
|     it 'excludes disabled key types' do | ||||
|       expect(setting.allowed_key_types).to include(:ed25519) | ||||
| 
 | ||||
|       setting.ed25519_key_restriction = described_class::FORBIDDEN_KEY_VALUE | ||||
| 
 | ||||
|       expect(setting.allowed_key_types).not_to include(:ed25519) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '#key_restriction_for' do | ||||
|     it 'returns the restriction value for recognised types' do | ||||
|       setting.rsa_key_restriction = 1024 | ||||
| 
 | ||||
|       expect(setting.key_restriction_for(:rsa)).to eq(1024) | ||||
|     end | ||||
| 
 | ||||
|     it 'allows types to be passed as a string' do | ||||
|       setting.rsa_key_restriction = 1024 | ||||
| 
 | ||||
|       expect(setting.key_restriction_for('rsa')).to eq(1024) | ||||
|     end | ||||
| 
 | ||||
|     it 'returns forbidden for unrecognised type' do | ||||
|       expect(setting.key_restriction_for(:foo)).to eq(described_class::FORBIDDEN_KEY_VALUE) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '#allow_signup?' do | ||||
|     it 'returns true' do | ||||
|       expect(setting.allow_signup?).to be_truthy | ||||
|     end | ||||
| 
 | ||||
|     it 'returns false if signup is disabled' do | ||||
|       allow(setting).to receive(:signup_enabled?).and_return(false) | ||||
| 
 | ||||
|       expect(setting.allow_signup?).to be_falsey | ||||
|     end | ||||
| 
 | ||||
|     it 'returns false if password authentication is disabled for the web interface' do | ||||
|       allow(setting).to receive(:password_authentication_enabled_for_web?).and_return(false) | ||||
| 
 | ||||
|       expect(setting.allow_signup?).to be_falsey | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '#user_default_internal_regex_enabled?' do | ||||
|     using RSpec::Parameterized::TableSyntax | ||||
| 
 | ||||
|     where(:user_default_external, :user_default_internal_regex, :result) do | ||||
|       false | nil                        | false | ||||
|       false | ''                         | false | ||||
|       false | '^(?:(?!\.ext@).)*$\r?\n?' | false | ||||
|       true  | ''                         | false | ||||
|       true  | nil                        | false | ||||
|       true  | '^(?:(?!\.ext@).)*$\r?\n?' | true | ||||
|     end | ||||
| 
 | ||||
|     with_them do | ||||
|       before do | ||||
|         setting.update(user_default_external: user_default_external) | ||||
|         setting.update(user_default_internal_regex: user_default_internal_regex) | ||||
|       end | ||||
| 
 | ||||
|       subject { setting.user_default_internal_regex_enabled? } | ||||
| 
 | ||||
|       it { is_expected.to eq(result) } | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   context 'diff limit settings' do | ||||
|     describe '#diff_max_patch_bytes' do | ||||
|       context 'validations' do | ||||
|  | @ -613,23 +401,5 @@ describe ApplicationSetting do | |||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '#archive_builds_older_than' do | ||||
|     subject { setting.archive_builds_older_than } | ||||
| 
 | ||||
|     context 'when the archive_builds_in_seconds is set' do | ||||
|       before do | ||||
|         setting.archive_builds_in_seconds = 3600 | ||||
|       end | ||||
| 
 | ||||
|       it { is_expected.to be_within(1.minute).of(1.hour.ago) } | ||||
|     end | ||||
| 
 | ||||
|     context 'when the archive_builds_in_seconds is set' do | ||||
|       before do | ||||
|         setting.archive_builds_in_seconds = nil | ||||
|       end | ||||
| 
 | ||||
|       it { is_expected.to be_nil } | ||||
|     end | ||||
|   end | ||||
|   it_behaves_like 'application settings examples' | ||||
| end | ||||
|  |  | |||
|  | @ -0,0 +1,252 @@ | |||
| # frozen_string_literal: true | ||||
| 
 | ||||
| RSpec.shared_examples 'application settings examples' do | ||||
|   context 'restricted signup domains' do | ||||
|     it 'sets single domain' do | ||||
|       setting.domain_whitelist_raw = 'example.com' | ||||
|       expect(setting.domain_whitelist).to eq(['example.com']) | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domains with spaces' do | ||||
|       setting.domain_whitelist_raw = 'example.com *.example.com' | ||||
|       expect(setting.domain_whitelist).to eq(['example.com', '*.example.com']) | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domains with newlines and a space' do | ||||
|       setting.domain_whitelist_raw = "example.com\n *.example.com" | ||||
|       expect(setting.domain_whitelist).to eq(['example.com', '*.example.com']) | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domains with commas' do | ||||
|       setting.domain_whitelist_raw = "example.com, *.example.com" | ||||
|       expect(setting.domain_whitelist).to eq(['example.com', '*.example.com']) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   context 'blacklisted signup domains' do | ||||
|     it 'sets single domain' do | ||||
|       setting.domain_blacklist_raw = 'example.com' | ||||
|       expect(setting.domain_blacklist).to contain_exactly('example.com') | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domains with spaces' do | ||||
|       setting.domain_blacklist_raw = 'example.com *.example.com' | ||||
|       expect(setting.domain_blacklist).to contain_exactly('example.com', '*.example.com') | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domains with newlines and a space' do | ||||
|       setting.domain_blacklist_raw = "example.com\n *.example.com" | ||||
|       expect(setting.domain_blacklist).to contain_exactly('example.com', '*.example.com') | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domains with commas' do | ||||
|       setting.domain_blacklist_raw = "example.com, *.example.com" | ||||
|       expect(setting.domain_blacklist).to contain_exactly('example.com', '*.example.com') | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domains with semicolon' do | ||||
|       setting.domain_blacklist_raw = "example.com; *.example.com" | ||||
|       expect(setting.domain_blacklist).to contain_exactly('example.com', '*.example.com') | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domains with mixture of everything' do | ||||
|       setting.domain_blacklist_raw = "example.com; *.example.com\n test.com\sblock.com   yes.com" | ||||
|       expect(setting.domain_blacklist).to contain_exactly('example.com', '*.example.com', 'test.com', 'block.com', 'yes.com') | ||||
|     end | ||||
| 
 | ||||
|     it 'sets multiple domain with file' do | ||||
|       setting.domain_blacklist_file = File.open(Rails.root.join('spec/fixtures/', 'domain_blacklist.txt')) | ||||
|       expect(setting.domain_blacklist).to contain_exactly('example.com', 'test.com', 'foo.bar') | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe 'usage ping settings' do | ||||
|     context 'when the usage ping is disabled in gitlab.yml' do | ||||
|       before do | ||||
|         allow(Settings.gitlab).to receive(:usage_ping_enabled).and_return(false) | ||||
|       end | ||||
| 
 | ||||
|       it 'does not allow the usage ping to be configured' do | ||||
|         expect(setting.usage_ping_can_be_configured?).to be_falsey | ||||
|       end | ||||
| 
 | ||||
|       context 'when the usage ping is disabled in the DB' do | ||||
|         before do | ||||
|           setting.usage_ping_enabled = false | ||||
|         end | ||||
| 
 | ||||
|         it 'returns false for usage_ping_enabled' do | ||||
|           expect(setting.usage_ping_enabled).to be_falsey | ||||
|         end | ||||
|       end | ||||
| 
 | ||||
|       context 'when the usage ping is enabled in the DB' do | ||||
|         before do | ||||
|           setting.usage_ping_enabled = true | ||||
|         end | ||||
| 
 | ||||
|         it 'returns false for usage_ping_enabled' do | ||||
|           expect(setting.usage_ping_enabled).to be_falsey | ||||
|         end | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'when the usage ping is enabled in gitlab.yml' do | ||||
|       before do | ||||
|         allow(Settings.gitlab).to receive(:usage_ping_enabled).and_return(true) | ||||
|       end | ||||
| 
 | ||||
|       it 'allows the usage ping to be configured' do | ||||
|         expect(setting.usage_ping_can_be_configured?).to be_truthy | ||||
|       end | ||||
| 
 | ||||
|       context 'when the usage ping is disabled in the DB' do | ||||
|         before do | ||||
|           setting.usage_ping_enabled = false | ||||
|         end | ||||
| 
 | ||||
|         it 'returns false for usage_ping_enabled' do | ||||
|           expect(setting.usage_ping_enabled).to be_falsey | ||||
|         end | ||||
|       end | ||||
| 
 | ||||
|       context 'when the usage ping is enabled in the DB' do | ||||
|         before do | ||||
|           setting.usage_ping_enabled = true | ||||
|         end | ||||
| 
 | ||||
|         it 'returns true for usage_ping_enabled' do | ||||
|           expect(setting.usage_ping_enabled).to be_truthy | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '#allowed_key_types' do | ||||
|     it 'includes all key types by default' do | ||||
|       expect(setting.allowed_key_types).to contain_exactly(*described_class::SUPPORTED_KEY_TYPES) | ||||
|     end | ||||
| 
 | ||||
|     it 'excludes disabled key types' do | ||||
|       expect(setting.allowed_key_types).to include(:ed25519) | ||||
| 
 | ||||
|       setting.ed25519_key_restriction = described_class::FORBIDDEN_KEY_VALUE | ||||
| 
 | ||||
|       expect(setting.allowed_key_types).not_to include(:ed25519) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '#key_restriction_for' do | ||||
|     it 'returns the restriction value for recognised types' do | ||||
|       setting.rsa_key_restriction = 1024 | ||||
| 
 | ||||
|       expect(setting.key_restriction_for(:rsa)).to eq(1024) | ||||
|     end | ||||
| 
 | ||||
|     it 'allows types to be passed as a string' do | ||||
|       setting.rsa_key_restriction = 1024 | ||||
| 
 | ||||
|       expect(setting.key_restriction_for('rsa')).to eq(1024) | ||||
|     end | ||||
| 
 | ||||
|     it 'returns forbidden for unrecognised type' do | ||||
|       expect(setting.key_restriction_for(:foo)).to eq(described_class::FORBIDDEN_KEY_VALUE) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '#allow_signup?' do | ||||
|     it 'returns true' do | ||||
|       expect(setting.allow_signup?).to be_truthy | ||||
|     end | ||||
| 
 | ||||
|     it 'returns false if signup is disabled' do | ||||
|       allow(setting).to receive(:signup_enabled?).and_return(false) | ||||
| 
 | ||||
|       expect(setting.allow_signup?).to be_falsey | ||||
|     end | ||||
| 
 | ||||
|     it 'returns false if password authentication is disabled for the web interface' do | ||||
|       allow(setting).to receive(:password_authentication_enabled_for_web?).and_return(false) | ||||
| 
 | ||||
|       expect(setting.allow_signup?).to be_falsey | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '#pick_repository_storage' do | ||||
|     it 'uses Array#sample to pick a random storage' do | ||||
|       array = double('array', sample: 'random') | ||||
|       expect(setting).to receive(:repository_storages).and_return(array) | ||||
| 
 | ||||
|       expect(setting.pick_repository_storage).to eq('random') | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '#user_default_internal_regex_enabled?' do | ||||
|     using RSpec::Parameterized::TableSyntax | ||||
| 
 | ||||
|     where(:user_default_external, :user_default_internal_regex, :result) do | ||||
|       false | nil                        | false | ||||
|       false | ''                         | false | ||||
|       false | '^(?:(?!\.ext@).)*$\r?\n?' | false | ||||
|       true  | ''                         | false | ||||
|       true  | nil                        | false | ||||
|       true  | '^(?:(?!\.ext@).)*$\r?\n?' | true | ||||
|     end | ||||
| 
 | ||||
|     with_them do | ||||
|       before do | ||||
|         setting.user_default_external = user_default_external | ||||
|         setting.user_default_internal_regex = user_default_internal_regex | ||||
|       end | ||||
| 
 | ||||
|       subject { setting.user_default_internal_regex_enabled? } | ||||
| 
 | ||||
|       it { is_expected.to eq(result) } | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '#archive_builds_older_than' do | ||||
|     subject { setting.archive_builds_older_than } | ||||
| 
 | ||||
|     context 'when the archive_builds_in_seconds is set' do | ||||
|       before do | ||||
|         setting.archive_builds_in_seconds = 3600 | ||||
|       end | ||||
| 
 | ||||
|       it { is_expected.to be_within(1.minute).of(1.hour.ago) } | ||||
|     end | ||||
| 
 | ||||
|     context 'when the archive_builds_in_seconds is set' do | ||||
|       before do | ||||
|         setting.archive_builds_in_seconds = nil | ||||
|       end | ||||
| 
 | ||||
|       it { is_expected.to be_nil } | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '#commit_email_hostname' do | ||||
|     context 'when the value is provided' do | ||||
|       before do | ||||
|         setting.commit_email_hostname = 'localhost' | ||||
|       end | ||||
| 
 | ||||
|       it 'returns the provided value' do | ||||
|         expect(setting.commit_email_hostname).to eq('localhost') | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'when the value is not provided' do | ||||
|       it 'returns the default from the class' do | ||||
|         expect(setting.commit_email_hostname) | ||||
|           .to eq(described_class.default_commit_email_hostname) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   it 'predicate method changes when value is updated' do | ||||
|     setting.password_authentication_enabled_for_web = false | ||||
| 
 | ||||
|     expect(setting.password_authentication_enabled_for_web?).to be_falsey | ||||
|   end | ||||
| end | ||||
		Loading…
	
		Reference in New Issue