2013-06-10 16:46:08 -04:00
require 'spec_helper'
require 'email/receiver'
describe Email :: Receiver do
2013-06-13 18:11:10 -04:00
before do
SiteSetting . stubs ( :reply_by_email_address ) . returns ( " reply+%{reply_key}@appmail.adventuretime.ooo " )
end
2013-06-10 16:46:08 -04:00
2013-06-13 18:11:10 -04:00
describe 'invalid emails' do
it " returns unprocessable if the message is blank " do
expect ( Email :: Receiver . new ( " " ) . process ) . to eq ( Email :: Receiver . results [ :unprocessable ] )
end
2013-06-10 16:46:08 -04:00
2013-06-13 18:11:10 -04:00
it " returns unprocessable if the message is not an email " do
expect ( Email :: Receiver . new ( " asdf " * 30 ) . process ) . to eq ( Email :: Receiver . results [ :unprocessable ] )
2013-06-10 16:46:08 -04:00
end
2013-06-13 18:11:10 -04:00
end
2013-06-20 12:38:03 -04:00
describe " with multipart " do
let ( :reply_below ) { File . read ( " #{ Rails . root } /spec/fixtures/emails/multipart.eml " ) }
let ( :receiver ) { Email :: Receiver . new ( reply_below ) }
it " does something " do
receiver . process
expect ( receiver . body ) . to eq (
" So presumably all the quoted garbage and my (proper) signature will get
stripped from my reply? " )
end
end
describe " html only " do
let ( :reply_below ) { File . read ( " #{ Rails . root } /spec/fixtures/emails/html_only.eml " ) }
let ( :receiver ) { Email :: Receiver . new ( reply_below ) }
it " does something " do
receiver . process
expect ( receiver . body ) . to eq ( " The EC2 instance - I've seen that there tends to be odd and " +
" unrecommended settings on the Bitnami installs that I've checked out. " )
end
end
2013-06-19 12:14:01 -04:00
describe " with a content boundary " do
2013-06-20 12:38:03 -04:00
let ( :bounded_email ) { File . read ( " #{ Rails . root } /spec/fixtures/emails/boundary.eml " ) }
2013-06-19 12:14:01 -04:00
let ( :receiver ) { Email :: Receiver . new ( bounded_email ) }
it " does something " do
receiver . process
expect ( receiver . body ) . to eq ( " I'll look into it, thanks! " )
end
end
2013-06-13 18:11:10 -04:00
describe " with a valid email " do
let ( :reply_key ) { " 59d8df8370b7e95c5a49fbf86aeb2c93 " }
2013-06-20 12:38:03 -04:00
let ( :valid_reply ) { File . read ( " #{ Rails . root } /spec/fixtures/emails/valid_reply.eml " ) }
2013-06-13 18:11:10 -04:00
let ( :receiver ) { Email :: Receiver . new ( valid_reply ) }
let ( :post ) { Fabricate . build ( :post ) }
let ( :user ) { Fabricate . build ( :user ) }
let ( :email_log ) { EmailLog . new ( reply_key : reply_key , post_id : 1234 , topic_id : 4567 , user_id : 6677 , post : post , user : user ) }
let ( :reply_body ) {
" I could not disagree more. I am obviously biased but adventure time is the
greatest show ever created . Everyone should watch it .
- Jake out " }
describe " email with non-existant email log " do
before do
EmailLog . expects ( :for ) . returns ( nil )
end
let! ( :result ) { receiver . process }
it " returns missing " do
expect ( result ) . to eq ( Email :: Receiver . results [ :missing ] )
end
2013-06-10 16:46:08 -04:00
end
2013-06-13 18:11:10 -04:00
describe " with an email log " do
before do
EmailLog . expects ( :for ) . with ( reply_key ) . returns ( email_log )
creator = mock
PostCreator . expects ( :new ) . with ( instance_of ( User ) , has_entry ( raw : reply_body ) ) . returns ( creator )
creator . expects ( :create )
end
let! ( :result ) { receiver . process }
it " returns a processed result " do
expect ( result ) . to eq ( Email :: Receiver . results [ :processed ] )
end
it " extracts the body " do
expect ( receiver . body ) . to eq ( reply_body )
end
it " looks up the email log " do
expect ( receiver . email_log ) . to eq ( email_log )
end
it " extracts the key " do
expect ( receiver . reply_key ) . to eq ( reply_key )
end
end
2013-06-10 16:46:08 -04:00
end
2013-06-13 18:11:10 -04:00
2013-06-10 16:46:08 -04:00
end