discourse/spec/serializers/theme_serializer_spec.rb

68 lines
2.2 KiB
Ruby

# frozen_string_literal: true
RSpec.describe ThemeSerializer do
describe "load theme settings" do
fab!(:theme)
it "should add error message when settings format is invalid" do
Theme
.any_instance
.stubs(:settings)
.raises(ThemeSettingsParser::InvalidYaml, I18n.t("themes.settings_errors.invalid_yaml"))
serialized = ThemeSerializer.new(theme).as_json[:theme]
expect(serialized[:settings]).to be_nil
expect(serialized[:errors].count).to eq(1)
expect(serialized[:errors][0]).to eq(I18n.t("themes.settings_errors.invalid_yaml"))
end
it "should add errors messages from theme fields" do
error = "error when compiling theme field"
theme_field = Fabricate(:theme_field, error: error, theme: theme)
serialized = ThemeSerializer.new(theme.reload).as_json[:theme]
expect(serialized[:errors].count).to eq(1)
expect(serialized[:errors][0]).to eq(error)
end
end
describe "screenshot_url" do
fab!(:theme)
let(:serialized) { ThemeSerializer.new(theme.reload).as_json[:theme] }
it "should include screenshot_url when there is a theme field with screenshot upload type" do
Fabricate(
:theme_field,
theme: theme,
type_id: ThemeField.types[:theme_screenshot_upload_var],
name: "theme_screenshot_1",
upload: Fabricate(:upload),
)
expect(serialized[:screenshot_url]).to be_present
end
it "should not include screenshot_url when there is no theme field with screenshot upload type" do
expect(serialized[:screenshot_url]).to be_nil
end
it "should handle multiple screenshot fields and use the first one" do
first_upload = Fabricate(:upload)
second_upload = Fabricate(:upload)
Fabricate(
:theme_field,
theme: theme,
type_id: ThemeField.types[:theme_screenshot_upload_var],
name: "theme_screenshot_1",
upload: first_upload,
)
Fabricate(
:theme_field,
theme: theme,
type_id: ThemeField.types[:theme_screenshot_upload_var],
name: "theme_screenshot_2",
upload: second_upload,
)
expect(serialized[:screenshot_url]).to eq(first_upload.url)
end
end
end