VRFS-3300 : Music session reminder job and spec

This commit is contained in:
Steven Miers 2015-07-09 17:48:04 -05:00
parent e5c7f50cd2
commit ed487e11a3
3 changed files with 111 additions and 0 deletions

View File

@ -54,6 +54,7 @@ require "jam_ruby/resque/scheduled/user_progress_emailer"
require "jam_ruby/resque/scheduled/daily_job"
require "jam_ruby/resque/scheduled/daily_session_emailer"
require "jam_ruby/resque/scheduled/new_musician_emailer"
require "jam_ruby/resque/scheduled/music_session_reminder"
require "jam_ruby/resque/scheduled/music_session_scheduler"
require "jam_ruby/resque/scheduled/active_music_session_cleaner"
require "jam_ruby/resque/scheduled/score_history_sweeper"

View File

@ -0,0 +1,31 @@
require 'json'
require 'resque'
require 'resque-retry'
require 'net/http'
require 'digest/md5'
module JamRuby
class MusicSessionReminder
extend Resque::Plugins::JamLonelyJob
@queue = :music_session_reminder
@@log = Logging.logger[MusicSessionReminder]
def self.lock_timeout
120
end
def self.perform
@@log.debug("MusicSessionReminder waking up")
MusicSessionReminder.new.run
@@log.debug("MusicSessionReminder done")
end
def run
Notification.send_session_reminders()
end
end
end

View File

@ -0,0 +1,79 @@
require 'spec_helper'
describe 'MusicSessionReminder' do
let(:mail) { UserMailer.deliveries[0] }
before :each do
UserMailer.deliveries.clear
MusicSession.delete_all
User.delete_all
@receiver = FactoryGirl.create(:user)
@sender = FactoryGirl.create(:user)
@session = FactoryGirl.create(:music_session)
@slot1 = FactoryGirl.build(:rsvp_slot, :music_session => @session, :instrument => JamRuby::Instrument.find('electric guitar'))
@slot1.save
end
it "sends email 24 hours before" do
@session.creator = @sender
@session.scheduled_start = Time.now + 23.hours
@session.save!
JamRuby::MusicSessionReminder.perform
UserMailer.deliveries.length.should == 1
calls = count_publish_to_user_calls
calls[:count].should == 0
mail.html_part.body.include?("is scheduled for tomorrow").should be_true
mail.text_part.body.include?("is scheduled for tomorrow").should be_true
mail.html_part.body.include?("starts in 1 hour").should be_false
mail.text_part.body.include?("starts in 1 hour").should be_false
end
it "sends email 1 hour before" do
@session.creator = @sender
@session.scheduled_start = Time.now + 59.minutes
@session.save!
JamRuby::MusicSessionReminder.perform
UserMailer.deliveries.length.should == 1
calls = count_publish_to_user_calls
calls[:count].should == 0
mail.html_part.body.include?("is scheduled for tomorrow").should be_false
mail.text_part.body.include?("is scheduled for tomorrow").should be_false
mail.html_part.body.include?("starts in 1 hour").should be_true
mail.text_part.body.include?("starts in 1 hour").should be_true
end
it "sends notice 5 minutes before" do
UserMailer.deliveries.length.should == 0
receiver_connection = FactoryGirl.create(:connection, user: @receiver)
@receiver.reload
rsvp = RsvpRequest.create({:session_id => @session.id, :rsvp_slots => [@slot1.id, @slot2.id], :message => "We be jammin!"}, @receiver)
UserMailer.deliveries.clear
calls = count_publish_to_user_calls
@session.creator = @sender
@session.scheduled_start = Time.now + 4.minutes
@session.save!
JamRuby::MusicSessionReminder.perform
calls[:count].should == 1
UserMailer.deliveries.length.should == 0
end
def count_publish_to_user_calls
result = {count: 0}
MQRouter.any_instance.stub(:publish_to_user) do |receiver_id, msg|
result[:count] += 1
result[:msg] = msg
end
result
end
end #spec