mirror of
https://github.com/discourse/discourse.git
synced 2024-11-26 12:13:40 +08:00
7852daa49b
These tests are still flaky (order dependence) just that now it doesn't fail the test, instead it creates an infinite loop. Skipping these for now. We know they work because they pass, but they leak into other tests. I think we can re-enable locally and either fix or remove this once TL migration is done.
236 lines
8.8 KiB
Ruby
236 lines
8.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.xdescribe SiteSettings::DeprecatedSettings do
|
|
def deprecate_override!(settings, tl_group_overrides = [])
|
|
@original_settings = SiteSettings::DeprecatedSettings::SETTINGS.dup
|
|
SiteSettings::DeprecatedSettings::SETTINGS.clear
|
|
SiteSettings::DeprecatedSettings::SETTINGS.push(settings)
|
|
|
|
if tl_group_overrides.any?
|
|
@original_override_tl_group = SiteSettings::DeprecatedSettings::OVERRIDE_TL_GROUP_SETTINGS.dup
|
|
SiteSettings::DeprecatedSettings::OVERRIDE_TL_GROUP_SETTINGS.clear
|
|
SiteSettings::DeprecatedSettings::OVERRIDE_TL_GROUP_SETTINGS.push(*tl_group_overrides)
|
|
end
|
|
|
|
SiteSetting.setup_deprecated_methods
|
|
end
|
|
|
|
after do
|
|
if defined?(@original_settings)
|
|
SiteSettings::DeprecatedSettings::SETTINGS.clear
|
|
SiteSettings::DeprecatedSettings::SETTINGS.concat(@original_settings)
|
|
end
|
|
|
|
if defined?(@original_override_tl_group)
|
|
SiteSettings::DeprecatedSettings::OVERRIDE_TL_GROUP_SETTINGS.clear
|
|
SiteSettings::DeprecatedSettings::OVERRIDE_TL_GROUP_SETTINGS.concat(
|
|
@original_override_tl_group,
|
|
)
|
|
end
|
|
|
|
SiteSetting.setup_deprecated_methods
|
|
end
|
|
|
|
describe "when not overriding deprecated settings" do
|
|
let(:override) { false }
|
|
|
|
# Necessary because Discourse.deprecate uses redis to see if the warning
|
|
# was already logged.
|
|
use_redis_snapshotting
|
|
|
|
# NOTE: This fixture has some completely made up settings (e.g. min_trust_level_to_allow_invite_tl_and_staff)
|
|
let(:deprecated_test) { "#{Rails.root}/spec/fixtures/site_settings/deprecated_test.yml" }
|
|
|
|
before do
|
|
SiteSetting.force_https = true
|
|
SiteSetting.load_settings(deprecated_test)
|
|
end
|
|
|
|
it "should not act as a proxy to the new methods" do
|
|
deprecate_override!(["use_https", "force_https", override, "0.0.1"])
|
|
|
|
SiteSetting.use_https = false
|
|
|
|
expect(SiteSetting.force_https).to eq(true)
|
|
expect(SiteSetting.force_https?).to eq(true)
|
|
end
|
|
|
|
it "should log warnings when deprecated settings are called" do
|
|
deprecate_override!(["use_https", "force_https", override, "0.0.1"])
|
|
|
|
logger =
|
|
track_log_messages do
|
|
expect(SiteSetting.use_https).to eq(true)
|
|
expect(SiteSetting.use_https?).to eq(true)
|
|
end
|
|
expect(logger.warnings.count).to eq(3)
|
|
|
|
logger = track_log_messages { SiteSetting.use_https(warn: false) }
|
|
expect(logger.warnings.count).to eq(0)
|
|
end
|
|
end
|
|
|
|
describe "when overriding deprecated settings" do
|
|
let(:override) { true }
|
|
let(:deprecated_test) { "#{Rails.root}/spec/fixtures/site_settings/deprecated_test.yml" }
|
|
|
|
before do
|
|
SiteSetting.force_https = true
|
|
SiteSetting.load_settings(deprecated_test)
|
|
end
|
|
|
|
it "should act as a proxy to the new methods" do
|
|
deprecate_override!(["use_https", "force_https", override, "0.0.1"])
|
|
|
|
SiteSetting.use_https = false
|
|
|
|
expect(SiteSetting.force_https).to eq(false)
|
|
expect(SiteSetting.force_https?).to eq(false)
|
|
end
|
|
|
|
xit "should log warnings when deprecated settings are called" do
|
|
deprecate_override!(["use_https", "force_https", override, "0.0.1"])
|
|
|
|
logger =
|
|
track_log_messages do
|
|
expect(SiteSetting.use_https).to eq(true)
|
|
expect(SiteSetting.use_https?).to eq(true)
|
|
end
|
|
expect(logger.warnings.count).to eq(2)
|
|
|
|
logger = track_log_messages { SiteSetting.use_https(warn: false) }
|
|
expect(logger.warnings.count).to eq(0)
|
|
end
|
|
end
|
|
|
|
describe "when overriding a trust level setting with a group setting" do
|
|
let(:override) { false }
|
|
let(:deprecated_test) { "#{Rails.root}/spec/fixtures/site_settings/deprecated_test.yml" }
|
|
|
|
before { SiteSetting.load_settings(deprecated_test) }
|
|
|
|
context "when getting an old TrustLevelSetting" do
|
|
before do
|
|
deprecate_override!(
|
|
["min_trust_level_to_allow_invite", "invite_allowed_groups", override, "0.0.1"],
|
|
)
|
|
end
|
|
|
|
it "uses the minimum trust level from the trust level auto groups in the new group setting" do
|
|
SiteSetting.invite_allowed_groups =
|
|
"#{Group::AUTO_GROUPS[:trust_level_3]}|#{Group::AUTO_GROUPS[:trust_level_4]}"
|
|
expect(SiteSetting.min_trust_level_to_allow_invite).to eq(TrustLevel[3])
|
|
end
|
|
|
|
it "returns TL4 if there are no trust level auto groups in the new group setting" do
|
|
SiteSetting.invite_allowed_groups = Fabricate(:group).id.to_s
|
|
expect(SiteSetting.min_trust_level_to_allow_invite).to eq(TrustLevel[4])
|
|
end
|
|
|
|
it "returns TL4 if there are only staff and admin auto groups in the new group setting" do
|
|
SiteSetting.invite_allowed_groups =
|
|
"#{Group::AUTO_GROUPS[:admins]}|#{Group::AUTO_GROUPS[:staff]}"
|
|
expect(SiteSetting.min_trust_level_to_allow_invite).to eq(TrustLevel[4])
|
|
end
|
|
|
|
it "returns TL4 if there are no automated invite_allowed_groups" do
|
|
SiteSetting.invite_allowed_groups = Fabricate(:group).id.to_s
|
|
expect(SiteSetting.min_trust_level_to_allow_invite).to eq(TrustLevel[4])
|
|
end
|
|
end
|
|
|
|
context "when getting an old TrustLevelAndStaffSetting" do
|
|
before do
|
|
deprecate_override!(
|
|
[
|
|
"min_trust_level_to_allow_invite_tl_and_staff",
|
|
"invite_allowed_groups",
|
|
override,
|
|
"0.0.1",
|
|
],
|
|
["min_trust_level_to_allow_invite_tl_and_staff"],
|
|
)
|
|
end
|
|
|
|
it "returns staff if there are staff and admin auto groups in the new group setting" do
|
|
SiteSetting.invite_allowed_groups =
|
|
"#{Group::AUTO_GROUPS[:admins]}|#{Group::AUTO_GROUPS[:staff]}"
|
|
expect(SiteSetting.min_trust_level_to_allow_invite_tl_and_staff).to eq("staff")
|
|
end
|
|
|
|
it "returns admin if there is only the admin auto group in the new group setting" do
|
|
SiteSetting.invite_allowed_groups = "#{Group::AUTO_GROUPS[:admins]}"
|
|
expect(SiteSetting.min_trust_level_to_allow_invite_tl_and_staff).to eq("admin")
|
|
end
|
|
|
|
it "returns the min trust level if the admin auto group as well as lower TL auto groups in the new group setting" do
|
|
SiteSetting.invite_allowed_groups =
|
|
"#{Group::AUTO_GROUPS[:admins]}|#{Group::AUTO_GROUPS[:trust_level_3]}"
|
|
expect(SiteSetting.min_trust_level_to_allow_invite_tl_and_staff).to eq(TrustLevel[3])
|
|
end
|
|
|
|
it "returns admin if there are no automated invite_allowed_groups" do
|
|
SiteSetting.invite_allowed_groups = Fabricate(:group).id.to_s
|
|
expect(SiteSetting.min_trust_level_to_allow_invite_tl_and_staff).to eq("admin")
|
|
end
|
|
end
|
|
|
|
context "when setting an old TrustLevelSetting" do
|
|
before do
|
|
deprecate_override!(
|
|
["min_trust_level_to_allow_invite", "invite_allowed_groups", override, "0.0.1"],
|
|
["min_trust_level_to_allow_invite"],
|
|
)
|
|
end
|
|
|
|
it "converts the provided trust level to the appropriate auto group" do
|
|
SiteSetting.min_trust_level_to_allow_invite = TrustLevel[4]
|
|
expect(SiteSetting.min_trust_level_to_allow_invite).to eq(TrustLevel[4])
|
|
expect(SiteSetting.invite_allowed_groups).to eq(Group::AUTO_GROUPS[:trust_level_4].to_s)
|
|
end
|
|
|
|
it "raises error with an invalid trust level" do
|
|
expect { SiteSetting.min_trust_level_to_allow_invite = 66 }.to raise_error(
|
|
Discourse::InvalidParameters,
|
|
)
|
|
end
|
|
end
|
|
|
|
context "when setting an old TrustLevelAndStaffSetting" do
|
|
before do
|
|
deprecate_override!(
|
|
[
|
|
"min_trust_level_to_allow_invite_tl_and_staff",
|
|
"invite_allowed_groups",
|
|
override,
|
|
"0.0.1",
|
|
],
|
|
["min_trust_level_to_allow_invite_tl_and_staff"],
|
|
)
|
|
end
|
|
|
|
it "converts the provided trust level to the appropriate auto group" do
|
|
SiteSetting.min_trust_level_to_allow_invite_tl_and_staff = "admin"
|
|
expect(SiteSetting.min_trust_level_to_allow_invite_tl_and_staff).to eq("admin")
|
|
expect(SiteSetting.invite_allowed_groups).to eq(Group::AUTO_GROUPS[:admins].to_s)
|
|
|
|
SiteSetting.min_trust_level_to_allow_invite_tl_and_staff = "staff"
|
|
expect(SiteSetting.min_trust_level_to_allow_invite_tl_and_staff).to eq("staff")
|
|
expect(SiteSetting.invite_allowed_groups).to eq(Group::AUTO_GROUPS[:staff].to_s)
|
|
|
|
SiteSetting.min_trust_level_to_allow_invite_tl_and_staff = TrustLevel[3]
|
|
expect(SiteSetting.min_trust_level_to_allow_invite_tl_and_staff).to eq(TrustLevel[3])
|
|
expect(SiteSetting.invite_allowed_groups).to eq(
|
|
"#{Group::AUTO_GROUPS[:admins]}|#{Group::AUTO_GROUPS[:staff]}|#{Group::AUTO_GROUPS[:trust_level_3]}",
|
|
)
|
|
end
|
|
|
|
it "raises error with an invalid trust level" do
|
|
expect { SiteSetting.min_trust_level_to_allow_invite_tl_and_staff = 66 }.to raise_error(
|
|
Discourse::InvalidParameters,
|
|
)
|
|
end
|
|
end
|
|
end
|
|
end
|