mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-05-21 03:19:56 +08:00
Why this change? Objects type for theme settings is no longer considered experimental so we are dropping the site setting.
84 lines
2.7 KiB
Ruby
Vendored
84 lines
2.7 KiB
Ruby
Vendored
# frozen_string_literal: true
|
|
|
|
RSpec.describe ThemeSettingsManager::Objects do
|
|
fab!(:theme)
|
|
|
|
let(:theme_setting) do
|
|
yaml = File.read("#{Rails.root}/spec/fixtures/theme_settings/objects_settings.yaml")
|
|
field = theme.set_field(target: :settings, name: "yaml", value: yaml)
|
|
theme.save!
|
|
theme.settings
|
|
end
|
|
|
|
it "can store a list of objects" do
|
|
new_value = [
|
|
{
|
|
"name" => "section 3",
|
|
"links" => [
|
|
{ "name" => "section 3 link 1", "url" => "https://section3link1.com" },
|
|
{ "name" => "section 3 link 2" },
|
|
],
|
|
},
|
|
{
|
|
"name" => "section 4",
|
|
"links" => [{ "name" => "section 4 link 1", "url" => "https://section4link1.com" }],
|
|
},
|
|
]
|
|
|
|
theme_setting[:objects_setting].value = new_value
|
|
|
|
expect(theme.reload.settings[:objects_setting].value).to eq(new_value)
|
|
end
|
|
|
|
it "raises the right error when there are objects which are not valid" do
|
|
new_value = [
|
|
{ "name" => "section 3", "links" => [{ "url" => "https://some.url.no.name" }] },
|
|
{
|
|
"links" => [
|
|
{
|
|
"name" => "some name that exceeds the max length of 20 characters",
|
|
"url" => "https://some.url",
|
|
},
|
|
],
|
|
},
|
|
]
|
|
|
|
expect { theme_setting[:objects_setting].value = new_value }.to raise_error(
|
|
Discourse::InvalidParameters,
|
|
"The property at JSON Pointer '/0/links/0/name' must be present. The property at JSON Pointer '/1/name' must be present. The property at JSON Pointer '/1/links/0/name' must be at most 20 characters long.",
|
|
)
|
|
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 "returns an empty array when there are no properties of `categories` type" do
|
|
expect(theme_setting[:objects_setting].categories(Guardian.new)).to eq([])
|
|
end
|
|
|
|
it "returns the categories record for all the properties of `categories` type in a flat array" do
|
|
new_value = [
|
|
{
|
|
"category_ids" => [category_1.id, category_2.id],
|
|
"child_categories" => [{ "category_ids" => [category_3.id] }],
|
|
},
|
|
]
|
|
|
|
theme_setting[:objects_with_categories].value = new_value
|
|
|
|
expect(theme.reload.settings[:objects_with_categories].value).to eq(new_value)
|
|
|
|
expect(theme.settings[:objects_with_categories].categories(Guardian.new)).to contain_exactly(
|
|
category_1,
|
|
category_2,
|
|
)
|
|
|
|
expect(
|
|
theme.settings[:objects_with_categories].categories(Guardian.new(admin)),
|
|
).to contain_exactly(category_1, category_2, category_3)
|
|
end
|
|
end
|
|
end
|