diff --git a/ruby/lib/jam_ruby.rb b/ruby/lib/jam_ruby.rb index 969f026ef..82484997e 100755 --- a/ruby/lib/jam_ruby.rb +++ b/ruby/lib/jam_ruby.rb @@ -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" diff --git a/ruby/lib/jam_ruby/resque/scheduled/music_session_reminder.rb b/ruby/lib/jam_ruby/resque/scheduled/music_session_reminder.rb new file mode 100644 index 000000000..503e31e9b --- /dev/null +++ b/ruby/lib/jam_ruby/resque/scheduled/music_session_reminder.rb @@ -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 \ No newline at end of file diff --git a/ruby/spec/jam_ruby/resque/music_session_reminder_spec.rb b/ruby/spec/jam_ruby/resque/music_session_reminder_spec.rb new file mode 100644 index 000000000..2823d3150 --- /dev/null +++ b/ruby/spec/jam_ruby/resque/music_session_reminder_spec.rb @@ -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