mirror of
https://github.com/discourse/discourse.git
synced 2024-12-21 18:43:45 +08:00
46f1c209be
If configuring only moderators in a group based access setting, the mapping to the old setting wouldn't work correctly, because the case was unaccounted for. This PR accounts for moderators group when doing the mapping.
241 lines
9.1 KiB
Ruby
241 lines
9.1 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 moderator if there is only the moderators auto group in the new group setting" do
|
|
SiteSetting.invite_allowed_groups = "#{Group::AUTO_GROUPS[:moderators]}"
|
|
expect(SiteSetting.min_trust_level_to_allow_invite_tl_and_staff).to eq("moderator")
|
|
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
|