165 lines
4.7 KiB
Ruby
165 lines
4.7 KiB
Ruby
RSpec.describe Hanami::Mailer do
|
|
describe '.deliver' do
|
|
before do
|
|
Hanami::Mailer.deliveries.clear
|
|
end
|
|
|
|
it 'can deliver with specified charset' do
|
|
CharsetMailer.deliver(charset: charset = 'iso-2022-jp')
|
|
|
|
mail = Hanami::Mailer.deliveries.first
|
|
expect(mail.charset).to eq(charset)
|
|
expect(mail.parts.first.charset).to eq(charset)
|
|
end
|
|
|
|
it "raises error when 'from' isn't specified" do
|
|
expect { MissingFromMailer.deliver }.to raise_error(Hanami::Mailer::MissingDeliveryDataError)
|
|
end
|
|
|
|
it "raises error when 'to' isn't specified" do
|
|
expect { MissingToMailer.deliver }.to raise_error(Hanami::Mailer::MissingDeliveryDataError)
|
|
end
|
|
|
|
describe 'test delivery with hardcoded values' do
|
|
before do
|
|
WelcomeMailer.deliver
|
|
@mail = Hanami::Mailer.deliveries.first
|
|
end
|
|
|
|
after do
|
|
Hanami::Mailer.deliveries.clear
|
|
end
|
|
|
|
it 'delivers the mail' do
|
|
expect(Hanami::Mailer.deliveries.length).to eq(1)
|
|
end
|
|
|
|
it 'sends the correct information' do
|
|
expect(@mail.from).to eq(['noreply@sender.com'])
|
|
expect(@mail.to).to eq(['noreply@recipient.com', 'owner@recipient.com'])
|
|
expect(@mail.cc).to eq(['cc@recipient.com'])
|
|
expect(@mail.bcc).to eq(['bcc@recipient.com'])
|
|
expect(@mail.subject).to eq('Welcome')
|
|
end
|
|
|
|
it 'has the correct templates' do
|
|
expect(@mail.html_part.to_s).to include(%(template))
|
|
expect(@mail.text_part.to_s).to include(%(template))
|
|
end
|
|
|
|
it 'interprets the prepare statement' do
|
|
attachment = @mail.attachments['invoice.pdf']
|
|
|
|
expect(attachment).to be_kind_of(Mail::Part)
|
|
|
|
expect(attachment).to be_attachment
|
|
expect(attachment).to_not be_inline
|
|
expect(attachment).to_not be_multipart
|
|
|
|
expect(attachment.filename).to eq('invoice.pdf')
|
|
|
|
expect(attachment.content_type).to match('application/pdf')
|
|
expect(attachment.content_type).to match('filename=invoice.pdf')
|
|
end
|
|
end
|
|
|
|
describe 'test delivery with methods' do
|
|
before do
|
|
@user = User.new('Name', 'student@deigirls.com')
|
|
MethodMailer.deliver(user: @user)
|
|
|
|
@mail = Hanami::Mailer.deliveries.first
|
|
end
|
|
|
|
after do
|
|
Hanami::Mailer.deliveries.clear
|
|
end
|
|
|
|
it 'delivers the mail' do
|
|
expect(Hanami::Mailer.deliveries.length).to eq(1)
|
|
end
|
|
|
|
it 'sends the correct information' do
|
|
expect(@mail.from).to eq(["hello-#{@user.name.downcase}@example.com"])
|
|
expect(@mail.to).to eq([@user.email])
|
|
expect(@mail.subject).to eq("Hello, #{@user.name}")
|
|
end
|
|
end
|
|
|
|
describe 'multipart' do
|
|
after do
|
|
Hanami::Mailer.deliveries.clear
|
|
end
|
|
|
|
it 'delivers all the parts by default' do
|
|
WelcomeMailer.deliver
|
|
|
|
mail = Hanami::Mailer.deliveries.first
|
|
body = mail.body.encoded
|
|
|
|
expect(body).to include(%(<h1>Hello World!</h1>))
|
|
expect(body).to include(%(This is a txt template))
|
|
end
|
|
|
|
it 'can deliver only the text part' do
|
|
WelcomeMailer.deliver(format: :txt)
|
|
|
|
mail = Hanami::Mailer.deliveries.first
|
|
body = mail.body.encoded
|
|
|
|
expect(body).to_not include(%(<h1>Hello World!</h1>))
|
|
expect(body).to include(%(This is a txt template))
|
|
end
|
|
|
|
it 'can deliver only the html part' do
|
|
WelcomeMailer.deliver(format: :html)
|
|
|
|
mail = Hanami::Mailer.deliveries.first
|
|
body = mail.body.encoded
|
|
|
|
expect(body).to include(%(<h1>Hello World!</h1>))
|
|
expect(body).to_not include(%(This is a txt template))
|
|
end
|
|
end
|
|
|
|
describe 'custom delivery' do
|
|
before do
|
|
@options = options = { deliveries: [] }
|
|
|
|
# Hanami::Mailer.reset!
|
|
# Hanami::Mailer.configure do
|
|
# delivery_method MandrillDeliveryMethod, options
|
|
# end.load!
|
|
|
|
WelcomeMailer.deliver
|
|
|
|
@mail = options.fetch(:deliveries).first
|
|
end
|
|
|
|
it 'delivers the mail'
|
|
# it 'delivers the mail' do
|
|
# @options.fetch(:deliveries).length.must_equal 1
|
|
# end
|
|
|
|
# it 'sends the correct information' do
|
|
# @mail.from.must_equal ['noreply@sender.com']
|
|
# @mail.to.must_equal ['noreply@recipient.com']
|
|
# @mail.subject.must_equal "Welcome"
|
|
# end
|
|
|
|
# it 'has the correct templates' do
|
|
# @mail.html_part.to_s.must_include %(template)
|
|
# @mail.text_part.to_s.must_include %(template)
|
|
# end
|
|
|
|
# it 'interprets the prepare statement' do
|
|
# @mail.attachments['invoice.pdf'].wont_be_nil
|
|
# end
|
|
|
|
# it 'adds the attachment to the mail object' do
|
|
# @mail.attachments['render_mailer.html.erb'].wont_be_nil
|
|
# end
|
|
end
|
|
end
|
|
end
|