From c0287cc224fb2aea6faddd3ea097e43ff9ef4bba Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Mon, 9 Jun 2014 05:12:29 +0000 Subject: [PATCH] VRFS-1664 enhancing tests --- .../models/email_batch_new_musician.rb | 3 +- .../models/email_batch_spec_new_musicians.rb | 106 ++++++++++++++---- 2 files changed, 86 insertions(+), 23 deletions(-) diff --git a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb index 9d33bf45e..37590851a 100644 --- a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb +++ b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb @@ -29,7 +29,8 @@ FROM users WHERE users.musician = 't' AND users.last_jam_locidispid IS NOT NULL AND - users.created_at > '#{time_since_last_batch(SINCE_DAYS)}' + users.created_at > '#{time_since_last_batch(SINCE_DAYS)}' AND + users.created_at <= '#{self.created_at}' SQL ActiveRecord::Base.connection.execute(sql) end diff --git a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb index 7d84c9594..332bee46a 100644 --- a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb +++ b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb @@ -13,9 +13,14 @@ describe EmailBatchNewMusician do describe 'daily scheduled' do # before { pending } - let (:new_musician_batch) { FactoryGirl.create(:email_batch_new_musician) } + let (:batch_created_at) { + Time.now - 1.day + # FactoryGirl.create(:email_batch_new_musician, :created_at => Time.now - 1.day) + } - let (:receiver_date) { Time.now - (EmailBatchNewMusician::SINCE_DAYS.days + 1.day) } + let (:receiver_date) { + batch_created_at - (EmailBatchNewMusician::SINCE_DAYS.days + 1.day) + } let (:receiver1) { FactoryGirl.create(:user, @@ -32,45 +37,101 @@ describe EmailBatchNewMusician do ) } - let (:drummer) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) } - let (:guitarist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) } - let (:bassist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) } - let (:vocalist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) } - let (:loser) { FactoryGirl.create(:user, :last_jam_locidispid => 2, :last_jam_addr => 2) } - let (:drummer3) { FactoryGirl.create(:user, :last_jam_locidispid => 3, :last_jam_addr => 3) } - let (:guitarist3) { FactoryGirl.create(:user, :last_jam_locidispid => 3, :last_jam_addr => 3) } - let (:bassist3) { FactoryGirl.create(:user, :last_jam_locidispid => 3, :last_jam_addr => 3) } - let (:vocalist3) { FactoryGirl.create(:user, :last_jam_locidispid => 3, :last_jam_addr => 3) } + let (:drummer) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :created_at => batch_created_at - 1.hour) } + let (:guitarist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :created_at => batch_created_at - 1.hour) } + let (:bassist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :created_at => batch_created_at - 1.hour) } + let (:vocalist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :created_at => batch_created_at - 1.hour) } + let (:loser) { FactoryGirl.create(:user, :last_jam_locidispid => 2, :created_at => batch_created_at - 1.hour) } + let (:drummer3) { FactoryGirl.create(:user, :last_jam_locidispid => 3, :created_at => batch_created_at - 1.hour) } + let (:guitarist3) { FactoryGirl.create(:user, :last_jam_locidispid => 3, :created_at => batch_created_at - 1.hour) } + let (:bassist3) { FactoryGirl.create(:user, :last_jam_locidispid => 3, :created_at => batch_created_at - 1.hour) } + let (:vocalist3) { FactoryGirl.create(:user, :last_jam_locidispid => 3, :created_at => batch_created_at - 1.hour) } before(:each) do drummer; guitarist; bassist; vocalist; loser drummer3; guitarist3; bassist3; vocalist3 receiver1; receiver2 - new_musician_batch.reset! + EmailBatchNewMusician.delete_all JamRuby::Score.delete_all JamRuby::Score.createx(1, 'a', 1, 1, 'a', 1, 10) JamRuby::Score.createx(1, 'a', 1, 2, 'a', 2, Score::MAX_YELLOW_LATENCY + 1) end it 'sets up data properly' do - results = new_musician_batch.fetch_recipients - expect(results.count).to eq(1) + ebatch0 = FactoryGirl.create(:email_batch_new_musician, + :created_at => batch_created_at) + results = ebatch0.fetch_recipients + + num = User.where(:last_jam_locidispid => 1) + .where("created_at < ?",ebatch0.time_since_last_batch(EmailBatchNewMusician::SINCE_DAYS)) + .count + expect(num).to be > 0 + expect(results.count).to eq(num) + user, new_musicians = results[0] expect(user.id).to eq(receiver1.id) - expect(new_musicians.count).to eq(4) + num = User.where(:last_jam_locidispid => 1) + .where("created_at >= ?",ebatch0.time_since_last_batch(EmailBatchNewMusician::SINCE_DAYS)) + .count + expect(num).to be > 0 + expect(new_musicians.count).to eq(num) end it 'sends email' do - new_musician_batch.deliver_batch - expect(UserMailer.deliveries.length).to eq(1) - end + ebatch0 = FactoryGirl.create(:email_batch_new_musician, + :created_at => batch_created_at) + ebatch0.deliver_batch + num = User.where(:last_jam_locidispid => 1) + .where("created_at < ?",ebatch0.time_since_last_batch(EmailBatchNewMusician::SINCE_DAYS)) + .count + expect(num).to be > 0 + expect(UserMailer.deliveries.length).to eq(num) - it 'sends email periodically' do - EmailBatchNewMusician.send_new_musician_batch - expect(UserMailer.deliveries.length).to eq(1) + ebatch1 = FactoryGirl.create(:email_batch_new_musician, + :created_at => ebatch0.created_at + 1.day) + # new musicians + FactoryGirl.create(:user, + :last_jam_locidispid => 5, + :created_at => ebatch0.created_at + 1.minute) + FactoryGirl.create(:user, + :last_jam_locidispid => 5, + :created_at => ebatch1.created_at - 1.minute) + JamRuby::Score.createx(1, 'a', 1, 5, 'a', 5, 10) + # decoy + JamRuby::Score.createx(1, 'a', 1, 3, 'a', 3, Score::MAX_YELLOW_LATENCY + 1) + FactoryGirl.create(:user, + :last_jam_locidispid => 2, + :created_at => ebatch1.created_at - 1.minute) + FactoryGirl.create(:user, + :last_jam_locidispid => 3, + :created_at => ebatch1.created_at - 1.minute) + + # all 1's receive emails + num = User.where(:last_jam_locidispid => 1) + .where("created_at <= ?", ebatch1.time_since_last_batch(EmailBatchNewMusician::SINCE_DAYS)) + .count + expect(num).to be > 0 + results = ebatch1.fetch_recipients + expect(results.count).to eq(num) + + # all 5's are new + newm = User.where(:last_jam_locidispid => 5) + .where("created_at > ?", ebatch1.time_since_last_batch(EmailBatchNewMusician::SINCE_DAYS)) + .where("created_at <= ?", ebatch1.created_at) + .count + expect(newm).to be > 0 + expect(results[0][1].count).to eq(newm) + + UserMailer.deliveries.clear + ebatch1.deliver_batch + expect(UserMailer.deliveries.length).to eq(num) + + # EmailBatchNewMusician.send_new_musician_batch + # expect(UserMailer.deliveries.length).to eq(cc) end it 'handles multiple receivers' do + pending JamRuby::Score.createx(1, 'a', 1, 3, 'a', 3, 10) JamRuby::Score.createx(1, 'a', 1, 4, 'a', 4, 10) JamRuby::Score.createx(2, 'a', 2, 4, 'a', 4, 10) @@ -83,6 +144,7 @@ describe EmailBatchNewMusician do end it 'handles large batches' do + pending dd = receiver_date + 1.day 20.downto(1) do |nn| FactoryGirl.create(:user, :last_jam_locidispid => 5, :last_jam_addr => 5, :created_at => dd) @@ -97,7 +159,7 @@ describe EmailBatchNewMusician do FactoryGirl.create(:user, :last_jam_locidispid => 7, :last_jam_addr => 7) receivers = [] - new_musician_batch.fetch_recipients do |uu, newm| + new_musician_batch.fetch_recipients(3) do |uu, newm| receivers << uu expect(newm.count).to eq(10) end