Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
7ce990b1
Commit
7ce990b1
authored
Mar 14, 2019
by
Lin Jen-Shin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move some application setting examples to be shared
parent
70678066
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
268 additions
and
298 deletions
+268
-298
spec/lib/gitlab/fake_application_settings_spec.rb
spec/lib/gitlab/fake_application_settings_spec.rb
+15
-67
spec/models/application_setting_spec.rb
spec/models/application_setting_spec.rb
+1
-231
spec/support/shared_examples/application_setting_examples.rb
spec/support/shared_examples/application_setting_examples.rb
+252
-0
No files found.
spec/lib/gitlab/fake_application_settings_spec.rb
View file @
7ce990b1
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
(
s
ubject
.
password_authentication_enabled_for_web
).
to
be_false
y
expect
(
s
ubject
.
signup_enabled
).
to
be_truthy
expect
(
s
ubject
.
foobar
).
to
eq
(
'asdf'
)
expect
(
s
etting
.
password_authentication_enabled_for_web
).
to
be_truth
y
expect
(
s
etting
.
signup_enabled
).
to
be_truthy
expect
(
s
etting
.
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
(
s
ubject
.
foobar?
).
to
be_nil
expect
(
s
etting
.
foobar?
).
to
be_nil
end
it
'does not override an existing predicate method'
do
expect
(
s
ubject
.
test?
).
to
eq
(
123
)
expect
(
s
etting
.
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
spec/models/application_setting_spec.rb
View file @
7ce990b1
...
...
@@ -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
\s
block.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
spec/support/shared_examples/application_setting_examples.rb
0 → 100644
View file @
7ce990b1
# 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
\s
block.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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment