discourse/spec/services/experiments/toggle_spec.rb
Krzysztof Kotlarek 433fadbd52
FEATURE: allow admins to enable announced experimental features (#29244)
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.
2024-10-22 10:56:58 +11:00

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