65 lines
1.8 KiB
Ruby
65 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe Experiments::Toggle 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:, **dependencies) }
|
|
|
|
fab!(:admin)
|
|
let(:params) { { setting_name: } }
|
|
let(:setting_name) { :experimental_form_templates }
|
|
let(:dependencies) { { guardian: } }
|
|
let(:guardian) { admin.guardian }
|
|
|
|
context "when data is invalid" 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 everything's ok" do
|
|
it { is_expected.to run_successfully }
|
|
|
|
context "when the setting is enabled" do
|
|
before { SiteSetting.experimental_form_templates = true }
|
|
|
|
it "disables the specified setting" do
|
|
expect { result }.to change { SiteSetting.experimental_form_templates }.to(false)
|
|
end
|
|
end
|
|
|
|
context "when the setting is disabled" do
|
|
before { SiteSetting.experimental_form_templates = false }
|
|
|
|
it "enables the specified setting" do
|
|
expect { result }.to change { SiteSetting.experimental_form_templates }.to(true)
|
|
end
|
|
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
|
|
end
|