mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: Change category type to categories type for theme object schema (#26339)
Why this change?
This is a follow-up to 86b2e3aa3e.
Basically, we want to allow people to select more than 1 category as well.
What does this change do?
1. Change `type: category` to `type: categories` and support `min` and `max`
validations for `type: categories`.
2. Fix the `<SchemaThemeSetting::Types::Categories>` component to support the
`min` and `max` validations and switch it to use the `<CategorySelector>` component
instead of the `<CategoryChooser>` component which only supports selecting one category.
This commit is contained in:
committed by
GitHub
parent
0df50a7e5d
commit
476d91d233
@@ -37,4 +37,58 @@ RSpec.describe ThemeObjectsSettingMetadataSerializer do
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#categories" do
|
||||
fab!(:category_1) { Fabricate(:category) }
|
||||
fab!(:category_2) { Fabricate(:category) }
|
||||
fab!(:category_3) { Fabricate(:private_category, group: Fabricate(:group)) }
|
||||
fab!(:admin)
|
||||
|
||||
it "should return a hash of serialized categories" do
|
||||
theme_setting[:objects_with_categories].value = [
|
||||
{
|
||||
"category_ids" => [category_1.id, category_2.id],
|
||||
"child_categories" => [{ "category_ids" => [category_3.id] }],
|
||||
},
|
||||
]
|
||||
|
||||
scope = Guardian.new
|
||||
|
||||
payload =
|
||||
described_class.new(theme_setting[:objects_with_categories], scope:, root: false).as_json
|
||||
|
||||
categories = payload[:categories]
|
||||
|
||||
expect(categories.keys).to contain_exactly(category_1.id, category_2.id)
|
||||
|
||||
expect(categories[category_1.id]).to eq(
|
||||
BasicCategorySerializer.new(category_1, scope:, root: false).as_json,
|
||||
)
|
||||
|
||||
expect(categories[category_2.id]).to eq(
|
||||
BasicCategorySerializer.new(category_2, scope:, root: false).as_json,
|
||||
)
|
||||
|
||||
scope = Guardian.new(admin)
|
||||
|
||||
payload =
|
||||
described_class.new(theme_setting[:objects_with_categories], scope:, root: false).as_json
|
||||
|
||||
categories = payload[:categories]
|
||||
|
||||
expect(categories.keys).to contain_exactly(category_1.id, category_2.id, category_3.id)
|
||||
|
||||
expect(categories[category_1.id]).to eq(
|
||||
BasicCategorySerializer.new(category_1, scope:, root: false).as_json,
|
||||
)
|
||||
|
||||
expect(categories[category_2.id]).to eq(
|
||||
BasicCategorySerializer.new(category_2, scope:, root: false).as_json,
|
||||
)
|
||||
|
||||
expect(categories[category_3.id]).to eq(
|
||||
BasicCategorySerializer.new(category_3, scope:, root: false).as_json,
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -3,18 +3,18 @@
|
||||
RSpec.describe ThemeSettingsSerializer do
|
||||
fab!(:theme)
|
||||
|
||||
let(:objects_setting) do
|
||||
let(:theme_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]
|
||||
theme.settings
|
||||
end
|
||||
|
||||
describe "#objects_schema" do
|
||||
before { SiteSetting.experimental_objects_type_for_theme_settings = true }
|
||||
before { SiteSetting.experimental_objects_type_for_theme_settings = true }
|
||||
|
||||
describe "#objects_schema" do
|
||||
it "should include the attribute when theme setting is typed objects" do
|
||||
payload = ThemeSettingsSerializer.new(objects_setting).as_json
|
||||
payload = ThemeSettingsSerializer.new(theme_setting[:objects_setting]).as_json
|
||||
|
||||
expect(payload[:theme_settings][:objects_schema][:name]).to eq("section")
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user