diff --git a/app/mailers/subscription_mailer.rb b/app/mailers/subscription_mailer.rb index 6261e13bf..19437485d 100644 --- a/app/mailers/subscription_mailer.rb +++ b/app/mailers/subscription_mailer.rb @@ -1,4 +1,5 @@ class SubscriptionMailer < ApplicationMailer + helper PostsHelper helper UsersHelper def subscription diff --git a/app/views/subscription_mailer/subscription.html.erb b/app/views/subscription_mailer/subscription.html.erb index e1724b5d0..f2899d5f0 100644 --- a/app/views/subscription_mailer/subscription.html.erb +++ b/app/views/subscription_mailer/subscription.html.erb @@ -15,8 +15,7 @@ <%= link_to question.title, post_url(question, host: @subscription.community.host) %>

- <%= question.body.first(150).gsub(/<\/?[^>]+>/, '') %> - <%= question.body.length > 150 ? '...' : '' %> + <%= sanitize(strip_tags(question.body).truncate(150), scrubber: scrubber) %>

— <%= user_link question.user, { host: @subscription.community.host } %> diff --git a/test/fixtures/posts.yml b/test/fixtures/posts.yml index 63a1dee77..e2e59fb6d 100644 --- a/test/fixtures/posts.yml +++ b/test/fixtures/posts.yml @@ -590,3 +590,17 @@ without_new_thread_followers: community: sample category: main license: cc_by_sa + +with_sanitized_html: + post_type: question + title: This post contains HTML in body that is sanitized away + body: | + This is the body of the post used to test HTML sanitization + oops + body_markdown: | +

+ This is the body of the post used to test HTML sanitization + oops +

+ community: sample + user: standard_user diff --git a/test/mailers/subscription_mailer_test.rb b/test/mailers/subscription_mailer_test.rb index 020b62509..b4c5c5478 100644 --- a/test/mailers/subscription_mailer_test.rb +++ b/test/mailers/subscription_mailer_test.rb @@ -1,7 +1,26 @@ require 'test_helper' class SubscriptionMailerTest < ActionMailer::TestCase - # test "the truth" do - # assert true - # end + test 'should correctly send subscription emails' do + all_sub = subscriptions(:all) + post_with_html = posts(:with_sanitized_html) + + mailer = SubscriptionMailer.with(subscription: all_sub) + email = mailer.subscription + + assert(all_sub.questions&.any? { |q| q.id == post_with_html.id }) + + assert_emails 1 do + email.deliver_later + end + + assert email.from.include?(SiteSetting['SubscriptionSenderEmail']) + assert email.to.include?(all_sub.user.email) + assert email.subject.start_with?('Latest questions from your') + + assert_dom_email do + assert_not_dom 'del' + assert_dom 'p', /oops/ + end + end end