437 lines
15 KiB
Ruby
437 lines
15 KiB
Ruby
require "spec_helper"
|
||
|
||
###########################################################
|
||
# We test just the mailer templating here. #
|
||
# In other words, make sure there are no glaring oopsies, #
|
||
# such as broken templates, or sending to wrong address #
|
||
###########################################################
|
||
|
||
|
||
describe UserMailer do
|
||
|
||
let(:user) { FactoryGirl.create(:user) }
|
||
|
||
before(:each) do
|
||
#stub_const("APP_CONFIG", app_config)
|
||
UserMailer.deliveries.clear
|
||
end
|
||
|
||
describe "should send confirm email" do
|
||
|
||
let (:mail) { UserMailer.deliveries[0] }
|
||
let (:signup_confirmation_url) { "/confirm" }
|
||
let (:signup_confirmation_url_with_token ) { "#{signup_confirmation_url}/#{user.signup_token}" }
|
||
|
||
before(:each) do
|
||
UserMailer.confirm_email(user, signup_confirmation_url_with_token).deliver_now
|
||
end
|
||
|
||
it { UserMailer.deliveries.length.should == 1 }
|
||
it { mail['from'].to_s.should == UserMailer::DEFAULT_SENDER }
|
||
it { mail['to'].to_s.should == user.email }
|
||
it { mail.multipart?.should == true } # because we send plain + html
|
||
|
||
# verify that the messages are correctly configured
|
||
it { mail.html_part.body.include?("delighted").should be_true }
|
||
it { mail.html_part.body.include?(signup_confirmation_url_with_token).should be_true }
|
||
it { mail.text_part.body.include?("delighted").should be_true }
|
||
it { mail.text_part.body.include?(signup_confirmation_url_with_token).should be_true }
|
||
end
|
||
|
||
describe "should send welcome email" do
|
||
|
||
let (:mail) { UserMailer.deliveries[0] }
|
||
|
||
before(:each) do
|
||
UserMailer.welcome_message(user).deliver_now
|
||
end
|
||
|
||
|
||
it { UserMailer.deliveries.length.should == 1 }
|
||
it { mail['from'].to_s.should == UserMailer::DEFAULT_SENDER }
|
||
it { mail['to'].to_s.should == user.email }
|
||
it { mail.multipart?.should == true } # because we send plain + html
|
||
|
||
# verify that the messages are correctly configured
|
||
it { mail.html_part.body.include?("delighted").should be_true }
|
||
it { mail.text_part.body.include?("delighted").should be_true }
|
||
end
|
||
|
||
describe "should send reset password" do
|
||
|
||
let(:mail) { UserMailer.deliveries[0] }
|
||
before(:each) do
|
||
UserMailer.password_reset(user, '/reset_password').deliver_now
|
||
end
|
||
|
||
|
||
it { UserMailer.deliveries.length.should == 1 }
|
||
|
||
it { mail['from'].to_s.should == UserMailer::DEFAULT_SENDER }
|
||
it { mail['to'].to_s.should == user.email }
|
||
it { mail.multipart?.should == true } # because we send plain + html
|
||
|
||
# verify that the messages are correctly configured
|
||
it { mail.html_part.body.include?("Reset").should be_true }
|
||
it { mail.text_part.body.include?("change your JamKazam password").should be_true }
|
||
end
|
||
|
||
describe "should send change password confirmation" do
|
||
|
||
let(:mail) { UserMailer.deliveries[0] }
|
||
|
||
before(:each) do
|
||
UserMailer.password_changed(user).deliver_now
|
||
end
|
||
|
||
it { UserMailer.deliveries.length.should == 1 }
|
||
|
||
it { mail['from'].to_s.should == UserMailer::DEFAULT_SENDER }
|
||
it { mail['to'].to_s.should == user.email }
|
||
it { mail.multipart?.should == true } # because we send plain + html
|
||
|
||
# verify that the messages are correctly configured
|
||
it { mail.html_part.body.include?("changed your password").should be_true }
|
||
it { mail.text_part.body.include?("changed your password").should be_true }
|
||
end
|
||
|
||
describe "should send update email confirmation" do
|
||
|
||
let(:mail) { UserMailer.deliveries[0] }
|
||
|
||
before(:each) do
|
||
UserMailer.updated_email(user).deliver_now
|
||
end
|
||
|
||
it { UserMailer.deliveries.length.should == 1 }
|
||
|
||
it { mail['from'].to_s.should == UserMailer::DEFAULT_SENDER }
|
||
it { mail['to'].to_s.should == user.email }
|
||
it { mail.multipart?.should == true } # because we send plain + html
|
||
|
||
# verify that the messages are correctly configured
|
||
it { mail.html_part.body.include?("<b>#{user.email}</b> has been confirmed as your new email address.").should be_true }
|
||
it { mail.text_part.body.include?("#{user.email} has been confirmed as your new email address.").should be_true }
|
||
end
|
||
|
||
describe "should send updating email" do
|
||
|
||
let(:mail) { UserMailer.deliveries[0] }
|
||
|
||
before(:each) do
|
||
user.update_email = "my_new_email@jamkazam.com"
|
||
UserMailer.updating_email(user).deliver_now
|
||
end
|
||
|
||
it { UserMailer.deliveries.length.should == 1 }
|
||
|
||
it { mail['from'].to_s.should == UserMailer::DEFAULT_SENDER }
|
||
it { mail['to'].to_s.should == user.update_email }
|
||
it { mail.multipart?.should == true } # because we send plain + html
|
||
|
||
# verify that the messages are correctly configured
|
||
it { mail.html_part.body.include?("to confirm your change in email").should be_true }
|
||
it { mail.text_part.body.include?("to confirm your change in email").should be_true }
|
||
|
||
# verify can unsubscribe from bulk emails
|
||
|
||
it {mail.html_part.body.include?('here to unsubscribe').should be_true}
|
||
it {mail.html_part.body.include?("https://www.jamkazam.com/unsubscribe/#{user.unsubscribe_token}")}
|
||
end
|
||
|
||
describe "notifications" do
|
||
|
||
let(:mail) { UserMailer.deliveries[0] }
|
||
let(:music_session) { FactoryGirl.create(:music_session) }
|
||
|
||
it "should send upcoming email" do
|
||
user.update_email = "my_new_email@jamkazam.com"
|
||
UserMailer.scheduled_session_reminder_upcoming(music_session.creator, music_session).deliver_now
|
||
UserMailer.deliveries.length.should == 1
|
||
|
||
mail['from'].to_s.should == UserMailer::DEFAULT_SENDER
|
||
mail['to'].to_s.should == music_session.creator.email# rsvp_requests.first.user.email
|
||
mail.multipart?.should == true # because we send plain + htm
|
||
|
||
# verify that the messages are correctly configured
|
||
mail.html_part.body.include?("This is a reminder that your JamKazam session").should be_true
|
||
mail.text_part.body.include?("This is a reminder that your JamKazam session").should be_true
|
||
mail.html_part.body.include?("starts in 1 hour").should be_true
|
||
mail.text_part.body.include?("starts in 1 hour").should be_true
|
||
|
||
|
||
end
|
||
|
||
it "should send 1-day reminder" do
|
||
user.update_email = "my_new_email@jamkazam.com"
|
||
UserMailer.scheduled_session_reminder_day(music_session.creator, music_session).deliver_now
|
||
UserMailer.deliveries.length.should == 1
|
||
|
||
mail['from'].to_s.should == UserMailer::DEFAULT_SENDER
|
||
mail['to'].to_s.should == music_session.creator.email# rsvp_requests.first.user.email
|
||
mail.multipart?.should == true # because we send plain + htm
|
||
|
||
# verify that the messages are correctly configured
|
||
mail.html_part.body.include?("This is a reminder that your JamKazam session").should be_true
|
||
mail.text_part.body.include?("This is a reminder that your JamKazam session").should be_true
|
||
mail.html_part.body.include?("is scheduled for tomorrow").should be_true
|
||
mail.text_part.body.include?("is scheduled for tomorrow").should be_true
|
||
|
||
end
|
||
end
|
||
|
||
describe "sends new musicians email" do
|
||
let(:mail) { UserMailer.deliveries[0] }
|
||
before(:each) do
|
||
UserMailer.new_musicians_match(user, []).deliver_now
|
||
end
|
||
it { UserMailer.deliveries.length.should == 1 }
|
||
it { mail['from'].to_s.should == UserMailer::DEFAULT_SENDER }
|
||
it { mail['to'].to_s.should == user.email }
|
||
it { mail.multipart?.should == true } # because we send plain + html
|
||
end
|
||
|
||
# describe "sends new musicians email" do
|
||
|
||
# let(:mail) { UserMailer.deliveries[0] }
|
||
|
||
# before(:each) do
|
||
# UserMailer.new_musicians(user, User.musicians).deliver_now
|
||
# end
|
||
|
||
# it { UserMailer.deliveries.length.should == 1 }
|
||
|
||
# it { mail['from'].to_s.should == UserMailer::DEFAULT_SENDER }
|
||
# it { mail['to'].to_s.should == user.email }
|
||
# it { mail.multipart?.should == true } # because we send plain + html
|
||
|
||
# # verify that the messages are correctly configured
|
||
# it { mail.html_part.body.include?("New JamKazam Musicians in your Area").should be_true }
|
||
# it { mail.text_part.body.include?("New JamKazam Musicians in your Area").should be_true }
|
||
# end
|
||
|
||
describe "sends group session reminder 1", focus: true do
|
||
let(:mail) { ActionMailer::Base.deliveries.last }
|
||
|
||
before(:each) do
|
||
ActionMailer::Base.deliveries.clear
|
||
UserMailer.group_session_reminder1(user).deliver_now
|
||
end
|
||
|
||
it "sends exactly one email" do
|
||
expect(ActionMailer::Base.deliveries.length).to eq(1)
|
||
end
|
||
|
||
it "has the correct from address" do
|
||
#expect(mail.from).to eq([UserMailer::DEFAULT_SENDER])
|
||
mail['from'].to_s.should == UserMailer::DEFAULT_SENDER
|
||
end
|
||
|
||
it "has the correct recipient" do
|
||
expect(mail.to).to eq([user.email])
|
||
end
|
||
|
||
it "is multipart" do
|
||
expect(mail).to be_multipart
|
||
end
|
||
|
||
it "has the expected subject" do
|
||
expect(mail.subject).to include("It’s time to start playing music with others online!")
|
||
end
|
||
|
||
it "includes the correct content in the HTML part" do
|
||
expect(mail.html_part.body.to_s).to include("Now that you have set up your gear and checked it out in a solo session on your own")
|
||
end
|
||
|
||
it "includes the correct content in the text part" do
|
||
expect(mail.text_part.body.to_s).to include("Now that you have set up your gear and checked it out in a solo session on your own")
|
||
end
|
||
end
|
||
|
||
describe "sends group session reminder 2", focus: true do
|
||
let(:mail) { ActionMailer::Base.deliveries.last }
|
||
|
||
before(:each) do
|
||
ActionMailer::Base.deliveries.clear
|
||
UserMailer.group_session_reminder2(user).deliver_now
|
||
end
|
||
|
||
it "sends exactly one email" do
|
||
expect(ActionMailer::Base.deliveries.length).to eq(1)
|
||
end
|
||
|
||
it "has the correct from address" do
|
||
mail['from'].to_s.should == UserMailer::DEFAULT_SENDER
|
||
end
|
||
|
||
it "has the correct recipient" do
|
||
expect(mail.to).to eq([user.email])
|
||
end
|
||
|
||
it "is multipart" do
|
||
expect(mail).to be_multipart
|
||
end
|
||
|
||
it "has the expected subject" do
|
||
expect(mail.subject).to include("Take the last step to play online with others now, and experience the joy")
|
||
end
|
||
|
||
it "includes the correct content in the HTML part" do
|
||
expect(mail.html_part.body.to_s).to include("If you signed up for JamKazam to play music with others online")
|
||
end
|
||
|
||
it "includes the correct content in the text part" do
|
||
expect(mail.text_part.body.to_s).to include("If you signed up for JamKazam to play music with others online")
|
||
end
|
||
end
|
||
|
||
describe "sends group session reminder 3", focus: true do
|
||
let(:mail) { ActionMailer::Base.deliveries.last }
|
||
|
||
before(:each) do
|
||
ActionMailer::Base.deliveries.clear
|
||
UserMailer.group_session_reminder3(user).deliver_now
|
||
end
|
||
|
||
it "sends exactly one email" do
|
||
expect(ActionMailer::Base.deliveries.length).to eq(1)
|
||
end
|
||
|
||
it "has the correct from address" do
|
||
mail['from'].to_s.should == UserMailer::DEFAULT_SENDER
|
||
end
|
||
|
||
it "has the correct recipient" do
|
||
expect(mail.to).to eq([user.email])
|
||
end
|
||
|
||
it "is multipart" do
|
||
expect(mail).to be_multipart
|
||
end
|
||
|
||
it "has the expected subject" do
|
||
expect(mail.subject).to include("Don’t waste your free 30-day premium gold plan–get in a session with others now!")
|
||
end
|
||
|
||
it "includes the correct content in the HTML part" do
|
||
expect(mail.html_part.body.to_s).to include("When you sign up for JamKazam, we give you a free 30-day premium")
|
||
end
|
||
|
||
it "includes the correct content in the text part" do
|
||
expect(mail.text_part.body.to_s).to include("When you sign up for JamKazam, we give you a free 30-day premium")
|
||
end
|
||
end
|
||
|
||
describe "sends trial expires reminder 1", focus: true do
|
||
let(:mail) { ActionMailer::Base.deliveries.last }
|
||
|
||
before(:each) do
|
||
ActionMailer::Base.deliveries.clear
|
||
UserMailer.trial_expires_reminder1(user).deliver_now
|
||
end
|
||
|
||
it "sends exactly one email" do
|
||
expect(ActionMailer::Base.deliveries.length).to eq(1)
|
||
end
|
||
|
||
it "has the correct from address" do
|
||
mail['from'].to_s.should == UserMailer::DEFAULT_SENDER
|
||
end
|
||
|
||
it "has the correct recipient" do
|
||
expect(mail.to).to eq([user.email])
|
||
end
|
||
|
||
it "is multipart" do
|
||
expect(mail).to be_multipart
|
||
end
|
||
|
||
it "has the expected subject" do
|
||
expect(mail.subject).to include("Your free gold trial has expired, but you have great options to keep playing!")
|
||
end
|
||
|
||
it "includes the correct content in the HTML part" do
|
||
expect(mail.html_part.body.to_s).to include("We hope you’ve enjoyed your 30-day free gold trial with JamKazam")
|
||
end
|
||
|
||
it "includes the correct content in the text part" do
|
||
expect(mail.text_part.body.to_s).to include("We hope you’ve enjoyed your 30-day free gold trial with JamKazam")
|
||
end
|
||
end
|
||
|
||
describe "sends trial expires reminder 2", focus: true do
|
||
let(:mail) { ActionMailer::Base.deliveries.last }
|
||
|
||
before(:each) do
|
||
ActionMailer::Base.deliveries.clear
|
||
UserMailer.trial_expires_reminder2(user).deliver_now
|
||
end
|
||
|
||
it "sends exactly one email" do
|
||
expect(ActionMailer::Base.deliveries.length).to eq(1)
|
||
end
|
||
|
||
it "has the correct from address" do
|
||
mail['from'].to_s.should == UserMailer::DEFAULT_SENDER
|
||
end
|
||
|
||
it "has the correct recipient" do
|
||
expect(mail.to).to eq([user.email])
|
||
end
|
||
|
||
it "is multipart" do
|
||
expect(mail).to be_multipart
|
||
end
|
||
|
||
it "has the expected subject" do
|
||
expect(mail.subject).to include("Don’t forget to check your options to keep playing")
|
||
end
|
||
|
||
it "includes the correct content in the HTML part" do
|
||
expect(mail.html_part.body.to_s).to include("Your 30-day free gold trial with JamKazam has expired")
|
||
end
|
||
|
||
it "includes the correct content in the text part" do
|
||
expect(mail.text_part.body.to_s).to include("Your 30-day free gold trial with JamKazam has expired")
|
||
end
|
||
end
|
||
|
||
describe "sends trial expires reminder 3", focus: true do
|
||
let(:mail) { ActionMailer::Base.deliveries.last }
|
||
|
||
before(:each) do
|
||
ActionMailer::Base.deliveries.clear
|
||
UserMailer.trial_expires_reminder3(user).deliver_now
|
||
end
|
||
|
||
it "sends exactly one email" do
|
||
expect(ActionMailer::Base.deliveries.length).to eq(1)
|
||
end
|
||
|
||
it "has the correct from address" do
|
||
mail['from'].to_s.should == UserMailer::DEFAULT_SENDER
|
||
end
|
||
|
||
it "has the correct recipient" do
|
||
expect(mail.to).to eq([user.email])
|
||
end
|
||
|
||
it "is multipart" do
|
||
expect(mail).to be_multipart
|
||
end
|
||
|
||
it "has the expected subject" do
|
||
expect(mail.subject).to include("One last reminder!")
|
||
end
|
||
|
||
it "includes the correct content in the HTML part" do
|
||
expect(mail.html_part.body.to_s).to include("Your 30-day free gold trial with JamKazam has expired")
|
||
end
|
||
|
||
it "includes the correct content in the text part" do
|
||
expect(mail.text_part.body.to_s).to include("Your 30-day free gold trial with JamKazam has expired")
|
||
end
|
||
end
|
||
|
||
end
|