VRFS-1664 fixed large batch test
This commit is contained in:
parent
e669205c64
commit
a657236814
|
|
@ -9,6 +9,7 @@ module JamRuby
|
|||
VAR_MUSICIAN_TABLE = "@MUSICIAN_TABLE"
|
||||
|
||||
TMP_NEW = 'tmp_new_musicians'
|
||||
TMP_RECEIVE = 'tmp_receivers'
|
||||
TMP_PAIRS = 'tmp_receivers_new_musicians'
|
||||
|
||||
def self.subject
|
||||
|
|
@ -26,14 +27,33 @@ SELECT
|
|||
INTO TEMP TABLE #{TMP_NEW}
|
||||
FROM users
|
||||
WHERE
|
||||
musician = 't' AND
|
||||
last_jam_locidispid IS NOT NULL AND
|
||||
users.musician = 't' AND
|
||||
users.last_jam_locidispid IS NOT NULL AND
|
||||
users.created_at > '#{time_since_last_batch(SINCE_DAYS)}'
|
||||
SQL
|
||||
ActiveRecord::Base.connection.execute(sql)
|
||||
end
|
||||
|
||||
# inserts eligible sessions to temp table
|
||||
def _fetch_eligible_receivers
|
||||
ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_RECEIVE}")
|
||||
sql =<<SQL
|
||||
SELECT
|
||||
rr.id AS receiver_id,
|
||||
rr.created_at AS receiver_created_at
|
||||
INTO TEMP TABLE #{TMP_RECEIVE}
|
||||
FROM users rr
|
||||
FULL OUTER JOIN #{TMP_NEW} ON #{TMP_NEW}.new_user_id = rr.id
|
||||
WHERE
|
||||
rr.musician = 't' AND
|
||||
rr.subscribe_email = 't' AND
|
||||
rr.last_jam_locidispid IS NOT NULL AND
|
||||
(#{TMP_NEW}.new_user_id IS NULL OR rr.id IS NULL)
|
||||
SQL
|
||||
ActiveRecord::Base.connection.execute(sql)
|
||||
end
|
||||
|
||||
def _fetch_pairs
|
||||
ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_PAIRS}")
|
||||
# load eligible recipients into tmp table
|
||||
sql =<<SQL
|
||||
|
|
@ -48,15 +68,8 @@ INNER JOIN #{TMP_NEW} ON #{TMP_NEW}.last_jam_locidispid = scores.blocidispid
|
|||
WHERE
|
||||
scores.score < #{Score::MAX_YELLOW_LATENCY} AND
|
||||
receivers.id IN (
|
||||
SELECT
|
||||
rr.id
|
||||
FROM users rr
|
||||
FULL OUTER JOIN #{TMP_NEW} ON rr.id = #{TMP_NEW}.new_user_id
|
||||
WHERE
|
||||
rr.musician = 't' AND
|
||||
rr.subscribe_email = 't' AND
|
||||
rr.last_jam_locidispid IS NOT NULL AND
|
||||
(#{TMP_NEW}.new_user_id IS NULL OR rr.id IS NULL)
|
||||
SELECT receiver_id
|
||||
FROM #{TMP_RECEIVE}
|
||||
)
|
||||
SQL
|
||||
ActiveRecord::Base.connection.execute(sql)
|
||||
|
|
@ -70,10 +83,13 @@ SQL
|
|||
# load email receivers into tmp table
|
||||
self._fetch_eligible_receivers
|
||||
|
||||
# load receivers/musicians pairs into tmp table
|
||||
self._fetch_pairs
|
||||
|
||||
countsql = "SELECT COUNT(DISTINCT receiver_id) AS num FROM #{TMP_PAIRS}"
|
||||
rr = ActiveRecord::Base.connection.execute(countsql)
|
||||
num_pair = 0 < rr.count ? rr[0]['num'].to_i : 0
|
||||
|
||||
|
||||
loops = (num_pair / per_page) + (num_pair % per_page) - 1
|
||||
0.upto(loops) do |nn|
|
||||
offset = nn * per_page
|
||||
|
|
|
|||
|
|
@ -15,16 +15,18 @@ describe EmailBatchNewMusician do
|
|||
|
||||
let (:new_musician_batch) { FactoryGirl.create(:email_batch_new_musician) }
|
||||
|
||||
let (:receiver_date) { Time.now - (EmailBatchNewMusician::SINCE_DAYS.days + 1.day) }
|
||||
|
||||
let (:receiver1) {
|
||||
FactoryGirl.create(:user,
|
||||
:created_at => Time.now - (EmailBatchNewMusician::SINCE_DAYS.days + 1.day),
|
||||
:created_at => receiver_date,
|
||||
:last_jam_locidispid => 1,
|
||||
:last_jam_addr => 1
|
||||
)
|
||||
}
|
||||
let (:receiver2) {
|
||||
FactoryGirl.create(:user,
|
||||
:created_at => Time.now - (EmailBatchNewMusician::SINCE_DAYS.days + 1.day),
|
||||
:created_at => receiver_date,
|
||||
:last_jam_locidispid => 3,
|
||||
:last_jam_addr => 3
|
||||
)
|
||||
|
|
@ -68,7 +70,6 @@ describe EmailBatchNewMusician do
|
|||
end
|
||||
|
||||
it 'sets up data properly' do
|
||||
pending
|
||||
results = new_musician_batch.fetch_recipients
|
||||
expect(results.count).to eq(1)
|
||||
user, new_musicians = results[0]
|
||||
|
|
@ -77,14 +78,12 @@ describe EmailBatchNewMusician do
|
|||
end
|
||||
|
||||
it 'sends email' do
|
||||
pending
|
||||
ebatch = new_musician_batch
|
||||
ebatch.deliver_batch
|
||||
expect(UserMailer.deliveries.length).to eq(1)
|
||||
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)
|
||||
|
|
@ -97,30 +96,26 @@ describe EmailBatchNewMusician do
|
|||
end
|
||||
|
||||
it 'handles large batches' do
|
||||
dd = Time.now - (EmailBatchNewMusician::SINCE_DAYS.days + 14.day)
|
||||
dd = receiver_date + 1.day
|
||||
20.downto(1) do |nn|
|
||||
FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1,
|
||||
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 => 3, :last_jam_addr => 3)
|
||||
FactoryGirl.create(:user, :last_jam_locidispid => 6, :last_jam_addr => 6)
|
||||
end
|
||||
JamRuby::Score.createx(1, 'a', 1, 3, 'a', 3, 10)
|
||||
num = 0
|
||||
# User.where(["created_at < ?",dd]).order('created_at DESC').all.each {|uu| puts "#{uu.id}; #{uu.created_at}"}
|
||||
JamRuby::Score.delete_all
|
||||
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, :created_at => dd)
|
||||
FactoryGirl.create(:user, :last_jam_locidispid => 7, :last_jam_addr => 7)
|
||||
|
||||
receivers = []
|
||||
new_musician_batch.fetch_recipients do |uu, newm|
|
||||
num += 1
|
||||
receivers << uu
|
||||
# puts "#{uu.id}; #{uu.created_at}; "
|
||||
# binding.pry
|
||||
expect(newm.count).to eq(10)
|
||||
end
|
||||
dd += 1.day
|
||||
# receivers.each_with_index {|rr,idx| puts "#{idx}; #{rr.created_at}; #{rr.id}"}
|
||||
receivers.uniq!
|
||||
expect(receivers.count).to eq(User.where(["created_at <= ?",dd]).count)
|
||||
expect(num).to eq(User.where(["created_at <= ?",dd]).count)
|
||||
expect(receivers.count).to eq(User.where(["created_at <= ? AND last_jam_addr = ?",dd,5]).count)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in New Issue