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.
# Ideally we would parse general markdown into plain text, but that is almost an intractable problem.
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.text_part.content_type = 'text/plain; charset=UTF-8'

View File

@ -147,6 +147,15 @@ describe Jobs::UserEmail do
end
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(
type: :user_private_message,
user_id: user.id,
@ -154,9 +163,16 @@ describe Jobs::UserEmail do
notification_id: notification.id
)
expect(ActionMailer::Base.deliveries.first.to).to contain_exactly(
user.email
)
email = ActionMailer::Base.deliveries.first
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
it "doesn't send a PM email to a user that's been recently seen and has email_messages_level set to never" do