Skip to content

Commit

Permalink
Introduce multisite tests for better coverage.
Browse files Browse the repository at this point in the history
  • Loading branch information
tgxworld committed Aug 8, 2017
1 parent 9a0eb2e commit 2c39743
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 2 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ config/discourse.conf
*.sql.gz
/db/*.sqlite3
/db/structure.sql
/db/schema.rb

# Ignore all logfiles and tempfiles.
/log/*.log
Expand Down
2 changes: 1 addition & 1 deletion config/database.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ development:
test:
prepared_statements: false
adapter: postgresql
database: discourse_test
database: discourse_test<%= ENV['MULTISITE'] ? "_#{ENV['MULTISITE']}" : '' %>
min_messages: warning
pool: 5
timeout: 5000
Expand Down
1 change: 1 addition & 0 deletions lib/site_settings/defaults_provider.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ def set_regardless_of_locale(name, value)
@defaults.each { |_, hash| hash.delete(name) }
@defaults[DEFAULT_LOCALE.to_sym][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)
else
raise ArgumentError.new("No setting named '#{name}' exists")
Expand Down
20 changes: 19 additions & 1 deletion lib/tasks/db.rake
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,28 @@ task 'set_locale' do
I18n.locale = (SiteSetting.default_locale || :en) rescue :en
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
task 'db:migrate' => ['environment', 'set_locale'] do
task 'db:migrate', [:multisite] => ['environment', 'set_locale'] do |_, args|
SeedFu.seed
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

task 'test:prepare' => 'environment' do
Expand Down
5 changes: 5 additions & 0 deletions spec/fixtures/multisite/two_dbs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
second:
adapter: postgresql
database: discourse_test_multisite
host_names:
- test2.localhost
52 changes: 52 additions & 0 deletions spec/multisite/site_settings_spec.rb
Original file line number Diff line number Diff line change
@@ -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

1 comment on commit 2c39743

@discoursebot
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This commit has been mentioned on Discourse Meta. There might be relevant details there:

https://meta.discourse.org/t/failing-tests-in-discourse-dev-due-to-multisite/68720/1

Please sign in to comment.