jam-cloud/ruby/spec/support/lesson_session.rb

146 lines
4.8 KiB
Ruby

module StripeMock
class ErrorQueue
def clear
@queue = []
end
end
def self.clear_errors
instance.error_queue.clear if instance
client.error_queue.clear if client
end
end
def book_lesson(user, teacher, options)
if options[:package_count].nil?
options[:package_count] = 4
end
if options[:slots].nil?
slots = []
if options[:monthly]
slots << FactoryGirl.build(:lesson_booking_slot_recurring)
slots << FactoryGirl.build(:lesson_booking_slot_recurring)
else
slots << FactoryGirl.build(:lesson_booking_slot_single)
slots << FactoryGirl.build(:lesson_booking_slot_single)
end
else
slots = options[:slots]
end
if user.stored_credit_card == false
token = create_stripe_token
result = user.payment_update({token: token, zip: '78759', normal: true})
#user.stored_credit_card = true
#user.save!
end
if options[:test_drive]
booking = LessonBooking.book_test_drive(user, teacher, slots, "Hey I've heard of you before.")
elsif options[:normal]
booking = LessonBooking.book_normal(user, teacher, slots, "Hey I've heard of you before.", false, LessonBooking::PAYMENT_STYLE_SINGLE, 60)
elsif options[:monthly]
booking = LessonBooking.book_normal(user, teacher, slots, "Hey I've heard of you before.", true, LessonBooking::PAYMENT_STYLE_MONTHLY, 60)
end
if booking.errors.any?
puts "BOOKING #{booking.errors.inspect}"
if booking.lesson_booking_slots[0].errors.any?
puts "SLOT0 #{booking.lesson_booking_slots[0].errors.inspect}"
end
end
booking.errors.any?.should be_false
lesson = booking.lesson_sessions[0]
start = lesson.scheduled_start
end_time = lesson.scheduled_start + (60 * lesson.duration)
booking.card_presumed_ok.should be_true
if options[:test_drive]
if user.most_recent_test_drive_purchase.nil?
LessonPackagePurchase.create(user, booking, LessonPackageType.package_for_test_drive_count(options[:package_count]))
end
end
if options[:accept]
lesson.accept({message: 'Yeah I got this', slot: slots[0]})
lesson.errors.any?.should be_false
lesson.reload
lesson.slot.should eql slots[0]
lesson.status.should eql LessonSession::STATUS_APPROVED
end
if options[:cancel]
lesson.cancel({canceler: options[:canceler] || user, message: "sorry about that"})
lesson.reload
lesson.status.should eql LessonSession::STATUS_CANCELED
end
if options[:miss]
# teacher & student get into session
Timecop.travel(end_time + 1)
lesson.analyse
lesson.session_completed
elsif options[:teacher_miss]
uh2 = FactoryGirl.create(:music_session_user_history, user: user, history: lesson.music_session, created_at: start, session_removed_at: end_time)
# artificially end the session, which is covered by other background jobs
lesson.music_session.session_removed_at = end_time
lesson.music_session.save!
Timecop.travel(end_time + 1)
lesson.analyse
lesson.session_completed
elsif options[:success]
uh1 = FactoryGirl.create(:music_session_user_history, user: user, history: lesson.music_session, created_at: start, session_removed_at: end_time)
uh2 = FactoryGirl.create(:music_session_user_history, user: teacher, history: lesson.music_session, created_at: start, session_removed_at: end_time)
# artificially end the session, which is covered by other background jobs
lesson.music_session.session_removed_at = end_time
lesson.music_session.save!
Timecop.travel(end_time + 1)
lesson.analyse
lesson.session_completed
elsif options[:finish]
# teacher & student get into session
uh2 = FactoryGirl.create(:music_session_user_history, user: teacher, history: lesson.music_session, created_at: start, session_removed_at: end_time)
if options[:student_show]
uh2 = FactoryGirl.create(:music_session_user_history, user: user, history: lesson.music_session, created_at: start, session_removed_at: end_time)
end
# artificially end the session, which is covered by other background jobs
lesson.music_session.session_removed_at = end_time
lesson.music_session.save!
Timecop.travel(end_time + 1)
lesson.analyse
lesson.session_completed
if options[:monthly]
LessonBooking.hourly_check
end
end
lesson
end
def testdrive_lesson(user, teacher, options = {finish: false, accept: true, cancel: false, miss: false, slots: nil})
options[:test_drive] = true
book_lesson(user, teacher, options)
end
def normal_lesson(user, teacher, options = {finish: false, accept: true, cancel: false, miss: false, slots: nil})
options[:normal] = true
book_lesson(user, teacher, options)
end
def monthly_lesson(user, teacher, options = {finish: false, accept: true, cancel: false, miss: false, slots: nil})
options[:monthly] = true
book_lesson(user, teacher, options)
end