Merge branch 'feature/scheduled_sessions' of bitbucket.org:jamkazam/jam-cloud into feature/scheduled_sessions

This commit is contained in:
Brian Smith 2014-06-06 03:05:14 -04:00
commit cff09fd4de
4 changed files with 67 additions and 68 deletions

View File

@ -126,7 +126,7 @@ SQL
def self.send_new_musician_batch
oo = self.create
oo..deliver_batch
oo.deliver_batch
oo
end

View File

@ -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 =<<SQL
SELECT DISTINCT COUNT(receiver_id) AS num
FROM #{TMP_MATCH}
GROUP BY receiver_id
SQL
sql = "SELECT COUNT(DISTINCT receiver_id) AS num FROM #{TMP_MATCH}"
rr = ActiveRecord::Base.connection.execute(sql)
return 0 < rr.count ? rr[0]['num'].to_i : 0
else
sql =<<SQL
SELECT DISTINCT receiver_id
FROM #{TMP_MATCH}
GROUP BY receiver_id
ORDER BY receiver_id ASC
LIMIT #{@per_page}
OFFSET #{offset}
@ -134,21 +129,19 @@ SQL
def deliver_batch_sets!
self.opt_in_count = 0
sent = 0
self.fetch_recipients do |receiver, sessions_and_latency|
self.opt_in_count += 1
sent += 1
bset = EmailBatchSet.scheduled_session_set(self, receiver, sessions_and_latency)
UserMailer.scheduled_session_daily(receiver, sessions_and_latency).deliver
end
self.sent_count = sent
self.sent_count = self.opt_in_count
self.save
self.did_batch_run!
end
def self.send_daily_session_batch
oo = self.create
oo..deliver_batch
oo.deliver_batch
oo
end

View File

@ -32,33 +32,16 @@ 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, :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)

View File

@ -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