jam-cloud/web/spec/support/lessons.rb

118 lines
3.5 KiB
Ruby

def successful_lesson(lesson_session, advance_to_end = true)
# teacher & student get into session
start = lesson_session.scheduled_start
end_time = lesson_session.scheduled_start + (60 * lesson_session.duration)
uh2 = FactoryGirl.create(:music_session_user_history, user: lesson_session.teacher, history: lesson_session.music_session, created_at: start, session_removed_at: end_time)
uh2 = FactoryGirl.create(:music_session_user_history, user: lesson_session.student, history: lesson_session.music_session, created_at: start, session_removed_at: end_time)
# artificially end the session, which is covered by other background jobs
lesson_session.music_session.session_removed_at = end_time
lesson_session.music_session.save!
if advance_to_end
Timecop.travel(end_time + 60 * 60)
end
end
def failed_lesson(lesson_session, advance_to_end = true)
start = lesson_session.scheduled_start
end_time = lesson_session.scheduled_start + (60 * lesson_session.duration)
if advance_to_end
Timecop.travel(end_time + 60 * 60)
end
end
def teacher_approve(lesson_session)
sign_out_poltergeist(validate: true)
sign_in_poltergeist(lesson_session.teacher, password: 'foobar')
visit "/client#/jamclass/lesson-booking/" + lesson_session.id
find('.schedule.button-orange').trigger(:click)
visit "/client#/jamclass"
find('tr[data-lesson-session-id="' + lesson_session.id + '"] .displayStatusColumn', text: 'Scheduled')
end
def fill_out_single_lesson
find('h2', text: 'book testdrive lesson')
find('.booking-info', text: 'If you need to cancel')
# book the lesson
fill_in "slot-1-date", with: "Sun Apr 17 2016"
#find('.slot.slot-1 input.hasDatepicker').trigger(:click)
# click 4-6
find('td a', text: '17').trigger(:click)
#find('.slot.slot-2 input.hasDatepicker').trigger(:click)
# click 4-7
fill_in "slot-2-date", with: "Mon Apr 18 2016"
find('td a', text: '18').trigger(:click)
fill_in 'user-description', with: 'abc def dog neck'
sleep 3
find('a.book-lesson-btn', text: 'BOOK TESTDRIVE LESSON').trigger(:click)
end
def fill_out_payment
fill_in 'card-number', with: '4111111111111111'
fill_in 'expiration', with: '11/2016'
fill_in 'cvv', with: '111'
fill_in 'zip', with: '78759'
find('.purchase-btn').trigger(:click)
end
def select_test_drive(count = 4)
find(".button-orange.select-#{count}").trigger(:click)
end
def create_stripe_token(exp_month = 2017)
Stripe::Token.create(
:card => {
:number => "4111111111111111",
:exp_month => 2,
:exp_year => exp_month,
:cvc => "314"
},
).id
end
def testdrive_lesson(user, teacher, slots = nil)
if slots.nil?
slots = []
slots << FactoryGirl.build(:lesson_booking_slot_single)
slots << FactoryGirl.build(:lesson_booking_slot_single)
end
if !user.stored_credit_card
token = create_stripe_token
user.payment_update({token: token, zip: '78759'})
user.save!
user.stored_credit_card.should be_true
end
booking = LessonBooking.book_test_drive(user, teacher, slots, "Hey I've heard of you before.")
#puts "BOOKING #{booking.errors.inspect}"
booking.errors.any?.should be_false
lesson = booking.lesson_sessions[0]
booking.card_presumed_ok.should be_true
if user.most_recent_test_drive_purchase.nil?
LessonPackagePurchase.create(user, booking, LessonPackageType.test_drive_4)
end
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
lesson
end