require 'spec_helper'
describe Outbox::Messages::Email do
it 'sets common email fields' do
email = Outbox::Messages::Email.new do
to 'bob@gmail.com'
from 'john@gmail.com'
subject 'Simple email subject'
body 'Hello world.'
end
expect(email.to).to eq(['bob@gmail.com'])
expect(email.from).to eq(['john@gmail.com'])
expect(email.subject).to eq('Simple email subject')
expect(email.body).to eq('Hello world.')
end
it 'sets a multipart body' do
email = Outbox::Messages::Email.new do
text_part do
body 'Hello world.'
end
html_part do
body '
Hello world.
'
end
end
expect(email.parts.length).to eq(2)
end
describe '.registered_client_aliases' do
it 'includes TestClient' do
expect(Outbox::Messages::Email.registered_client_aliases[:test]).to eq(Outbox::Clients::TestClient)
end
it 'includes MailClient' do
expect(Outbox::Messages::Email.registered_client_aliases[:mail]).to eq(Outbox::Clients::MailClient)
end
end
describe '.default_client' do
it 'defaults to MailClient' do
expect(Outbox::Messages::Email.default_client).to be_an_instance_of(Outbox::Clients::MailClient)
end
end
describe '#audience=' do
context 'with a string' do
it 'sets the To: field' do
email = Outbox::Messages::Email.new
email.audience = 'bob@gmail.com'
expect(email.to).to eq(['bob@gmail.com'])
end
end
context 'with an array' do
it 'sets the To: field' do
email = Outbox::Messages::Email.new
email.audience = ['bob@gmail.com', 'john@gmail.com']
expect(email.to).to eq(['bob@gmail.com', 'john@gmail.com'])
end
end
context 'with a hash' do
it 'sets multiple fields' do
email = Outbox::Messages::Email.new
email.audience = {
:to => 'bob@gmail.com',
:cc => 'john@gmail.com',
'bcc' => 'sally@gmail.com',
:from => 'someone@gmail.com'
}
expect(email.to).to eq(['bob@gmail.com'])
expect(email.cc).to eq(['john@gmail.com'])
expect(email.bcc).to eq(['sally@gmail.com'])
expect(email.from).to be_nil
end
end
context 'with an object' do
it 'sets multiple fields' do
email = Outbox::Messages::Email.new
email.audience = OpenStruct.new to: 'bob@gmail.com', cc: 'john@gmail.com'
expect(email.to).to eq(['bob@gmail.com'])
expect(email.cc).to eq(['john@gmail.com'])
end
end
end
describe '#validate_fields' do
before do
@valid_email = Outbox::Messages::Email.new do
to 'bob@gmail.com'
from 'john@gmail.com'
body 'Hello world.'
end
end
it 'does not raise an error with a valid email' do
expect{@valid_email.validate_fields}.not_to raise_error()
end
it 'raises an error without a recipient' do
@valid_email.to = nil
expect{@valid_email.validate_fields}.to raise_error(Outbox::MissingRequiredFieldError)
end
it 'does not raise an error with a Cc: field' do
@valid_email.to = nil
@valid_email.cc = 'bob@gmail.com'
expect{@valid_email.validate_fields}.not_to raise_error()
end
it 'does not raise an error with a Bcc: field' do
@valid_email.to = nil
@valid_email.bcc = 'bob@gmail.com'
expect{@valid_email.validate_fields}.not_to raise_error()
end
it 'raises an error without a receiver' do
@valid_email.from = nil
expect{@valid_email.validate_fields}.to raise_error(Outbox::MissingRequiredFieldError)
end
it 'does not raise an error with a Return-path: field' do
@valid_email.from = nil
@valid_email.return_path = 'bob@gmail.com'
expect{@valid_email.validate_fields}.not_to raise_error()
end
it 'does not raise an error with a Sender: field' do
@valid_email.from = nil
@valid_email.sender = 'bob@gmail.com'
expect{@valid_email.validate_fields}.not_to raise_error()
end
end
end