DEV: Add spec for `Email::Sender` for upload links in plain text emails.

This commit is contained in:
Guo Xiang Tan 2019-06-11 16:00:59 +08:00
parent 4deb0f6d59
commit 40e67971f9
2 changed files with 20 additions and 4 deletions

View File

@ -72,7 +72,7 @@ module Email
# These are the links we add when a user uploads a file or image. # These are the links we add when a user uploads a file or image.
# Ideally we would parse general markdown into plain text, but that is almost an intractable problem. # Ideally we would parse general markdown into plain text, but that is almost an intractable problem.
url_prefix = Discourse.base_url url_prefix = Discourse.base_url
@message.parts[0].body = @message.parts[0].body.to_s.gsub(/<a class="attachment" href="(\/uploads\/default\/[^"]+)">([^<]*)<\/a>/, '[\2](' + url_prefix + '\1)') @message.parts[0].body = @message.parts[0].body.to_s.gsub(/<a class="attachment" href="(\/uploads\/default\/[^"]+)">([^<]*)<\/a>/, '[\2|attachment](' + url_prefix + '\1)')
@message.parts[0].body = @message.parts[0].body.to_s.gsub(/<img src="(\/uploads\/default\/[^"]+)"([^>]*)>/, '![](' + url_prefix + '\1)') @message.parts[0].body = @message.parts[0].body.to_s.gsub(/<img src="(\/uploads\/default\/[^"]+)"([^>]*)>/, '![](' + url_prefix + '\1)')
@message.text_part.content_type = 'text/plain; charset=UTF-8' @message.text_part.content_type = 'text/plain; charset=UTF-8'

View File

@ -147,6 +147,15 @@ describe Jobs::UserEmail do
end end
it "sends an email by default for a PM to a user that's been recently seen" do it "sends an email by default for a PM to a user that's been recently seen" do
upload = Fabricate(:upload)
post.update!(raw: <<~RAW)
This is a test post
<a class="attachment" href="#{upload.url}">test</a>
<img src="#{upload.url}"/>
RAW
Jobs::UserEmail.new.execute( Jobs::UserEmail.new.execute(
type: :user_private_message, type: :user_private_message,
user_id: user.id, user_id: user.id,
@ -154,9 +163,16 @@ describe Jobs::UserEmail do
notification_id: notification.id notification_id: notification.id
) )
expect(ActionMailer::Base.deliveries.first.to).to contain_exactly( email = ActionMailer::Base.deliveries.first
user.email
) expect(email.to).to contain_exactly(user.email)
expect(email.parts[0].body.to_s).to include(<<~MD)
This is a test post
[test|attachment](#{Discourse.base_url}#{upload.url})
![](#{Discourse.base_url}#{upload.url})
MD
end end
it "doesn't send a PM email to a user that's been recently seen and has email_messages_level set to never" do it "doesn't send a PM email to a user that's been recently seen and has email_messages_level set to never" do