Merge branch 'feature/scheduled_sessions' of bitbucket.org:jamkazam/jam-cloud into feature/scheduled_sessions
This commit is contained in:
commit
cff09fd4de
|
|
@ -126,7 +126,7 @@ SQL
|
|||
|
||||
def self.send_new_musician_batch
|
||||
oo = self.create
|
||||
oo..deliver_batch
|
||||
oo.deliver_batch
|
||||
oo
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue