DEV: Refactor subclasses in ThemeSettingsManager to individual files (#25605)

Why this change?

One Ruby class per file improves readability
This commit is contained in:
Alan Guo Xiang Tan
2024-02-08 12:59:52 +08:00
committed by GitHub
parent 7ce76143ac
commit fb0e656cb7
12 changed files with 197 additions and 185 deletions

View File

@@ -0,0 +1,37 @@
# frozen_string_literal: true
RSpec.describe ThemeSettingsManager::Objects do
fab!(:theme)
before { SiteSetting.experimental_objects_type_for_theme_settings = true }
it "can store a list of objects" do
objects_setting =
described_class.new(
"some_objects_setting",
[{ "title" => "Some title", "description" => "Some description" }],
theme,
schema: {
name: "Some Object",
fields: {
title: {
type: "string",
},
description: {
type: "string",
},
},
},
)
expect(objects_setting.value).to eq(
[{ "title" => "Some title", "description" => "Some description" }],
)
objects_setting.value = [{ title: "title 1", description: "description 1" }]
expect(objects_setting.value).to eq(
[{ "title" => "title 1", "description" => "description 1" }],
)
end
end

View File

@@ -1,7 +1,5 @@
# frozen_string_literal: true
require "theme_settings_manager"
RSpec.describe ThemeSettingsManager do
let!(:theme) { Fabricate(:theme) }
@@ -12,8 +10,6 @@ RSpec.describe ThemeSettingsManager do
theme.settings
end
before { SiteSetting.experimental_objects_type_for_theme_settings = true }
describe "Enum" do
it "only accepts values from its choices" do
enum_setting = theme_settings[:enum_setting]
@@ -186,21 +182,4 @@ RSpec.describe ThemeSettingsManager do
end
end
end
describe ThemeSettingsManager::Objects do
it "can store a list of objects" do
objects_setting = theme_settings[:valid_objects_setting]
expect(objects_setting.value).to eq(
[{ "title" => "Some title", "description" => "Some description" }],
)
objects_setting.value = [{ title: "title 1", description: "description 1" }]
objects_setting = theme.reload.settings[:valid_objects_setting]
expect(objects_setting.value).to eq(
[{ "title" => "title 1", "description" => "description 1" }],
)
end
end
end