mirror of
https://github.com/discourse/discourse.git
synced 2024-11-30 10:15:13 +08:00
cdba864598
Why this change? When editing a objects typed theme setting, the input fields which are rendered should include a description so that the user knows the purpose of the field which they are changing. What does this change do? This change adds support for adding description to each property in the schema for an object by following a given convention in the locale file. For a schema like this: ``` objects_setting: type: objects schema: name: section properties: name: type: string required: true links: type: objects schema: name: link properties: name: type: string required: true validations: max_length: 20 url: type: string ``` Description for each property in the object can be added like so: ``` en: theme_metadata: settings: objects_setting: description: <description> for the setting schema: properties: name: <description for the name property> links: name: <description for the name property in link> url: <description for the url property in link> ``` If the a description is not present, the input field will simply not have an description. Also note that a description for a theme setting can now be added like so: ``` en: theme_metadata: settings: some_other_setting: <This will be used as the description> objects_setting: description: <This will also be used as the description> ```
62 lines
1.9 KiB
Ruby
62 lines
1.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe ThemeSettingsSerializer do
|
|
fab!(:theme)
|
|
|
|
let(:objects_setting) do
|
|
yaml = File.read("#{Rails.root}/spec/fixtures/theme_settings/objects_settings.yaml")
|
|
theme.set_field(target: :settings, name: "yaml", value: yaml)
|
|
theme.save!
|
|
theme.settings[:objects_setting]
|
|
end
|
|
|
|
describe "#objects_schema" do
|
|
before { SiteSetting.experimental_objects_type_for_theme_settings = true }
|
|
|
|
it "should include the attribute when theme setting is typed objects" do
|
|
payload = ThemeSettingsSerializer.new(objects_setting).as_json
|
|
|
|
expect(payload[:theme_settings][:objects_schema][:name]).to eq("section")
|
|
end
|
|
end
|
|
|
|
describe "#objects_schema_property_descriptions" do
|
|
let(:objects_setting_locale) do
|
|
theme.set_field(
|
|
target: :translations,
|
|
name: "en",
|
|
value: File.read("#{Rails.root}/spec/fixtures/theme_locales/objects_settings/en.yaml"),
|
|
)
|
|
|
|
theme.save!
|
|
end
|
|
|
|
before { SiteSetting.experimental_objects_type_for_theme_settings = true }
|
|
|
|
it "should not include the attribute when theme setting is not typed objects" do
|
|
yaml = File.read("#{Rails.root}/spec/fixtures/theme_settings/valid_settings.yaml")
|
|
theme.set_field(target: :settings, name: "yaml", value: yaml)
|
|
theme.save!
|
|
|
|
payload = ThemeSettingsSerializer.new(theme.settings[:string_setting]).as_json
|
|
|
|
expect(payload[:theme_settings][:objects_schema_property_descriptions]).to be_nil
|
|
end
|
|
|
|
it "should include the attribute when theme setting is of typed objects" do
|
|
objects_setting_locale
|
|
objects_setting
|
|
|
|
payload = ThemeSettingsSerializer.new(objects_setting).as_json
|
|
|
|
expect(payload[:theme_settings][:objects_schema_property_descriptions]).to eq(
|
|
{
|
|
"links.name" => "Name of the link",
|
|
"links.url" => "URL of the link",
|
|
"name" => "Section Name",
|
|
},
|
|
)
|
|
end
|
|
end
|
|
end
|