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", focus: true 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?("#{user.email} 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 end