# frozen_string_literal: true RSpec.describe EmailStyleUpdater do fab!(:admin) { Fabricate(:admin) } let(:default_html) { File.read("#{Rails.root}/app/views/email/default_template.html") } let(:updater) { EmailStyleUpdater.new(admin) } def expect_settings_to_be_unset expect(SiteSetting.email_custom_template).to_not be_present expect(SiteSetting.email_custom_css).to_not be_present expect(SiteSetting.email_custom_css_compiled).to_not be_present end describe "update" do it "can change the settings" do expect(updater.update(html: "For you: %{email_content}", css: "h1 { color: blue; }")).to eq( true, ) expect(SiteSetting.email_custom_template).to eq("For you: %{email_content}") expect(SiteSetting.email_custom_css).to eq("h1 { color: blue; }") expect(SiteSetting.email_custom_css_compiled.strip).to eq("h1{color:blue}") end it "will not store defaults" do updater.update(html: default_html, css: "") expect_settings_to_be_unset end it "can clear settings if defaults given" do SiteSetting.email_custom_template = "For you: %{email_content}" SiteSetting.email_custom_css = "h1 { color: blue; }" SiteSetting.email_custom_css_compiled = "h1{color:blue}" updater.update(html: default_html, css: "") expect_settings_to_be_unset end it "fails if html is missing email_content" do expect(updater.update(html: "No email content", css: "")).to eq(false) expect(updater.errors).to include( I18n.t("email_style.html_missing_placeholder", placeholder: "%{email_content}"), ) expect_settings_to_be_unset end it "fails if css is not valid scss" do expect(updater.update(html: "For you: %{email_content}", css: "h1 { color: blue;")).to eq( false, ) expect(updater.errors).to_not be_empty expect(updater.errors.first).to include("Invalid CSS after") expect_settings_to_be_unset end end end