134 lines
4.4 KiB
Ruby
134 lines
4.4 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe EmailBatch do
|
|
|
|
after(:each) do
|
|
Timecop.return
|
|
end
|
|
|
|
describe 'all users' do
|
|
let (:email_batch) { FactoryGirl.create(:email_batch) }
|
|
|
|
before { pending }
|
|
|
|
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
|
|
let (:new_musician_batch) { FactoryGirl.create(:email_batch_new_musician) }
|
|
|
|
before { pending }
|
|
|
|
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 'has correct time since last batch' do
|
|
tt = EmailBatchNewMusician.time_since_last_batch
|
|
expect(tt.to_i).to be < (Time.now - 1.week).to_i
|
|
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
|
|
|
|
describe 'client not downloaded' do
|
|
let(:batchp) {
|
|
FactoryGirl.create(:email_batch_progression, :sub_type => :client_notdl)
|
|
}
|
|
let(:user_) { FactoryGirl.create(:user) }
|
|
let(:user_trigger0) {
|
|
FactoryGirl.create(:user,
|
|
:created_at => Time.now - batchp.days_past_for_trigger_index(0).days)
|
|
}
|
|
let(:user_trigger1) {
|
|
FactoryGirl.create(:user,
|
|
:created_at => Time.now - batchp.days_past_for_trigger_index(1).days)
|
|
}
|
|
let(:user_trigger2) {
|
|
FactoryGirl.create(:user,
|
|
:created_at => Time.now - batchp.days_past_for_trigger_index(2).days)
|
|
}
|
|
|
|
after(:each) do
|
|
batchp.clear_batch_sets!
|
|
end
|
|
|
|
it 'returns no users' do
|
|
pending
|
|
user_
|
|
expect(batchp.fetch_client_notdl.count).to eq(0)
|
|
end
|
|
|
|
it 'returns user first trigger' do
|
|
pending
|
|
user_
|
|
user_trigger2
|
|
expect(batchp.fetch_client_notdl.count).to eq(1)
|
|
batchp.make_set(user_trigger2, 0)
|
|
expect(batchp.fetch_client_notdl(0).count).to eq(0)
|
|
end
|
|
|
|
it 'progressively returns expected count' do
|
|
user_; user_trigger0; user_trigger1
|
|
Timecop.travel(user_trigger2.created_at + batchp.days_past_for_trigger_index(0).days)
|
|
expect(batchp.fetch_client_notdl(0).count).to eq(1)
|
|
batchp.make_set(user_trigger2, 0)
|
|
Timecop.travel(user_trigger2.created_at + batchp.days_past_for_trigger_index(1).days)
|
|
expect(batchp.fetch_client_notdl(1).count).to eq(1)
|
|
batchp.make_set(user_trigger2, 1)
|
|
Timecop.travel(user_trigger2.created_at + batchp.days_past_for_trigger_index(2).days)
|
|
expect(batchp.fetch_client_notdl(2).count).to eq(1)
|
|
end
|
|
|
|
it 'handles skips properly' do
|
|
Timecop.travel(user_trigger2.created_at + batchp.days_past_for_trigger_index(0).days)
|
|
expect(batchp.fetch_client_notdl(0).count).to eq(1)
|
|
batchp.make_set(user_trigger2, 0)
|
|
Timecop.travel(user_trigger2.created_at + batchp.days_past_for_trigger_index(2).days)
|
|
expect(batchp.fetch_client_notdl(1).count).to eq(1)
|
|
batchp.make_set(user_trigger2, 1)
|
|
Timecop.travel(user_trigger2.created_at + batchp.days_past_for_trigger_index(1).days)
|
|
expect(batchp.fetch_client_notdl(1).count).to eq(0)
|
|
# expect(batchp.fetch_client_notdl(2).count).to eq(1)
|
|
end
|
|
|
|
it 'runs every day' do
|
|
pending
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
end
|