mirror of
https://github.com/discourse/discourse.git
synced 2025-02-17 00:22:45 +08:00
Introduce multisite tests for better coverage.
This commit is contained in:
parent
9a0eb2eeb1
commit
2c39743d5d
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -36,6 +36,7 @@ config/discourse.conf
|
||||||
*.sql.gz
|
*.sql.gz
|
||||||
/db/*.sqlite3
|
/db/*.sqlite3
|
||||||
/db/structure.sql
|
/db/structure.sql
|
||||||
|
/db/schema.rb
|
||||||
|
|
||||||
# Ignore all logfiles and tempfiles.
|
# Ignore all logfiles and tempfiles.
|
||||||
/log/*.log
|
/log/*.log
|
||||||
|
|
|
@ -18,7 +18,7 @@ development:
|
||||||
test:
|
test:
|
||||||
prepared_statements: false
|
prepared_statements: false
|
||||||
adapter: postgresql
|
adapter: postgresql
|
||||||
database: discourse_test
|
database: discourse_test<%= ENV['MULTISITE'] ? "_#{ENV['MULTISITE']}" : '' %>
|
||||||
min_messages: warning
|
min_messages: warning
|
||||||
pool: 5
|
pool: 5
|
||||||
timeout: 5000
|
timeout: 5000
|
||||||
|
|
|
@ -53,6 +53,7 @@ class SiteSettings::DefaultsProvider
|
||||||
@defaults.each { |_, hash| hash.delete(name) }
|
@defaults.each { |_, hash| hash.delete(name) }
|
||||||
@defaults[DEFAULT_LOCALE.to_sym][name] = value
|
@defaults[DEFAULT_LOCALE.to_sym][name] = value
|
||||||
value, type = @site_setting.type_supervisor.to_db_value(name, value)
|
value, type = @site_setting.type_supervisor.to_db_value(name, value)
|
||||||
|
@defaults[self.site_locale.to_sym] ||= {}
|
||||||
@defaults[self.site_locale.to_sym][name] = @site_setting.type_supervisor.to_rb_value(name, value, type)
|
@defaults[self.site_locale.to_sym][name] = @site_setting.type_supervisor.to_rb_value(name, value, type)
|
||||||
else
|
else
|
||||||
raise ArgumentError.new("No setting named '#{name}' exists")
|
raise ArgumentError.new("No setting named '#{name}' exists")
|
||||||
|
|
|
@ -3,10 +3,28 @@ task 'set_locale' do
|
||||||
I18n.locale = (SiteSetting.default_locale || :en) rescue :en
|
I18n.locale = (SiteSetting.default_locale || :en) rescue :en
|
||||||
end
|
end
|
||||||
|
|
||||||
|
task 'db:create', [:multisite] => [:load_config] do |_, args|
|
||||||
|
if Rails.env.test? && !args[:multisite]
|
||||||
|
system("MULTISITE=multisite rake db:create['true']")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
task 'db:drop', [:multisite] => [:load_config] do |_, args|
|
||||||
|
if Rails.env.test? && !args[:multisite]
|
||||||
|
system("MULTISITE=multisite rake db:drop['true']")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# we need to run seed_fu every time we run rake db:migrate
|
# we need to run seed_fu every time we run rake db:migrate
|
||||||
task 'db:migrate' => ['environment', 'set_locale'] do
|
task 'db:migrate', [:multisite] => ['environment', 'set_locale'] do |_, args|
|
||||||
SeedFu.seed
|
SeedFu.seed
|
||||||
Jobs::Onceoff.enqueue_all
|
Jobs::Onceoff.enqueue_all
|
||||||
|
|
||||||
|
if Rails.env.test? && !args[:multisite]
|
||||||
|
system("rake db:schema:dump")
|
||||||
|
system("MULTISITE=multisite rake db:schema:load")
|
||||||
|
system("MULTISITE=multisite rake db:migrate['multisite']")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
task 'test:prepare' => 'environment' do
|
task 'test:prepare' => 'environment' do
|
||||||
|
|
5
spec/fixtures/multisite/two_dbs.yml
vendored
Normal file
5
spec/fixtures/multisite/two_dbs.yml
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
second:
|
||||||
|
adapter: postgresql
|
||||||
|
database: discourse_test_multisite
|
||||||
|
host_names:
|
||||||
|
- test2.localhost
|
52
spec/multisite/site_settings_spec.rb
Normal file
52
spec/multisite/site_settings_spec.rb
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe 'Multisite SiteSettings' do
|
||||||
|
let(:conn) { RailsMultisite::ConnectionManagement }
|
||||||
|
|
||||||
|
before do
|
||||||
|
@original_provider = SiteSetting.provider
|
||||||
|
SiteSetting.provider = SiteSettings::DbProvider.new(SiteSetting)
|
||||||
|
conn.config_filename = "spec/fixtures/multisite/two_dbs.yml"
|
||||||
|
conn.load_settings!
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
['default', 'second'].each do |db|
|
||||||
|
conn.with_connection(db) { SiteSetting.destroy_all }
|
||||||
|
end
|
||||||
|
|
||||||
|
conn.clear_settings!
|
||||||
|
|
||||||
|
[:@@db_spec_cache, :@@host_spec_cache, :@@default_spec].each do |class_variable|
|
||||||
|
conn.remove_class_variable(class_variable)
|
||||||
|
end
|
||||||
|
|
||||||
|
SiteSetting.provider = @original_provider
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#default_locale' do
|
||||||
|
it 'should return the right locale' do
|
||||||
|
conn.with_connection('default') do
|
||||||
|
expect(SiteSetting.default_locale).to eq('en')
|
||||||
|
end
|
||||||
|
|
||||||
|
conn.with_connection('second') do
|
||||||
|
SiteSetting.default_locale = 'zh_TW'
|
||||||
|
|
||||||
|
expect(SiteSetting.default_locale).to eq('zh_TW')
|
||||||
|
end
|
||||||
|
|
||||||
|
conn.with_connection('default') do
|
||||||
|
expect(SiteSetting.default_locale).to eq('en')
|
||||||
|
|
||||||
|
SiteSetting.default_locale = 'ja'
|
||||||
|
|
||||||
|
expect(SiteSetting.default_locale).to eq('ja')
|
||||||
|
end
|
||||||
|
|
||||||
|
conn.with_connection('second') do
|
||||||
|
expect(SiteSetting.default_locale).to eq('zh_TW')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user