DEV: Enable preserve_email_structure_when_styling by default

DEV: Enable preserve_email_structure_when_styling by default

In 1bd8a075, a hidden site setting was added that causes Email::Styles to treat its input as a complete document in all cases.

This commit enables that setting by default.

Some tests were removed that were broken by this change. They tested the behaviour of applying email styles to empty strings. They weren’t useful because:

  • Sending empty email is not something we ever intend to do,
  • They were testing incidental behaviour - there are lots of valid ways to process the empty string,
  • Their intent wasn’t clear from their descriptions,
diff --git a/config/site_settings.yml b/config/site_settings.yml
index 03c0d95..714fa88 100644
--- a/config/site_settings.yml
+++ b/config/site_settings.yml
@@ -1131,7 +1131,7 @@ email:
     default: true
     hidden: true
   preserve_email_structure_when_styling:
-    default: false
+    default: true
     hidden: true
 
 files:
diff --git a/spec/components/email/styles_spec.rb b/spec/components/email/styles_spec.rb
index 74addfe..c53d56d 100644
--- a/spec/components/email/styles_spec.rb
+++ b/spec/components/email/styles_spec.rb
@@ -19,13 +19,6 @@ describe Email::Styles do
   end
 
   context "basic formatter" do
-
-    it "works with an empty string" do
-      style = Email::Styles.new("")
-      style.format_basic
-      expect(style.to_html).to be_blank
-    end
-
     it "adds a max-width to large images" do
       frag = basic_fragment("<img height='auto' width='auto' src='gigantic.jpg'>")
       expect(frag.at("img")["style"]).to match("max-width")
@@ -56,12 +49,6 @@ describe Email::Styles do
   end
 
   context "html template formatter" do
-    it "works with an empty string" do
-      style = Email::Styles.new("")
-      style.format_html
-      expect(style.to_html).to be_blank
-    end
-
     it "attaches a style to h3 tags" do
       frag = html_fragment("<h3>hello</h3>")
       expect(frag.at('h3')['style']).to be_present
@@ -188,7 +175,7 @@ describe Email::Styles do
       cooked = "Create a method for click on image and use ng-click in <img> in your slide box...it is simple"
       style = Email::Styles.new(cooked)
       style.strip_avatars_and_emojis
-      expect(style.to_html).to eq(cooked)
+      expect(style.to_html).to include(cooked)
     end
   end
 
diff --git a/spec/integration/email_style_spec.rb b/spec/integration/email_style_spec.rb
index f0844db..f4df683 100644
--- a/spec/integration/email_style_spec.rb
+++ b/spec/integration/email_style_spec.rb
@@ -8,8 +8,8 @@ describe EmailStyle do
     it "does not evaluate ERB outside of the email itself" do
       SiteSetting.email_custom_template = "<hello>%{email_content}</hello><%= (111 * 333) %>"
       html = Email::Renderer.new(UserNotifications.signup(Fabricate(:user))).html
-      expect(html).not_to match("36963")
-      expect(html.starts_with?('<hello>')).to eq(true)
+      expect(html).not_to include("36963")
+      expect(html).to include('<hello>')
     end
   end
 

GitHub sha: 93137066

1 Like