0
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2026-08-07 13:19:19 +08:00
discourse/spec/lib/site_settings/hidden_provider_spec.rb
David Battersby 23691594c0
DEV: Add hide_settings metadata to upcoming changes framework (#40990)
Adds an optional `hide_settings:` key to `upcoming_change` metadata in
`site_settings.yml`. It declares other site settings that should be
hidden from admins while the change is enabled (manual opt-in or
auto-promotion) — useful for legacy settings that stop making sense once
the change replaces them.

The hidden set is computed live by
`UpcomingChanges.settings_hidden_while_enabled` and consulted by
`SiteSettings::HiddenProvider#all`, rather than toggled imperatively at
opt-in time.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 10:25:39 +04:00

51 lines
1.8 KiB
Ruby
Vendored

# frozen_string_literal: true
RSpec.describe SiteSettings::HiddenProvider do
let(:provider_local) { SiteSettings::LocalProcessProvider.new }
let(:settings) { new_settings(provider_local) }
let(:hidden_provider) { SiteSettings::HiddenProvider.new }
describe "all" do
after { DiscoursePluginRegistry.clear_modifiers! }
it "can return defaults" do
hidden_provider.add_hidden(:secret_setting)
hidden_provider.add_hidden(:internal_thing)
expect(hidden_provider.all).to contain_exactly(:secret_setting, :internal_thing)
hidden_provider.remove_hidden(:secret_setting)
expect(hidden_provider.all).to contain_exactly(:internal_thing)
end
it "can return results from modifiers" do
hidden_provider.add_hidden(:secret_setting)
plugin = Plugin::Instance.new
plugin.register_modifier(:hidden_site_settings) { |defaults| defaults + [:other_setting] }
expect(hidden_provider.all).to contain_exactly(:secret_setting, :other_setting)
end
it "includes settings hidden by an enabled upcoming change that declares hide_settings" do
mock_upcoming_change_metadata(
{
enable_upload_debug_mode: {
impact: "other,developers",
status: :experimental,
impact_type: "other",
impact_role: "developers",
hide_settings: %i[allow_uncategorized_topics],
},
},
)
hidden_provider.add_hidden(:secret_setting)
expect(hidden_provider.all).to contain_exactly(:secret_setting)
SiteSetting.enable_upload_debug_mode = true
expect(hidden_provider.all).to contain_exactly(:secret_setting, :allow_uncategorized_topics)
ensure
SiteSetting.remove_override!(:enable_upload_debug_mode)
UpcomingChanges.clear_caches!
end
end
end