mirror of
https://github.com/discourse/discourse.git
synced 2025-01-19 07:22:45 +08:00
433fadbd52
Toggle the button to enable the experimental site setting from "What's new" announcement. The toggle button is displayed when: - site setting exists and is boolean; - potentially required plugin is enabled.
57 lines
1.6 KiB
Ruby
57 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe Experiments::Toggle do
|
|
subject(:result) { described_class.call(params) }
|
|
|
|
describe described_class::Contract, type: :model do
|
|
subject(:contract) { described_class.new }
|
|
|
|
it { is_expected.to validate_presence_of :setting_name }
|
|
end
|
|
|
|
fab!(:admin)
|
|
let(:params) { { setting_name:, guardian: } }
|
|
let(:setting_name) { :experimental_form_templates }
|
|
let(:guardian) { admin.guardian }
|
|
|
|
context "when setting_name is blank" do
|
|
let(:setting_name) { nil }
|
|
|
|
it { is_expected.to fail_a_contract }
|
|
end
|
|
|
|
context "when setting_name is invalid" do
|
|
let(:setting_name) { "wrong_value" }
|
|
|
|
it { is_expected.to fail_a_policy(:setting_is_available) }
|
|
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 admin toggles the feature" do
|
|
it { is_expected.to run_successfully }
|
|
|
|
it "enables the specified setting" do
|
|
expect { result }.to change { SiteSetting.experimental_form_templates }.to(true)
|
|
end
|
|
|
|
it "disables the specified setting" do
|
|
SiteSetting.experimental_form_templates = true
|
|
expect { result }.to change { SiteSetting.experimental_form_templates }.to(false)
|
|
end
|
|
|
|
it "creates an entry in the staff action logs" do
|
|
expect { result }.to change {
|
|
UserHistory.where(
|
|
action: UserHistory.actions[:change_site_setting],
|
|
subject: "experimental_form_templates",
|
|
).count
|
|
}.by(1)
|
|
end
|
|
end
|
|
end
|