Added even more tests.
This commit is contained in:
parent
ac3b76fe30
commit
35da82aa16
2 changed files with 152 additions and 11 deletions
|
@ -44,7 +44,7 @@ module Channel::EmailBuild
|
||||||
|
|
||||||
# add html part
|
# add html part
|
||||||
if attr[:content_type] && attr[:content_type] == 'text/html'
|
if attr[:content_type] && attr[:content_type] == 'text/html'
|
||||||
mail.html_part = Mail::Part.new do
|
html_alternative = Mail::Part.new do
|
||||||
content_type 'text/html; charset=UTF-8'
|
content_type 'text/html; charset=UTF-8'
|
||||||
|
|
||||||
# complete check
|
# complete check
|
||||||
|
@ -58,21 +58,48 @@ module Channel::EmailBuild
|
||||||
end
|
end
|
||||||
|
|
||||||
# add plain text part
|
# add plain text part
|
||||||
mail.text_part = Mail::Part.new do
|
text_alternative = Mail::Part.new do
|
||||||
content_type 'text/plain; charset=UTF-8'
|
content_type 'text/plain; charset=UTF-8'
|
||||||
body attr[:body]
|
body attr[:body]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# build email without any attachments
|
||||||
|
if !html_alternative && ( !attr[:attachments] || attr[:attachments].empty? )
|
||||||
|
mail.content_type 'text/plain; charset=UTF-8'
|
||||||
|
mail.body attr[:body]
|
||||||
|
return mail
|
||||||
|
end
|
||||||
|
|
||||||
|
# build email with attachments
|
||||||
|
alternative_bodies = Mail::Part.new { content_type 'multipart/alternative' }
|
||||||
|
alternative_bodies.add_part text_alternative
|
||||||
|
|
||||||
|
if html_alternative
|
||||||
|
html_container = Mail::Part.new { content_type 'multipart/related' }
|
||||||
|
html_container.add_part html_alternative
|
||||||
|
alternative_bodies.add_part html_container
|
||||||
|
|
||||||
|
# place to add inline attachments related to html alternative
|
||||||
|
end
|
||||||
|
|
||||||
|
mail.add_part alternative_bodies
|
||||||
|
|
||||||
# add attachments
|
# add attachments
|
||||||
if attr[:attachments]
|
if attr[:attachments]
|
||||||
attr[:attachments].each do |attachment|
|
attr[:attachments].each do |attachment|
|
||||||
|
if attachment.class == Hash
|
||||||
|
attachment['content-id'] = nil
|
||||||
|
mail.attachments[ attachment[:filename] ] = attachment
|
||||||
|
else
|
||||||
mail.attachments[attachment.filename] = {
|
mail.attachments[attachment.filename] = {
|
||||||
:content_type => attachment.preferences['Content-Type'],
|
:content_type => attachment.preferences['Content-Type'],
|
||||||
:mime_type => attachment.preferences['Mime-Type'],
|
:mime_type => attachment.preferences['Mime-Type'],
|
||||||
:content => attachment.content
|
:content => attachment.content,
|
||||||
|
'content-id' => nil,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
mail
|
mail
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -25,14 +25,14 @@ class EmailBuildTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
test 'html email check' do
|
test 'html email + attachment check' do
|
||||||
html = '<!DOCTYPE html>
|
html = '<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
<head>
|
<head>
|
||||||
<body style="font-family:Geneva,Helvetica,Arial,sans-serif; font-size: 12px;">
|
<body style="font-family:Geneva,Helvetica,Arial,sans-serif; font-size: 12px;">
|
||||||
<div>> Welcome!</div><div>></div><div>> Thank you for installing Zammad.</div><div>></div>
|
<div>> Welcome!</div><div>></div><div>> Thank you for installing Zammad. äöüß</div><div>></div>
|
||||||
</body>
|
</body>
|
||||||
</html>'
|
</html>'
|
||||||
mail = Channel::EmailBuild.build(
|
mail = Channel::EmailBuild.build(
|
||||||
|
@ -40,18 +40,133 @@ class EmailBuildTest < ActiveSupport::TestCase
|
||||||
:to => 'recipient@example.com',
|
:to => 'recipient@example.com',
|
||||||
:body => html,
|
:body => html,
|
||||||
:content_type => 'text/html',
|
:content_type => 'text/html',
|
||||||
|
:attachments => [
|
||||||
|
{
|
||||||
|
'Mime-Type' => 'image/png',
|
||||||
|
:content => 'xxx',
|
||||||
|
:filename => 'somename.png',
|
||||||
|
},
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
should = '> Welcome!
|
should = '> Welcome!
|
||||||
>
|
>
|
||||||
> Thank you for installing Zammad.
|
> Thank you for installing Zammad. äöüß
|
||||||
>
|
>
|
||||||
'
|
'
|
||||||
assert_equal( should, mail.text_part.body.to_s )
|
assert_equal( should, mail.text_part.body.to_s )
|
||||||
assert_equal( html, mail.html_part.body.to_s )
|
assert_equal( html, mail.html_part.body.to_s )
|
||||||
|
|
||||||
|
parser = Channel::EmailParser.new
|
||||||
|
data = parser.parse( mail.to_s )
|
||||||
|
|
||||||
|
# check body
|
||||||
|
assert_equal( should, data[:body] )
|
||||||
|
|
||||||
|
# check count of attachments, only 2, because 3 part is text message and is already in body
|
||||||
|
assert_equal( 2, data[:attachments].length )
|
||||||
|
|
||||||
|
# check attachments
|
||||||
|
if data[:attachments]
|
||||||
|
data[:attachments].each { |attachment|
|
||||||
|
if attachment[:filename] == 'message.html'
|
||||||
|
assert_equal( nil, attachment[:preferences]['Content-ID'] )
|
||||||
|
assert_equal( true, attachment[:preferences]['content-alternative'] )
|
||||||
|
assert_equal( 'text/html', attachment[:preferences]['Mime-Type'] )
|
||||||
|
assert_equal( 'UTF-8', attachment[:preferences]['Charset'] )
|
||||||
|
elsif attachment[:filename] == 'somename.png'
|
||||||
|
assert_equal( nil, attachment[:preferences]['Content-ID'] )
|
||||||
|
assert_equal( nil, attachment[:preferences]['content-alternative'] )
|
||||||
|
assert_equal( 'image/png', attachment[:preferences]['Mime-Type'] )
|
||||||
|
assert_equal( 'UTF-8', attachment[:preferences]['Charset'] )
|
||||||
|
else
|
||||||
|
assert( false, "invalid attachment, should not be there, #{attachment.inspect}" )
|
||||||
|
end
|
||||||
|
}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test 'plain email + attachment check' do
|
||||||
|
text = '> Welcome!
|
||||||
|
>
|
||||||
|
> Thank you for installing Zammad. äöüß
|
||||||
|
>
|
||||||
|
'
|
||||||
|
mail = Channel::EmailBuild.build(
|
||||||
|
:from => 'sender@example.com',
|
||||||
|
:to => 'recipient@example.com',
|
||||||
|
:body => text,
|
||||||
|
:attachments => [
|
||||||
|
{
|
||||||
|
'Mime-Type' => 'image/png',
|
||||||
|
:content => 'xxx',
|
||||||
|
:filename => 'somename.png',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
should = '> Welcome!
|
||||||
|
>
|
||||||
|
> Thank you for installing Zammad. äöüß
|
||||||
|
>
|
||||||
|
'
|
||||||
|
assert_equal( should, mail.text_part.body.to_s )
|
||||||
|
assert_equal( nil, mail.html_part )
|
||||||
|
|
||||||
|
parser = Channel::EmailParser.new
|
||||||
|
data = parser.parse( mail.to_s )
|
||||||
|
|
||||||
|
# check body
|
||||||
|
assert_equal( should, data[:body] )
|
||||||
|
|
||||||
|
# check count of attachments, 2
|
||||||
|
assert_equal( 1, data[:attachments].length )
|
||||||
|
|
||||||
|
# check attachments
|
||||||
|
if data[:attachments]
|
||||||
|
data[:attachments].each { |attachment|
|
||||||
|
if attachment[:filename] == 'somename.png'
|
||||||
|
assert_equal( nil, attachment[:preferences]['Content-ID'] )
|
||||||
|
assert_equal( nil, attachment[:preferences]['content-alternative'] )
|
||||||
|
assert_equal( 'image/png', attachment[:preferences]['Mime-Type'] )
|
||||||
|
assert_equal( 'UTF-8', attachment[:preferences]['Charset'] )
|
||||||
|
else
|
||||||
|
assert( false, "invalid attachment, should not be there, #{attachment.inspect}" )
|
||||||
|
end
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
test 'plain email + without attachment check' do
|
||||||
|
text = '> Welcome!
|
||||||
|
>
|
||||||
|
> Thank you for installing Zammad. äöüß
|
||||||
|
>
|
||||||
|
'
|
||||||
|
mail = Channel::EmailBuild.build(
|
||||||
|
:from => 'sender@example.com',
|
||||||
|
:to => 'recipient@example.com',
|
||||||
|
:body => text,
|
||||||
|
)
|
||||||
|
|
||||||
|
should = '> Welcome!
|
||||||
|
>
|
||||||
|
> Thank you for installing Zammad. äöüß
|
||||||
|
>
|
||||||
|
'
|
||||||
|
assert_equal( should, mail.body.to_s )
|
||||||
|
assert_equal( nil, mail.html_part )
|
||||||
|
|
||||||
|
parser = Channel::EmailParser.new
|
||||||
|
data = parser.parse( mail.to_s )
|
||||||
|
|
||||||
|
# check body
|
||||||
|
assert_equal( should, data[:body] )
|
||||||
|
|
||||||
|
# check count of attachments, 0
|
||||||
|
assert_equal( 0, data[:attachments].length )
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
test 'html2text' do
|
test 'html2text' do
|
||||||
html = '<!DOCTYPE html>
|
html = '<!DOCTYPE html>
|
||||||
|
@ -85,6 +200,5 @@ you
|
||||||
* #2'
|
* #2'
|
||||||
assert_equal( should, html.html2text )
|
assert_equal( should, html.html2text )
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
Loading…
Reference in a new issue