diff --git a/ruby/lib/jam_ruby/models/email_batch_progression.rb b/ruby/lib/jam_ruby/models/email_batch_progression.rb index 0b641989e..eaccebe2e 100644 --- a/ruby/lib/jam_ruby/models/email_batch_progression.rb +++ b/ruby/lib/jam_ruby/models/email_batch_progression.rb @@ -5,15 +5,15 @@ module JamRuby BATCH_SIZE = 3 SINCE_WEEKS = 2 - SUBTYPES = [:client_notdl, # Registered Musician Has Not Downloaded Client - :client_dl_notrun, # Registered Musician Has Downloaded Client But Not Yet Run It - :client_run_notgear, # Registered Musician Has Run Client But Not Successfully Qualified Audio Gear - :gear_notsess, # Registered Musician Has Successfully Qualified Audio Gear But Has Not Participated in a ‘Real’ Session - :sess_notgood, # Registered Musician Has Participated In a "Real" Session But Has Not Had a "Good" Session + SUBTYPES = [:client_notdl, # Registered Musician Has Not Downloaded Client + :client_dl_notrun, # Registered Musician Has Downloaded Client But Not Yet Run It + :client_run_notgear, # Registered Musician Has Run Client But Not Successfully Qualified Audio Gear + :gear_notsess, # Registered Musician Has Successfully Qualified Audio Gear But Has Not Participated in a ‘Real’ Session + :sess_notgood, # Registered Musician Has Participated In a "Real" Session But Has Not Had a "Good" Session + :sess_notrecord, # Registered Musician Has Participated In a "Real" Session But Has Not Made a Recording :reg_notinvite, # Registered Musician Has Not Invited Friends to Join JamKazam - :reg_notconnect, # Registered Musician Has Not Connected with any Friends on JamKazam - :reg_notlike, # Registered Musician Has Not Liked Jamkazam - :sess_notrecord # Registered Musician Has Participated In a "Real" Session But Has Not Made a Recording + :reg_notconnect, # Registered Musician Has Not Connected with any Friends on JamKazam + :reg_notlike, # Registered Musician Has Not Liked Jamkazam ] SUBTYPE_METADATA = { @@ -84,6 +84,22 @@ module JamRuby case self.sub_type.to_sym when :client_notdl return ["users.created_at < ?", Time.now - intervals[trigger_idx].days] + when :client_dl_notrun + return ["users.first_downloaded_client_at < ?", Time.now - intervals[trigger_idx].days] + when :client_run_notgear + return ["users.first_ran_client_at < ?", Time.now - intervals[trigger_idx].days] + when :gear_notsess + return ["users.first_certified_gear_at < ?", Time.now - intervals[trigger_idx].days] + when :sess_notgood + return ["users.first_real_music_session_at < ?", Time.now - intervals[trigger_idx].days] + when :sess_notrecord + return ["users.first_real_music_session_at < ?", Time.now - intervals[trigger_idx].days] + when :reg_notconnect + return ["users.created_at < ?", Time.now - intervals[trigger_idx].days] + when :reg_notinvite + return ["users.created_at < ?", Time.now - intervals[trigger_idx].days] + when :reg_notlike + return ["users.created_at < ?", Time.now - intervals[trigger_idx].days] end end @@ -91,6 +107,22 @@ module JamRuby case self.sub_type.to_sym when :client_notdl return "first_downloaded_client_at IS NULL" + when :client_dl_notrun + return "first_downloaded_client_at IS NOT NULL AND first_ran_client_at IS NULL" + when :client_run_notgear + return "first_ran_client_at IS NOT NULL AND first_certified_gear_at IS NULL" + when :gear_notsess + return "first_certified_gear_at IS NOT NULL AND first_real_music_session_at IS NULL" + when :sess_notgood + return "first_real_music_session_at IS NOT NULL AND first_good_music_session_at IS NULL" + when :sess_notrecord + return "first_real_music_session_at IS NOT NULL AND first_recording_at IS NULL" + when :reg_notinvite + return "first_invited_at IS NOT NULL" + when :reg_notconnect + return "first_friended_at IS NOT NULL" + when :reg_notlike + return "first_social_promoted_at IS NOT NULL" end '' end diff --git a/ruby/spec/jam_ruby/models/email_batch_spec.rb b/ruby/spec/jam_ruby/models/email_batch_spec.rb index 5b0b7e117..238ec9eb3 100644 --- a/ruby/spec/jam_ruby/models/email_batch_spec.rb +++ b/ruby/spec/jam_ruby/models/email_batch_spec.rb @@ -59,6 +59,8 @@ describe EmailBatch do context 'user progress' do describe 'client not downloaded' do + before { pending } + let(:batchp) { FactoryGirl.create(:email_batch_progression, :sub_type => :client_notdl) } @@ -77,7 +79,7 @@ describe EmailBatch do } let(:user_existing) { FactoryGirl.create(:user, - :created_at => Time.now - (2*batchp.days_past_for_trigger_index(2)).days) + :created_at => Time.now - (2 * batchp.days_past_for_trigger_index(2)).days) } after(:each) do @@ -85,13 +87,11 @@ describe EmailBatch do end it 'returns no users' do - pending user_ expect(batchp.fetch_recipients.count).to eq(0) end it 'returns user first trigger' do - pending user_ user_trigger2 expect(batchp.fetch_recipients.count).to eq(1) @@ -99,33 +99,7 @@ describe EmailBatch do expect(batchp.fetch_recipients(0).count).to eq(0) end - it 'progressively returns expected count' do - pending - user_; user_trigger0; user_trigger1 - Timecop.travel(user_trigger2.created_at + batchp.days_past_for_trigger_index(0).days) - expect(batchp.fetch_recipients(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_recipients(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_recipients(2).count).to eq(1) - end - - it 'handles skips properly' do - pending - Timecop.travel(user_trigger2.created_at + batchp.days_past_for_trigger_index(0).days) - expect(batchp.fetch_recipients(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_recipients(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_recipients(1).count).to eq(0) - end - it 'handles each trigger index' do - pending user_ expect(batchp.fetch_recipients(0).count).to eq(0) Timecop.travel(user_.created_at + batchp.days_past_for_trigger_index(0).days) @@ -141,8 +115,18 @@ describe EmailBatch do expect(batchp.fetch_recipients(2).count).to eq(0) end + it 'handles skips properly' do + Timecop.travel(user_trigger2.created_at + batchp.days_past_for_trigger_index(0).days) + expect(batchp.fetch_recipients(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_recipients(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_recipients(1).count).to eq(0) + end + it 'skips a day' do - pending dd = user_.created_at Timecop.travel(dd) expect(batchp.fetch_recipients(0).count).to eq(0) @@ -184,5 +168,4 @@ describe EmailBatch do end end - end