mirror of
https://github.com/discourse/discourse.git
synced 2026-07-29 15:54:48 -05:00
DEV: Add save button to editing typed objects theme setting route (#26133)
Why this change? This is still a work in progress but allows objects type theme setting to be saved.
This commit is contained in:
@@ -83,70 +83,4 @@ describe "Admin Customize Themes", type: :system do
|
||||
expect(ace_content.text).to eq("console.log('test')")
|
||||
end
|
||||
end
|
||||
|
||||
describe "when editing a theme setting of objects type" do
|
||||
let(:objects_setting) do
|
||||
theme.set_field(
|
||||
target: :settings,
|
||||
name: "yaml",
|
||||
value: File.read("#{Rails.root}/spec/fixtures/theme_settings/objects_settings.yaml"),
|
||||
)
|
||||
|
||||
theme.save!
|
||||
theme.settings[:objects_setting]
|
||||
end
|
||||
|
||||
before do
|
||||
SiteSetting.experimental_objects_type_for_theme_settings = true
|
||||
objects_setting
|
||||
end
|
||||
|
||||
it "should allow admin to edit the theme setting of objecst type" do
|
||||
visit("/admin/customize/themes/#{theme.id}")
|
||||
|
||||
admin_customize_themes_page.click_edit_objects_theme_setting_button("objects_setting")
|
||||
|
||||
expect(page).to have_current_path(
|
||||
"/admin/customize/themes/#{theme.id}/schema/objects_setting",
|
||||
)
|
||||
end
|
||||
|
||||
it "allows an admin to edit a theme setting of objects type via the settings editor" do
|
||||
visit "/admin/customize/themes/#{theme.id}"
|
||||
|
||||
theme_settings_editor = admin_customize_themes_page.click_theme_settings_editor_button
|
||||
|
||||
theme_settings_editor.fill_in(<<~SETTING)
|
||||
[
|
||||
{
|
||||
"setting": "objects_setting",
|
||||
"value": [
|
||||
{
|
||||
"name": "new section",
|
||||
"links": [
|
||||
{
|
||||
"name": "new link",
|
||||
"url": "https://example.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
SETTING
|
||||
|
||||
theme_settings_editor.save
|
||||
|
||||
try_until_success do
|
||||
expect(theme.reload.settings[:objects_setting].value).to eq(
|
||||
[
|
||||
{
|
||||
"links" => [{ "name" => "new link", "url" => "https://example.com" }],
|
||||
"name" => "new section",
|
||||
},
|
||||
],
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
RSpec.describe "Admin editing objects type theme setting", type: :system do
|
||||
fab!(:admin)
|
||||
fab!(:theme)
|
||||
|
||||
let(:objects_setting) do
|
||||
theme.set_field(
|
||||
target: :settings,
|
||||
name: "yaml",
|
||||
value: File.read("#{Rails.root}/spec/fixtures/theme_settings/objects_settings.yaml"),
|
||||
)
|
||||
|
||||
theme.save!
|
||||
theme.settings[:objects_setting]
|
||||
end
|
||||
|
||||
let(:admin_customize_themes_page) { PageObjects::Pages::AdminCustomizeThemes.new }
|
||||
|
||||
let(:admin_objects_theme_setting_editor_page) do
|
||||
PageObjects::Pages::AdminObjectsThemeSettingEditor.new
|
||||
end
|
||||
|
||||
before do
|
||||
SiteSetting.experimental_objects_type_for_theme_settings = true
|
||||
objects_setting
|
||||
sign_in(admin)
|
||||
end
|
||||
|
||||
describe "when editing a theme setting of objects type" do
|
||||
it "should allow admin to edit the theme setting of objects type" do
|
||||
visit("/admin/customize/themes/#{theme.id}")
|
||||
|
||||
expect(admin_customize_themes_page).to have_no_overriden_setting("objects_setting")
|
||||
|
||||
admin_objects_theme_setting_editor =
|
||||
admin_customize_themes_page.click_edit_objects_theme_setting_button("objects_setting")
|
||||
|
||||
expect(page).to have_current_path(
|
||||
"/admin/customize/themes/#{theme.id}/schema/objects_setting",
|
||||
)
|
||||
|
||||
admin_objects_theme_setting_editor.fill_in_field("name", "some new name").save
|
||||
|
||||
expect(admin_customize_themes_page).to have_overridden_setting("objects_setting")
|
||||
|
||||
admin_customize_themes_page.reset_overridden_setting("objects_setting")
|
||||
|
||||
admin_objects_theme_setting_editor =
|
||||
admin_customize_themes_page.click_edit_objects_theme_setting_button("objects_setting")
|
||||
|
||||
expect(admin_objects_theme_setting_editor).to have_setting_field("name", "some new name")
|
||||
end
|
||||
|
||||
it "allows an admin to edit a theme setting of objects type via the settings editor" do
|
||||
visit "/admin/customize/themes/#{theme.id}"
|
||||
|
||||
theme_settings_editor = admin_customize_themes_page.click_theme_settings_editor_button
|
||||
|
||||
theme_settings_editor.fill_in(<<~SETTING)
|
||||
[
|
||||
{
|
||||
"setting": "objects_setting",
|
||||
"value": [
|
||||
{
|
||||
"name": "new section",
|
||||
"links": [
|
||||
{
|
||||
"name": "new link",
|
||||
"url": "https://example.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
SETTING
|
||||
|
||||
theme_settings_editor.save
|
||||
|
||||
try_until_success do
|
||||
expect(theme.reload.settings[:objects_setting].value).to eq(
|
||||
[
|
||||
{
|
||||
"links" => [{ "name" => "new link", "url" => "https://example.com" }],
|
||||
"name" => "new section",
|
||||
},
|
||||
],
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -15,6 +15,20 @@ module PageObjects
|
||||
has_css?(".select-inactive-mode")
|
||||
end
|
||||
|
||||
def has_overridden_setting?(setting_name)
|
||||
has_css?(overridden_setting_selector(setting_name))
|
||||
end
|
||||
|
||||
def has_no_overriden_setting?(setting_name)
|
||||
has_no_css?(overridden_setting_selector(setting_name))
|
||||
end
|
||||
|
||||
def reset_overridden_setting(setting_name)
|
||||
setting_section = find("section.theme.settings .setting[data-setting=\"#{setting_name}\"]")
|
||||
setting_section.click_button(I18n.t("admin_js.admin.settings.reset"))
|
||||
setting_section.find(".setting-controls .ok").click
|
||||
end
|
||||
|
||||
def click_select_inactive_mode
|
||||
find(".select-inactive-mode").click
|
||||
end
|
||||
@@ -41,12 +55,19 @@ module PageObjects
|
||||
|
||||
def click_edit_objects_theme_setting_button(setting_name)
|
||||
find(".theme-setting[data-setting=\"#{setting_name}\"] .setting-value-edit-button").click
|
||||
PageObjects::Pages::AdminObjectsThemeSettingEditor.new
|
||||
end
|
||||
|
||||
def click_theme_settings_editor_button
|
||||
click_button(I18n.t("admin_js.admin.customize.theme.settings_editor"))
|
||||
PageObjects::Components::AdminThemeSettingsEditor.new
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def overridden_setting_selector(setting_name)
|
||||
"section.theme.settings .setting.overridden[data-setting=\"#{setting_name}\"]"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module PageObjects
|
||||
module Pages
|
||||
class AdminObjectsThemeSettingEditor < PageObjects::Pages::Base
|
||||
def has_setting_field?(field_name, value)
|
||||
expect(input_field(field_name).value).to eq(value)
|
||||
end
|
||||
|
||||
def fill_in_field(field_name, value)
|
||||
input_field(field_name).fill_in(with: value)
|
||||
self
|
||||
end
|
||||
|
||||
def save
|
||||
click_button(I18n.t("js.save"))
|
||||
self
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def input_field(field_name)
|
||||
page.find(".schema-field[data-name=\"#{field_name}\"] input")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user