jam-cloud/ruby/spec/jam_ruby/lib/trail_expires_reminder_spec.rb

139 lines
4.9 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

require "spec_helper"
describe TrialExpiresReminder do
let(:user1) { FactoryGirl.create(:user) }
let(:user2) { FactoryGirl.create(:user) }
let(:user3) { FactoryGirl.create(:user) }
before(:each) do
ActionMailer::Base.delivery_method = :test
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.deliveries = []
User.delete_all
UserMailer.deliveries.clear
Rails.application.config.trial_expires_reminders_effective_from_date = 2.weeks.ago.to_s
end
after(:each) do
ActionMailer::Base.deliveries.clear
end
def no_more_emails_sent
UserMailer.deliveries.clear
TrialExpiresReminder.send_reminders
expect(ActionMailer::Base.deliveries.count).to eq(0)
end
it "sends reminder emails to users whose trials are about to expire" do
user1.subscription_trial_ends_at = 1.days.from_now
user1.subscription_sync_code = 'trial_ended'
user1.save!
user2.subscription_trial_ends_at = 2.days.ago
user2.subscription_sync_code = 'trial_ended'
user2.save!
TrialExpiresReminder.send_reminders
expect(ActionMailer::Base.deliveries.count).to eq(1)
expect(ActionMailer::Base.deliveries.map(&:to).flatten).to include(user2.email)
# Check if the first reminder email was sent by verifying the subject
expect(ActionMailer::Base.deliveries.last.subject).to include("Your free gold trial has expired, but you have great options to keep playing!")
expect(user2.reload.trial_expires_reminder1_sent_at).not_to be_nil
no_more_emails_sent
end
it "does not send reminder emails to users who have already received them" do
user1.reload
user1.subscription_trial_ends_at = 1.days.ago + 1.hour
user1.subscription_sync_code = 'trial_ended'
user1.trial_expires_reminder1_sent_at = Time.now
user1.save!
TrialExpiresReminder.send_reminders
expect(ActionMailer::Base.deliveries.count).to eq(0)
end
it "sends the second reminder email to users whose trials are about to expire" do
user1.reload
user2.reload
# pretend that the first reminder email was sent 2 days ago
user1.subscription_trial_ends_at = 4.days.ago + 1.hour
user1.subscription_sync_code = 'trial_ended'
user1.trial_expires_reminder1_sent_at = 5.days.ago
user1.save!
user2.subscription_trial_ends_at = 4.days.ago + 1.hour
user2.subscription_sync_code = 'trial_ended'
user2.trial_expires_reminder1_sent_at = Time.now
user2.save!
TrialExpiresReminder.send_reminders
expect(ActionMailer::Base.deliveries.count).to eq(1)
expect(ActionMailer::Base.deliveries.map(&:to).flatten).to include(user1.email)
# Check if the second reminder email was sent by verifying the subject
expect(ActionMailer::Base.deliveries.last.subject).to include("Dont forget to check your options to keep playing")
expect(user1.reload.trial_expires_reminder2_sent_at).not_to be_nil
no_more_emails_sent
end
it "sends the third reminder email to users whose trials are about to expire" do
user1.reload
user1.subscription_trial_ends_at = 10.days.ago + 1.hour
user1.subscription_sync_code = 'trial_ended'
user1.trial_expires_reminder1_sent_at = 8.days.ago
user1.trial_expires_reminder2_sent_at = 9.days.ago
user1.save!
TrialExpiresReminder.send_reminders
expect(ActionMailer::Base.deliveries.count).to eq(1)
expect(ActionMailer::Base.deliveries.map(&:to).flatten).to include(user1.email)
# Check if the third reminder email was sent by verifying the subject
expect(ActionMailer::Base.deliveries.last.subject).to include("One last reminder!")
expect(user1.reload.trial_expires_reminder3_sent_at).not_to be_nil
no_more_emails_sent
end
it "sends first and second and third reminder emails to users whose trials are about to expire" do
user1.reload
user2.reload
user3.reload
user1.subscription_trial_ends_at = 2.days.ago
user1.subscription_sync_code = 'trial_ended'
user1.save!
user2.subscription_trial_ends_at = 2.days.ago
user2.trial_expires_reminder1_sent_at = 5.days.ago
user2.subscription_sync_code = 'trial_ended'
user2.save!
user3.subscription_trial_ends_at = 2.days.ago
user3.trial_expires_reminder1_sent_at = 8.days.ago
user3.trial_expires_reminder2_sent_at = 9.days.ago
user3.subscription_sync_code = 'trial_ended'
user3.save!
TrialExpiresReminder.send_reminders
expect(user1.reload.trial_expires_reminder1_sent_at).not_to be_nil
expect(user2.reload.trial_expires_reminder2_sent_at).not_to be_nil
expect(user3.reload.trial_expires_reminder3_sent_at).not_to be_nil
expect(ActionMailer::Base.deliveries.count).to eq(3)
expect(ActionMailer::Base.deliveries.map(&:to).flatten).to include(user1.email, user2.email, user3.email)
no_more_emails_sent
end
end