# 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