mirror of
https://github.com/discourse/discourse.git
synced 2024-12-13 15:13:56 +08:00
a440e15291
Why this change? Objects type for theme settings is no longer considered experimental so we are dropping the site setting.
85 lines
2.7 KiB
Ruby
85 lines
2.7 KiB
Ruby
# 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
|