mirror of
https://github.com/discourse/discourse.git
synced 2025-05-21 18:12:32 +08:00
FEATURE: Site settings defaults per locale
This change-set allows setting different defaults for different locales. It also: - Adds extensive testing around site setting validation - raises deprecation error if site setting has the default property based on env - relocated site settings for dev and tests in the initializer - deprecated client_setting in the site setting's loading process - ensure it raises when a enum site setting being set - default_locale is promoted to `required` category. - fixes incorrect default setting and validation - fixes ensure type check for site settings - creates a benchmark for site setting - sets reasonable defaults for Chinese
This commit is contained in:
@ -64,7 +64,7 @@ describe SiteSettingExtension do
|
||||
expect(settings.hello).to eq(99)
|
||||
end
|
||||
|
||||
it "Publishes changes cross sites" do
|
||||
it "publishes changes cross sites" do
|
||||
settings.setting(:hello, 1)
|
||||
settings2.setting(:hello, 1)
|
||||
|
||||
@ -143,7 +143,7 @@ describe SiteSettingExtension do
|
||||
|
||||
it "should publish changes to clients" do
|
||||
settings.setting("test_setting", 100)
|
||||
settings.client_setting("test_setting")
|
||||
settings.setting("test_setting", nil, client: true)
|
||||
|
||||
messages = MessageBus.track_publish do
|
||||
settings.test_setting = 88
|
||||
@ -155,8 +155,11 @@ describe SiteSettingExtension do
|
||||
end
|
||||
|
||||
describe "remove_override" do
|
||||
it "correctly nukes overrides" do
|
||||
before do
|
||||
settings.setting(:test_override, "test")
|
||||
settings.refresh!
|
||||
end
|
||||
it "correctly nukes overrides" do
|
||||
settings.test_override = "bla"
|
||||
settings.remove_override!(:test_override)
|
||||
expect(settings.test_override).to eq("test")
|
||||
@ -263,6 +266,7 @@ describe SiteSettingExtension do
|
||||
settings.setting(:test_int_enum, 1, enum: TestIntEnumClass)
|
||||
settings.test_int_enum = "2"
|
||||
settings.refresh!
|
||||
expect(settings.defaults[:test_int_enum]).to eq(1)
|
||||
expect(settings.test_int_enum).to eq(2)
|
||||
end
|
||||
|
||||
@ -272,7 +276,7 @@ describe SiteSettingExtension do
|
||||
|
||||
class TestEnumClass
|
||||
def self.valid_value?(v)
|
||||
true
|
||||
self.values.include?(v)
|
||||
end
|
||||
def self.values
|
||||
['en']
|
||||
@ -299,6 +303,10 @@ describe SiteSettingExtension do
|
||||
expect(settings.all_settings.detect { |s| s[:setting] == :test_enum }).to be_present
|
||||
end
|
||||
|
||||
it 'should report error when being set other values' do
|
||||
expect { settings.test_enum = 'not_in_enum' }.to raise_error(Discourse::InvalidParameters)
|
||||
end
|
||||
|
||||
context 'when overridden' do
|
||||
after :each do
|
||||
settings.remove_override!(:validated_setting)
|
||||
@ -384,6 +392,14 @@ describe SiteSettingExtension do
|
||||
end
|
||||
end
|
||||
|
||||
describe ".set_and_log" do
|
||||
it "raises an error when set for an invalid setting name" do
|
||||
expect {
|
||||
settings.set_and_log("provider", "haxxed")
|
||||
}.to raise_error(ArgumentError)
|
||||
end
|
||||
end
|
||||
|
||||
describe "filter domain name" do
|
||||
before do
|
||||
settings.setting(:white_listed_spam_host_domains, "www.example.com")
|
||||
@ -503,4 +519,62 @@ describe SiteSettingExtension do
|
||||
end
|
||||
end
|
||||
|
||||
describe 'locale default overrides are respected' do
|
||||
before do
|
||||
settings.setting(:test_override, 'default', locale_default: { zh_CN: 'cn' })
|
||||
settings.refresh!
|
||||
end
|
||||
|
||||
after do
|
||||
settings.remove_override!(:test_override)
|
||||
end
|
||||
|
||||
it 'ensures the default cache expired after overriding the default_locale' do
|
||||
expect(settings.test_override).to eq('default')
|
||||
settings.default_locale = 'zh_CN'
|
||||
expect(settings.test_override).to eq('cn')
|
||||
end
|
||||
|
||||
it 'returns the saved setting even locale default exists' do
|
||||
expect(settings.test_override).to eq('default')
|
||||
settings.default_locale = 'zh_CN'
|
||||
settings.test_override = 'saved'
|
||||
expect(settings.test_override).to eq('saved')
|
||||
end
|
||||
end
|
||||
|
||||
describe '.requires_refresh?' do
|
||||
it 'always refresh default_locale always require refresh' do
|
||||
expect(settings.requires_refresh?(:default_locale)).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
describe '.default_locale' do
|
||||
it 'is always loaded' do
|
||||
expect(settings.default_locale).to eq 'en'
|
||||
end
|
||||
end
|
||||
|
||||
describe '.default_locale=' do
|
||||
it 'can be changed' do
|
||||
settings.default_locale = 'zh_CN'
|
||||
expect(settings.default_locale).to eq 'zh_CN'
|
||||
end
|
||||
|
||||
it 'refresh!' do
|
||||
settings.expects(:refresh!)
|
||||
settings.default_locale = 'zh_CN'
|
||||
end
|
||||
|
||||
it 'expires the cache' do
|
||||
settings.default_locale = 'zh_CN'
|
||||
expect(Rails.cache.exist?(SiteSettingExtension.client_settings_cache_key)).to be_falsey
|
||||
end
|
||||
|
||||
it 'refreshes the client' do
|
||||
Discourse.expects(:request_refresh!)
|
||||
settings.default_locale = 'zh_CN'
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
Reference in New Issue
Block a user