fix: Save content_type, multipart information to email message model (#2774)

This commit is contained in:
Pranav Raj S 2021-08-09 18:04:34 +05:30 committed by GitHub
parent 462214aced
commit bdc4ecffc1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 40 additions and 14 deletions

View file

@ -143,6 +143,7 @@ export default {
const { const {
email: { email: {
content_type: contentType = '',
html_content: { full: fullHTMLContent, reply: replyHTMLContent } = {}, html_content: { full: fullHTMLContent, reply: replyHTMLContent } = {},
text_content: { full: fullTextContent, reply: replyTextContent } = {}, text_content: { full: fullTextContent, reply: replyTextContent } = {},
} = {}, } = {},
@ -156,7 +157,12 @@ export default {
if (contentToBeParsed && this.isIncoming) { if (contentToBeParsed && this.isIncoming) {
const parsedContent = this.stripStyleCharacters(contentToBeParsed); const parsedContent = this.stripStyleCharacters(contentToBeParsed);
if (parsedContent) { if (parsedContent) {
return parsedContent.replace(/\n/g, '<br />'); // This is a temporary fix for line-breaks in text/plain emails
// Now, It is not rendered properly in the email preview.
// FIXME: Remove this once we have a better solution for rendering text/plain emails
return contentType.includes('text/plain')
? parsedContent.replace(/\n/g, '<br />')
: parsedContent;
} }
} }
return ( return (

View file

@ -61,17 +61,19 @@ class MailPresenter < SimpleDelegator
def serialized_data def serialized_data
{ {
text_content: text_content, bcc: bcc,
cc: cc,
content_type: content_type,
date: date,
from: from,
html_content: html_content, html_content: html_content,
in_reply_to: in_reply_to,
message_id: message_id,
multipart: multipart?,
number_of_attachments: number_of_attachments, number_of_attachments: number_of_attachments,
subject: subject, subject: subject,
date: date, text_content: text_content,
to: to, to: to
from: from,
in_reply_to: in_reply_to,
cc: cc,
bcc: bcc,
message_id: message_id
} }
end end

View file

@ -9,7 +9,9 @@ RSpec.describe ReplyMailbox, type: :mailbox do
let(:reply_mail) { create_inbound_email_from_fixture('reply.eml') } let(:reply_mail) { create_inbound_email_from_fixture('reply.eml') }
let(:conversation) { create(:conversation, assignee: agent, inbox: create(:inbox, account: account, greeting_enabled: false), account: account) } let(:conversation) { create(:conversation, assignee: agent, inbox: create(:inbox, account: account, greeting_enabled: false), account: account) }
let(:described_subject) { described_class.receive reply_mail } let(:described_subject) { described_class.receive reply_mail }
let(:serialized_attributes) { %w[text_content html_content number_of_attachments subject date to from in_reply_to cc bcc message_id] } let(:serialized_attributes) do
%w[bcc cc content_type date from html_content in_reply_to message_id multipart number_of_attachments subject text_content to]
end
before do before do
# this UUID is hardcoded in the reply.eml, that's why we are updating this # this UUID is hardcoded in the reply.eml, that's why we are updating this

View file

@ -8,7 +8,10 @@ RSpec.describe SupportMailbox, type: :mailbox do
let!(:channel_email) { create(:channel_email, account: account) } let!(:channel_email) { create(:channel_email, account: account) }
let(:support_mail) { create_inbound_email_from_fixture('support.eml') } let(:support_mail) { create_inbound_email_from_fixture('support.eml') }
let(:described_subject) { described_class.receive support_mail } let(:described_subject) { described_class.receive support_mail }
let(:serialized_attributes) { %w[text_content html_content number_of_attachments subject date to from in_reply_to cc bcc message_id] } let(:serialized_attributes) do
%w[bcc cc content_type date from html_content in_reply_to message_id multipart number_of_attachments subject
text_content to]
end
let(:conversation) { Conversation.where(inbox_id: channel_email.inbox).last } let(:conversation) { Conversation.where(inbox_id: channel_email.inbox).last }
before do before do

View file

@ -32,12 +32,25 @@ RSpec.describe MailPresenter do
it 'give the serialized data of the email to be stored in the message' do it 'give the serialized data of the email to be stored in the message' do
data = decorated_mail.serialized_data data = decorated_mail.serialized_data
expect(data.keys).to eq([ expect(data.keys).to eq([
:text_content, :html_content, :number_of_attachments, :subject, :date, :to, :bcc,
:from, :in_reply_to, :cc, :bcc, :message_id :cc,
:content_type,
:date,
:from,
:html_content,
:in_reply_to,
:message_id,
:multipart,
:number_of_attachments,
:subject,
:text_content,
:to
]) ])
expect(data[:subject]).to eq(decorated_mail.subject) expect(data[:content_type]).to include('multipart/alternative')
expect(data[:date].to_s).to eq('2020-04-20T04:20:20-04:00') expect(data[:date].to_s).to eq('2020-04-20T04:20:20-04:00')
expect(data[:message_id]).to eq(mail.message_id) expect(data[:message_id]).to eq(mail.message_id)
expect(data[:multipart]).to eq(true)
expect(data[:subject]).to eq(decorated_mail.subject)
end end
end end
end end