mirror of
https://github.com/discourse/discourse.git
synced 2024-12-30 06:50:38 +08:00
9c5eb7952e
Previously when attempting to edit a globally shadowed setting, the error message was not very helpful, it said "You are not allowed to change hidden settings". This commit changes the error message to reflect the actual problem, which is that the setting is shadowed by a global setting via ENV var.
89 lines
2.6 KiB
Ruby
89 lines
2.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe SiteSetting::Update do
|
|
describe described_class::Contract, type: :model do
|
|
it { is_expected.to validate_presence_of :setting_name }
|
|
end
|
|
|
|
describe ".call" do
|
|
subject(:result) { described_class.call(params:, options:, **dependencies) }
|
|
|
|
fab!(:admin)
|
|
let(:params) { { setting_name:, new_value: } }
|
|
let(:options) { { allow_changing_hidden: } }
|
|
let(:dependencies) { { guardian: } }
|
|
let(:setting_name) { :title }
|
|
let(:new_value) { "blah whatever" }
|
|
let(:guardian) { admin.guardian }
|
|
let(:allow_changing_hidden) { false }
|
|
|
|
context "when setting_name is blank" do
|
|
let(:setting_name) { nil }
|
|
|
|
it { is_expected.to fail_a_contract }
|
|
end
|
|
|
|
context "when a non-admin user tries to change a setting" do
|
|
let(:guardian) { Guardian.new }
|
|
|
|
it { is_expected.to fail_a_policy(:current_user_is_admin) }
|
|
end
|
|
|
|
context "when the user changes a hidden setting" do
|
|
let(:setting_name) { :max_category_nesting }
|
|
let(:new_value) { 3 }
|
|
|
|
context "when allow_changing_hidden is false" do
|
|
it { is_expected.to fail_a_policy(:setting_is_visible) }
|
|
end
|
|
|
|
context "when allow_changing_hidden is true" do
|
|
let(:allow_changing_hidden) { true }
|
|
|
|
it { is_expected.to run_successfully }
|
|
|
|
it "updates the specified setting" do
|
|
expect { result }.to change { SiteSetting.max_category_nesting }.to(3)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when a user changes a setting shadowed by a global variable" do
|
|
let(:setting_name) { :max_category_nesting }
|
|
let(:new_value) { 3 }
|
|
|
|
before { SiteSetting.stubs(:shadowed_settings).returns(Set.new([:max_category_nesting])) }
|
|
|
|
it { is_expected.to fail_a_policy(:setting_is_shadowed_globally) }
|
|
end
|
|
|
|
context "when the user changes a visible setting" do
|
|
let(:new_value) { "hello this is title" }
|
|
|
|
it { is_expected.to run_successfully }
|
|
|
|
it "updates the specified setting" do
|
|
expect { result }.to change { SiteSetting.title }.to(new_value)
|
|
end
|
|
|
|
it "creates an entry in the staff action logs" do
|
|
expect { result }.to change {
|
|
UserHistory.where(
|
|
action: UserHistory.actions[:change_site_setting],
|
|
subject: "title",
|
|
).count
|
|
}.by(1)
|
|
end
|
|
|
|
context "when value needs cleanup" do
|
|
let(:setting_name) { :max_image_size_kb }
|
|
let(:new_value) { "8zf843" }
|
|
|
|
it "cleans up the new setting value before using it" do
|
|
expect { result }.to change { SiteSetting.max_image_size_kb }.to(8843)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|