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 0fe70134e..9d33bf45e 100644 --- a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb +++ b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb @@ -126,7 +126,7 @@ SQL def self.send_new_musician_batch oo = self.create - oo..deliver_batch + oo.deliver_batch oo end diff --git a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb index d9c8c915e..8ef39a14c 100644 --- a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb +++ b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb @@ -48,7 +48,7 @@ SELECT INTO TEMP TABLE #{TMP_RECIP} FROM users INNER JOIN musicians_instruments AS mi ON mi.user_id = users.id -JOIN #{TMP_SESS} ON #{TMP_SESS}.instrument_id = mi.instrument_id +INNER JOIN #{TMP_SESS} ON #{TMP_SESS}.instrument_id = mi.instrument_id WHERE users.musician = 't' AND users.subscribe_email = 't' @@ -81,18 +81,13 @@ SQL # select recipients whose score is below minimum threshold def _select_scored_recipients(offset=0) if 0 > offset - sql =< 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, :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) } + before(:each) do drummer; guitarist; bassist; vocalist; loser drummer3; guitarist3; bassist3; vocalist3 @@ -78,8 +61,12 @@ describe EmailBatchNewMusician do end it 'sends email' do - ebatch = new_musician_batch - ebatch.deliver_batch + new_musician_batch.deliver_batch + expect(UserMailer.deliveries.length).to eq(1) + end + + it 'sends email periodically' do + EmailBatchNewMusician.send_new_musician_batch expect(UserMailer.deliveries.length).to eq(1) end @@ -98,8 +85,7 @@ describe EmailBatchNewMusician do it 'handles large batches' do dd = receiver_date + 1.day 20.downto(1) do |nn| - FactoryGirl.create(:user, :last_jam_locidispid => 5, :last_jam_addr => 5, - :created_at => dd) + FactoryGirl.create(:user, :last_jam_locidispid => 5, :last_jam_addr => 5, :created_at => dd) end 10.downto(1) do |nn| FactoryGirl.create(:user, :last_jam_locidispid => 6, :last_jam_addr => 6) diff --git a/ruby/spec/jam_ruby/models/email_batch_spec_scheduled_session.rb b/ruby/spec/jam_ruby/models/email_batch_spec_scheduled_session.rb index 3b235a199..b632234bc 100644 --- a/ruby/spec/jam_ruby/models/email_batch_spec_scheduled_session.rb +++ b/ruby/spec/jam_ruby/models/email_batch_spec_scheduled_session.rb @@ -20,21 +20,11 @@ describe EmailBatchScheduledSessions do let (:bass) { FactoryGirl.create(:instrument, :description => 'bass') } let (:vocals) { FactoryGirl.create(:instrument, :description => 'vocal') } - 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 (: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 (:session1) do FactoryGirl.create(:music_session, @@ -57,6 +47,7 @@ describe EmailBatchScheduledSessions do MusicianInstrument.delete_all RsvpSlot.delete_all JamRuby::Score.delete_all + scheduled_batch.reset! drummer.musician_instruments << FactoryGirl.build(:musician_instrument, user: drummer, instrument: drums, proficiency_level: 2) drummer.musician_instruments << FactoryGirl.build(:musician_instrument, user: drummer, instrument: guitar, proficiency_level: 2) @@ -75,7 +66,6 @@ describe EmailBatchScheduledSessions do FactoryGirl.create(:rsvp_slot, :instrument => drums, :music_session => session1) FactoryGirl.create(:rsvp_slot, :instrument => guitar, :music_session => session1) FactoryGirl.create(:rsvp_slot, :instrument => bass, :music_session => session1) - FactoryGirl.create(:rsvp_slot, :instrument => drums, :music_session => session2) FactoryGirl.create(:rsvp_slot, :instrument => guitar, :music_session => session2) FactoryGirl.create(:rsvp_slot, :instrument => bass, :music_session => session2) @@ -84,24 +74,54 @@ describe EmailBatchScheduledSessions do # oo = FactoryGirl.create(:rsvp_request, :user => vocalist, :rsvp_slot => oo) # oo.rsvp_request_slot.update_attributes(chosen: true) - 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 - - before(:each) do end it 'sets up data properly' do + JamRuby::Score.createx(1, 'a', 1, 1, 'a', 1, 10) + JamRuby::Score.createx(1, 'a', 1, 2, 'a', 2, Score::MAX_YELLOW_LATENCY + 1) + expect(drummer.instruments.include?(drums)).to eq(true) expect(drummer.instruments.include?(guitar)).to eq(true) obj = scheduled_batch.fetch_recipients expect(obj.count).to eq(2) + + scheduled_batch.deliver_batch + expect(UserMailer.deliveries.length).to eq(2) end - it 'sends email' do - ebatch = scheduled_batch - ebatch.deliver_batch - expect(UserMailer.deliveries.length).to eq(3) + it 'handles large batches' do + creators = [] + 8.downto(1) do |nn| + creators << uu = FactoryGirl.create(:user, :last_jam_locidispid => 5, :last_jam_addr => 5) + msess = FactoryGirl.create(:music_session, + :creator => uu, + :scheduled_start => Time.now() + 2.days, + :musician_access => true, + :approval_required => false, + :created_at => Time.now - 1.hour) + FactoryGirl.create(:rsvp_slot, :instrument => drums, :music_session => msess) + FactoryGirl.create(:rsvp_slot, :instrument => guitar, :music_session => msess) + FactoryGirl.create(:rsvp_slot, :instrument => bass, :music_session => msess) + end + instruments = [drums, guitar, bass] + 4.downto(1) do |nn| + uu = FactoryGirl.create(:user, :last_jam_locidispid => 6, :last_jam_addr => 6) + uu.musician_instruments << FactoryGirl.build(:musician_instrument, + user: uu, + instrument: instruments.sample, + proficiency_level: 2) + end + JamRuby::Score.createx(5, 'a', 5, 6, 'a', 6, 10) + JamRuby::Score.createx(5, 'a', 5, 7, 'a', 7, Score::MAX_YELLOW_LATENCY + 1) + FactoryGirl.create(:user, :last_jam_locidispid => 8, :last_jam_addr => 8) + FactoryGirl.create(:user, :last_jam_locidispid => 7, :last_jam_addr => 7) + + receivers = [] + scheduled_batch.fetch_recipients(3) do |receiver, sessions| + receivers << receiver + expect(sessions.count).to eq(8) + end + expect(receivers.count).to eq(4) end end