mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-05-27 23:52:59 +08:00
Followup 19af83d39e
There was another edge case here, where this scenario happened:
* A site setting is deprecated _without_ an override
* This site setting is being shadowed by a global setting
* This would cause an argument error when getting the deprecated
setting value in SiteSetting.client_settings_json_uncached
An example of this setting was `external_system_avatars_enabled`.
The shadowed setting was blowing up because it was missing the
`scoped_to` argument that was added for themeable site settings
in the referenced commit.
This commit fixes the issue and adds a spec to cover this scenario,
followup commit will add stronger handling of shadowed global
settings for theme site settings...this is not allowed.
95 lines
2.9 KiB
Ruby
Vendored
95 lines
2.9 KiB
Ruby
Vendored
# frozen_string_literal: true
|
|
|
|
RSpec.describe SiteSettings::DeprecatedSettings do
|
|
describe "when not overriding deprecated settings" do
|
|
it "does not act as a proxy to the new methods" do
|
|
stub_deprecated_settings!(override: false) do
|
|
SiteSetting.old_one = true
|
|
|
|
expect(SiteSetting.new_one).to eq(false)
|
|
expect(SiteSetting.new_one?).to eq(false)
|
|
end
|
|
end
|
|
|
|
it "logs warnings when deprecated settings are called" do
|
|
stub_deprecated_settings!(override: false) do
|
|
logger =
|
|
track_log_messages do
|
|
expect(SiteSetting.old_one).to eq(false)
|
|
expect(SiteSetting.old_one?).to eq(false)
|
|
end
|
|
expect(logger.warnings.count).to eq(3)
|
|
|
|
logger = track_log_messages { SiteSetting.old_one(warn: false) }
|
|
expect(logger.warnings.count).to eq(0)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "when overriding deprecated settings" do
|
|
it "acts as a proxy to the new methods" do
|
|
stub_deprecated_settings!(override: true) do
|
|
SiteSetting.old_one = true
|
|
|
|
expect(SiteSetting.new_one).to eq(true)
|
|
expect(SiteSetting.new_one?).to eq(true)
|
|
end
|
|
end
|
|
|
|
it "logs warnings when deprecated settings are called" do
|
|
stub_deprecated_settings!(override: true) do
|
|
logger =
|
|
track_log_messages do
|
|
expect(SiteSetting.old_one).to eq(false)
|
|
expect(SiteSetting.old_one?).to eq(false)
|
|
end
|
|
expect(logger.warnings.count).to eq(2)
|
|
|
|
logger = track_log_messages { SiteSetting.old_one(warn: false) }
|
|
expect(logger.warnings.count).to eq(0)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "when deprecating global settings" do
|
|
describe "when not overriding deprecated settings" do
|
|
it "can access the old method and does not act as a proxy to the new method" do
|
|
global_setting(:old_one, true)
|
|
|
|
SiteSetting.send(:setting, :old_one, true)
|
|
|
|
stub_deprecated_settings!(override: false) do
|
|
SiteSetting.old_one = true
|
|
|
|
expect(SiteSetting.old_one).to eq(true)
|
|
expect(SiteSetting.old_one?).to eq(true)
|
|
|
|
expect(SiteSetting.new_one).to eq(false)
|
|
expect(SiteSetting.new_one?).to eq(false)
|
|
end
|
|
end
|
|
|
|
after { SiteSetting.remove_instance_variable(:@shadowed_settings) }
|
|
end
|
|
|
|
describe "when overriding deprecated settings" do
|
|
it "can access the old method and acts as a proxy to the new method" do
|
|
global_setting(:old_one, true)
|
|
|
|
SiteSetting.send(:setting, :old_one, true)
|
|
|
|
stub_deprecated_settings!(override: true) do
|
|
SiteSetting.old_one = true
|
|
|
|
expect(SiteSetting.old_one).to eq(true)
|
|
expect(SiteSetting.old_one?).to eq(true)
|
|
|
|
expect(SiteSetting.new_one).to eq(true)
|
|
expect(SiteSetting.new_one?).to eq(true)
|
|
end
|
|
end
|
|
|
|
after { SiteSetting.remove_instance_variable(:@shadowed_settings) }
|
|
end
|
|
end
|
|
end
|