mirror of
https://github.com/discourse/discourse.git
synced 2025-02-06 02:07:15 +08:00
![Martin Brennan](/assets/img/avatar_default.png)
Many site settings can be distructive or have huge side-effects for a site that the admin may not be aware of when changing it. This commit introduces a `requires_confirmation` attribute that can be added to any site setting. When it is true, a confirmation dialog will open if that setting is changed in the admin UI, optionally with a custom message that is defined in client.en.yml. If the admin does not confirm, we reset the setting to its previous clean value and do not save the new value.
95 lines
2.7 KiB
Ruby
95 lines
2.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module PageObjects
|
|
module Pages
|
|
class AdminSiteSettings < PageObjects::Pages::Base
|
|
def visit_filtered_plugin_setting(filter)
|
|
page.visit("/admin/site_settings/category/plugins?filter=#{filter}")
|
|
self
|
|
end
|
|
|
|
def visit(filter = nil)
|
|
if filter.present?
|
|
page.visit("/admin/site_settings?filter=#{filter}")
|
|
else
|
|
page.visit("/admin/site_settings")
|
|
end
|
|
self
|
|
end
|
|
|
|
def visit_category(category)
|
|
page.visit("/admin/site_settings/category/#{category}")
|
|
self
|
|
end
|
|
|
|
def find_setting(setting_name)
|
|
find(".admin-detail .row.setting[data-setting='#{setting_name}']")
|
|
end
|
|
|
|
def toggle_setting(setting_name, text = "")
|
|
setting = find_setting(setting_name)
|
|
setting.find(".setting-value span", text: text).click
|
|
save_setting(setting)
|
|
end
|
|
|
|
def change_number_setting(setting_name, value, save_changes = true)
|
|
setting = find_setting(setting_name)
|
|
setting.fill_in(with: value)
|
|
save_setting(setting) if save_changes
|
|
end
|
|
|
|
def select_from_emoji_list(setting_name, text = "", save_changes = true)
|
|
setting = find(".admin-detail .row.setting[data-setting='#{setting_name}']")
|
|
setting.find(".setting-value .value-list > .value button").click
|
|
setting.find(".setting-value .emoji-picker .emoji[title='#{text}']").click
|
|
save_setting(setting) if save_changes
|
|
end
|
|
|
|
def save_setting(setting_element)
|
|
setting_element.find(".setting-controls button.ok").click
|
|
end
|
|
|
|
def values_in_list(setting_name)
|
|
vals = []
|
|
setting = find(".admin-detail .row.setting[data-setting='#{setting_name}']")
|
|
setting
|
|
.all(:css, ".setting-value .values .value .value-input span")
|
|
.map { |e| vals << e.text }
|
|
vals
|
|
end
|
|
|
|
def type_in_search(input)
|
|
find("input#setting-filter").send_keys(input)
|
|
self
|
|
end
|
|
|
|
def clear_search
|
|
find("#setting-filter").click
|
|
self
|
|
end
|
|
|
|
def toggle_only_show_overridden
|
|
find("#setting-filter-toggle-overridden").click
|
|
self
|
|
end
|
|
|
|
def has_search_result?(setting)
|
|
has_css?("div[data-setting='#{setting}']")
|
|
end
|
|
|
|
def has_n_results?(count)
|
|
has_css?(".admin-detail .row.setting", count: count)
|
|
end
|
|
|
|
def has_greater_than_n_results?(count)
|
|
assert_selector(".admin-detail .row.setting", minimum: count)
|
|
end
|
|
end
|
|
|
|
# TODO (martin) Remove this after discourse-topic-voting no longer
|
|
# relies on this, it was renamed to AdminSiteSettings.
|
|
class AdminSettings < PageObjects::Pages::AdminSiteSettings
|
|
end
|
|
end
|
|
end
|