jam-cloud/ruby/spec/jam_ruby/models/email_batch_spec.rb

225 lines
7.6 KiB
Ruby

require 'spec_helper'
describe EmailBatch do
after(:each) do
Timecop.return
end
describe 'all users' do
# before { pending }
let (:email_batch) { FactoryGirl.create(:email_batch) }
before(:each) do
BatchMailer.deliveries.clear
end
it 'has test emails setup' do
expect(email_batch.test_emails.present?).to be true
expect(email_batch.pending?).to be true
users = email_batch.test_users
expect(email_batch.test_count).to eq(users.count)
end
end
describe 'new musician' do
before { pending }
let (:new_musician_batch) { FactoryGirl.create(:email_batch_new_musician) }
before(:each) do
@u1 = FactoryGirl.create(:user, :lat => 37.791649, :lng => -122.394395, :email => 'jonathan@jamkazam.com', :subscribe_email => true, :created_at => Time.now - 3.weeks)
@u2 = FactoryGirl.create(:user, :lat => 37.791649, :lng => -122.394395, :subscribe_email => true)
@u3 = FactoryGirl.create(:user, :lat => 37.791649, :lng => -122.394395, :subscribe_email => false, :created_at => Time.now - 3.weeks)
@u4 = FactoryGirl.create(:user, :lat => 37.791649, :lng => -122.394395, :subscribe_email => true, :created_at => Time.now - 3.weeks)
end
it 'find new musicians with good score' do
new_musician_batch.fetch_recipients do |new_musicians|
expect(new_musicians.count).to eq(2)
num = (new_musicians.keys.map(&:id) - [@u1.id, @u4.id]).count
expect(num).to eq(0)
end
end
it 'cycles through states properly' do
new_musician_batch.deliver_batch
expect(UserMailer.deliveries.length).to eq(2)
new_musician_batch.reload
expect(new_musician_batch.delivered?).to eq(true)
expect(new_musician_batch.sent_count).to eq(2)
end
end
context 'user progress' do
before { pending }
describe 'one at a time' do
let(:batchp) {
FactoryGirl.create(:email_batch_progression, :sub_type => :client_notdl)
}
let(:user_existing) {
FactoryGirl.create(:user,
:created_at => Time.now - (2 * batchp.days_past_for_trigger_index(2)).days)
}
after(:each) do
batchp.clear_batch_sets!
Timecop.return
end
it 'sends one email' do
user_existing
batchp.deliver_batch
expect(ProgressMailer.deliveries.length).to eq(1)
end
end
describe 'client not downloaded' do
before { pending }
let(:batchp) {
FactoryGirl.create(:email_batch_progression, :sub_type => :client_notdl)
}
let(:user_) { FactoryGirl.create(:user) }
let(:user_existing) {
FactoryGirl.create(:user,
:created_at => Time.now - (2 * batchp.days_past_for_trigger_index(2)).days)
}
after(:each) do
batchp.clear_batch_sets!
Timecop.return
end
it 'returns no users' do
user_
expect(batchp.fetch_recipients.count).to eq(0)
end
it 'returns user first trigger' do
user_
expect(batchp.fetch_recipients(0).count).to eq(0)
expect(batchp.fetch_recipients(1).count).to eq(0)
expect(batchp.fetch_recipients(2).count).to eq(0)
dd = user_.created_at + batchp.days_past_for_trigger_index(0).days
Timecop.travel(dd)
expect(batchp.fetch_recipients(0).count).to eq(1)
expect(batchp.fetch_recipients(1).count).to eq(0)
expect(batchp.fetch_recipients(2).count).to eq(0)
batchp.make_set(user_, 0)
expect(batchp.fetch_recipients(0).count).to eq(0)
expect(batchp.fetch_recipients(1).count).to eq(0)
expect(batchp.fetch_recipients(2).count).to eq(0)
dd = dd + batchp.days_past_for_trigger_index(1).days
Timecop.travel(dd)
expect(batchp.fetch_recipients(0).count).to eq(0)
expect(batchp.fetch_recipients(1).count).to eq(1)
expect(batchp.fetch_recipients(2).count).to eq(0)
batchp.make_set(user_, 1)
expect(batchp.fetch_recipients(0).count).to eq(0)
expect(batchp.fetch_recipients(1).count).to eq(0)
expect(batchp.fetch_recipients(2).count).to eq(0)
dd = dd + batchp.days_past_for_trigger_index(2).days
Timecop.travel(dd)
expect(batchp.fetch_recipients(0).count).to eq(0)
expect(batchp.fetch_recipients(1).count).to eq(0)
expect(batchp.fetch_recipients(2).count).to eq(1)
batchp.make_set(user_, 2)
expect(batchp.fetch_recipients(0).count).to eq(0)
expect(batchp.fetch_recipients(1).count).to eq(0)
expect(batchp.fetch_recipients(2).count).to eq(0)
end
it 'handles existing users' do
user_existing
expect(batchp.fetch_recipients(0).count).to eq(1)
expect(batchp.fetch_recipients(1).count).to eq(0)
expect(batchp.fetch_recipients(2).count).to eq(0)
dd = user_existing.created_at + batchp.days_past_for_trigger_index(0).days
Timecop.travel(dd)
batchp.make_set(user_existing, 0)
expect(batchp.fetch_recipients(0).count).to eq(0)
expect(batchp.fetch_recipients(1).count).to eq(0)
expect(batchp.fetch_recipients(2).count).to eq(0)
dd = dd + batchp.days_past_for_trigger_index(1).days
Timecop.travel(dd)
expect(batchp.fetch_recipients(0).count).to eq(0)
expect(batchp.fetch_recipients(1).count).to eq(1)
expect(batchp.fetch_recipients(2).count).to eq(0)
batchp.make_set(user_existing, 1)
dd = dd + batchp.days_past_for_trigger_index(2).days
Timecop.travel(dd)
expect(batchp.fetch_recipients(2).count).to eq(1)
batchp.make_set(user_existing, 2)
expect(batchp.fetch_recipients(2).count).to eq(0)
dd = dd + 1
Timecop.travel(dd)
expect(batchp.fetch_recipients(2).count).to eq(0)
end
it 'skips some days' do
user_
dd = user_.created_at + batchp.days_past_for_trigger_index(1).days
Timecop.travel(dd)
expect(batchp.fetch_recipients(0).count).to eq(1)
expect(batchp.fetch_recipients(1).count).to eq(0)
expect(batchp.fetch_recipients(2).count).to eq(0)
batchp.make_set(user_, 0)
expect(batchp.fetch_recipients(0).count).to eq(0)
expect(batchp.fetch_recipients(1).count).to eq(0)
dd = dd + batchp.days_past_for_trigger_index(1).days
Timecop.travel(dd)
expect(batchp.fetch_recipients(0).count).to eq(0)
expect(batchp.fetch_recipients(1).count).to eq(1)
expect(batchp.fetch_recipients(2).count).to eq(0)
batchp.make_set(user_, 1)
expect(batchp.fetch_recipients(2).count).to eq(0)
dd = dd + batchp.days_past_for_trigger_index(2).days
Timecop.travel(dd)
expect(batchp.fetch_recipients(0).count).to eq(0)
expect(batchp.fetch_recipients(1).count).to eq(0)
expect(batchp.fetch_recipients(2).count).to eq(1)
batchp.make_set(user_, 2)
expect(batchp.fetch_recipients(2).count).to eq(0)
end
end
describe 'loop bunch of users' do
let(:batchp) {
FactoryGirl.create(:email_batch_progression, :sub_type => :client_notdl)
}
it 'returns no users' do
users = []
20.times { |nn| users << FactoryGirl.create(:user) }
expect(batchp.fetch_recipients(0,5).count).to eq(0)
dd = users[0].created_at + batchp.days_past_for_trigger_index(0).days
Timecop.travel(dd)
expect(batchp.fetch_recipients(0,5).count).to eq(20)
users.each { |uu| batchp.make_set(uu, 0) }
expect(batchp.fetch_recipients(0,5).count).to eq(0)
end
end
end
end