# frozen_string_literal: true 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