reminders in play!
This commit is contained in:
parent
9ac58773df
commit
d5052644c2
37
app/workers/reminder.rb
Normal file
37
app/workers/reminder.rb
Normal file
@ -0,0 +1,37 @@
|
||||
class Reminder
|
||||
def initialize
|
||||
@collection = reminder_collection
|
||||
end
|
||||
|
||||
def count
|
||||
@collection.count
|
||||
end
|
||||
alias size count
|
||||
|
||||
def candidates
|
||||
Candidate.includes(:recruiter).where(id: @collection.map { |row| row['id'] })
|
||||
end
|
||||
|
||||
def send_all
|
||||
candidates.each do |candidate|
|
||||
CandidateMailer.reminder(candidate).deliver_now
|
||||
flag_as_reminded candidate.id
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def reminder_collection
|
||||
sql = "select c.id, c.test_hash, c.name, c.email, max(a.updated_at) last_updated
|
||||
from candidates c
|
||||
inner join answers a on a.candidate_id = c.id
|
||||
where completed = false and reminded = false
|
||||
group by c.id
|
||||
having MAX(a.updated_at) < DATE_SUB(NOW(), INTERVAL 24 HOUR);"
|
||||
ActiveRecord::Base.connection.exec_query(sql)
|
||||
end
|
||||
|
||||
def flag_as_reminded candidate_id
|
||||
Candidate.find(candidate_id).update(reminded: true)
|
||||
end
|
||||
end
|
7
lib/tasks/reminders.rake
Normal file
7
lib/tasks/reminders.rake
Normal file
@ -0,0 +1,7 @@
|
||||
namespace :reminders do
|
||||
desc "send reminders to stagnate quizes"
|
||||
task send_all: :environment do
|
||||
reminders = Reminder.new
|
||||
reminders.send_all
|
||||
end
|
||||
end
|
8
test/fixtures/answers.yml
vendored
8
test/fixtures/answers.yml
vendored
@ -6,8 +6,8 @@ roy1:
|
||||
answer: option2
|
||||
saved: 0
|
||||
submitted: true
|
||||
created_at: <%= DateTime.now() - 90.minutes %>
|
||||
updated_at: <%= DateTime.now() - 90.minutes %>
|
||||
created_at: <%= DateTime.now() - 90.minutes - 36.hours %>
|
||||
updated_at: <%= DateTime.now() - 90.minutes - 36.hours %>
|
||||
|
||||
roy2:
|
||||
candidate: roy
|
||||
@ -15,8 +15,8 @@ roy2:
|
||||
answer: ["option-1", "option-4", "option5"]
|
||||
saved: 1
|
||||
submitted: true
|
||||
created_at: <%= DateTime.now() - 85.minutes %>
|
||||
updated_at: <%= DateTime.now() - 85.minutes %>
|
||||
created_at: <%= DateTime.now() - 85.minutes - 36.hours %>
|
||||
updated_at: <%= DateTime.now() - 85.minutes - 36.hours %>
|
||||
|
||||
dawn1:
|
||||
candidate: dawn
|
||||
|
26
test/workers/reminder_test.rb
Normal file
26
test/workers/reminder_test.rb
Normal file
@ -0,0 +1,26 @@
|
||||
require 'test_helper'
|
||||
|
||||
class ReminderTest < ActiveSupport::TestCase
|
||||
test "collection is created with one result" do
|
||||
reminders = Reminder.new
|
||||
assert_equal 1, reminders.size
|
||||
end
|
||||
|
||||
test "each candidate has needed attributes" do
|
||||
reminders = Reminder.new
|
||||
|
||||
assert_instance_of String, reminders.candidates.first.name
|
||||
assert_instance_of String, reminders.candidates.first.test_hash
|
||||
assert_instance_of String, reminders.candidates.first.email
|
||||
end
|
||||
|
||||
test "send reminders sends email, and flags reminded" do
|
||||
reminders = Reminder.new
|
||||
pre_reminded = Candidate.find(reminders.candidates.first.id).reminded
|
||||
|
||||
assert_difference("ActionMailer::Base.deliveries.size", reminders.count) do
|
||||
reminders.send_all
|
||||
end
|
||||
refute_equal pre_reminded, Candidate.find(reminders.candidates.first.id).reminded
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user