jam-cloud/web/spec/features/book_monthly_recurring_less...

234 lines
8.8 KiB
Ruby

require 'spec_helper'
#NOTE: Music Lesson is a defunct feature. skipping this spec
xdescribe "Book Monthly Recurring Lesson", :js => true, :type => :feature, :capybara_feature => true do
subject { page }
let(:user) { FactoryGirl.create(:user, traditional_band: true,paid_sessions: true, paid_sessions_hourly_rate: 1, paid_sessions_daily_rate:1 ) }
let(:teacher_user) {FactoryGirl.create(:teacher_user, first_name: "Teacher1", ready_for_session_at: Time.now)}
let(:teacher_user2) {FactoryGirl.create(:teacher_user, ready_for_session_at: Time.now)}
let(:teacher_user3) {FactoryGirl.create(:teacher_user, ready_for_session_at: Time.now)}
after(:each) do
Timecop.return
end
before(:each) do
LessonPackagePurchase.destroy_all
LessonBooking.destroy_all
Recording.destroy_all
Diagnostic.destroy_all
User.destroy_all
UserMailer.deliveries.clear
emulate_client
# create an old test drive and fakely use up all the credits so that we can book the lesson
Timecop.travel(Date.new(2016, 03, 01))
testdrive_lesson(user, teacher_user3)
user.remaining_test_drives = 0
user.save!
user.reload
teacher_user.teacher.ready_for_session_at = Time.now
teacher_user.teacher.save!
teacher_user.password.should eql 'foobar'
teacher_user.teacher.price_per_lesson_60_cents.should eql 3000
Teacher.index(user, {})[:query].count.should eql 1
end
describe "register via showing interesting in teacher 1st" do
it "succeeds" do
Timecop.travel(Date.new(2016, 04, 01))
sign_in_poltergeist user
visit "/client#/teachers/search"
find('.teacher-search-result[data-teacher-id="' + teacher_user.id + '"] .try-normal').trigger(:click)
# switch to recurring
find(".lesson-frequency-recurring ins", visible: false).trigger(:click)
# book the lesson
select "Monday", from: "day-of-week-1"
select "Tuesday", from: "day-of-week-2"
fill_in 'user-description', with: 'abc def dog neck'
select('60 Minute Lesson Each Week - $30.00 Per Month', :from => "booking-options-for-teacher")
sleep 3
find('a.book-lesson-btn', text: 'BOOK LESSON').trigger(:click)
#find('h2', text: 'enter payment info for lesson')
#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)
# we tell user they have test drive purchased, and take them to the teacher screen
find('#banner h1', text: 'Lesson Requested')
# dismiss banner
find('a.button-orange', text:'CLOSE').trigger(:click)
user.student_lesson_bookings.count.should eql 2
lesson_booking = user.student_lesson_bookings.order(:created_at).last
lesson_booking.is_requested?.should be true
lesson_booking.card_presumed_ok.should be true
lesson_booking.recurring.should be true
lesson_booking.is_monthly_payment?.should be true
lesson_booking = LessonBooking.where(teacher_id: teacher_user).first
lesson_booking.should_not be_nil
lesson_session = LessonSession.where(teacher_id: teacher_user).first
lesson_session.teacher.should eql teacher_user
lesson_package_purchase = LessonPackagePurchase.where(user_id: user.id, teacher_id: teacher_user.id).first
lesson_package_purchase.should be_nil
user.reload
user.remaining_test_drives.should eql 0
user.sales.count.should eql 0
# jamclass scren
find('h2', text: 'my lessons')
find('tr[data-lesson-session-id="' + lesson_session.id + '"] .displayStatusColumn', text: 'Requested')
find('tr[data-lesson-session-id="' + lesson_session.id + '"] .first_name', text: teacher_user.first_name)
# open up hover
find('tr[data-lesson-session-id="' + lesson_session.id + '"] .lesson-session-actions-btn').trigger(:click)
# check out the status
find('li[data-lesson-option="status"] a', text: 'View Status').trigger(:click)
# and now go to the session status screen
find('h2', text: 'your lesson has been requested')
# let's make a second request to a different teacher now
# let's make sure we can ask for another lesson too!
teacher_user2.teacher.ready_for_session_at = Time.now
teacher_user2.teacher.save!
visit "/client#/teachers/search"
find('a.teacher-search-options').trigger(:click)
find('a.search-btn').trigger(:click)
find('.teacher-search-result[data-teacher-id="' + teacher_user2.id + '"] .try-normal').trigger(:click)
# switch back to single
find(".lesson-frequency-single ins", visible: false).trigger(:click)
# 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'
select('60 Minute Lesson for $30.00', :from => "booking-options-for-teacher")
sleep 3
find('a.book-lesson-btn', text: 'BOOK LESSON').trigger(:click)
# we tell user they have test drive purchased, and take them to the teacher screen
find('#banner h1', text: 'Lesson Requested')
# dismiss banner
find('a.button-orange', text:'CLOSE').trigger(:click)
lesson_booking = LessonBooking.where(teacher_id: teacher_user2).first
lesson_booking.should_not be_nil
lesson_booking.recurring.should be false
LessonSession.where(teacher_id: teacher_user2).count.should eql 1
lesson_package_purchase = LessonPackagePurchase.where(user_id: user.id, teacher_id: teacher_user.id).first
lesson_package_purchase.should be_nil
user.reload
user.remaining_test_drives.should eql 0
user.sales.count.should eql 0
# approve by teacher:
lesson_session1 = LessonSession.where(teacher_id: teacher_user).first
teacher_approve(lesson_session1)
lesson_booking1 = LessonBooking.where(teacher_id: teacher_user).first
lesson_booking1.lesson_sessions.count.should eql 2
lesson_session2 = LessonSession.where(teacher_id: teacher_user).last
successful_lesson(lesson_session1)
LessonSession.hourly_check
lesson_session1.reload
lesson_session1.analysed.should be true
analysis = lesson_session1.analysis
analysis["reason"].should eql LessonSessionAnalyser::SUCCESS
lesson_session1.billing_attempts.should be true
lesson_session1.billed.should eql false
lesson_session1.success.should be true
user.lesson_purchases.count.should eql 1
LessonBooking.hourly_check
user.reload
lesson_package_purchase = user.lesson_purchases.count.should eql 2
lesson_package_purchase = user.lesson_purchases.where(teacher_id: teacher_user.id).last
teacher_distribution = lesson_package_purchase.teacher_distribution
teacher_distribution.amount_in_cents.should eql 3000 / 2
teacher_distribution.ready.should be true
teacher_distribution.distributed.should be false
lesson_package_purchase.lesson_payment_charge.billed.should be true
lesson_package_purchase.lesson_payment_charge.amount_in_cents.should eql 3000/2 + (3000/2 * 0.0825).round
lesson_package_purchase.lesson_payment_charge.fee_in_cents.should eql 0
lesson_package_purchase.lesson_payment_charge.stripe_charge_id.should_not be_nil
lesson_package_purchase.lesson_payment_charge.post_processed.should be true
lesson_package_purchase.lesson_payment_charge.sent_billing_notices.should be true
lesson_package_purchase.lesson_payment_charge.billing_attempts.should eql 1
lesson_session1.reload
lesson_session1.teacher_distribution.should be_nil
Timecop.travel(Date.new(2016, 05, 01))
LessonSession.hourly_check
LessonBooking.hourly_check
user.reload
user.lesson_purchases.count.should eql 2
lesson_package_purchase = user.lesson_purchases.last
teacher_distribution = lesson_package_purchase.teacher_distribution
teacher_distribution.amount_in_cents.should eql 3000
teacher_distribution.ready.should be true
lesson_package_purchase.lesson_payment_charge.amount_in_cents.should eql 3000 + (3000 * 0.0825).round
lesson_package_purchase.lesson_payment_charge.fee_in_cents.should eql 0
lesson_package_purchase.lesson_payment_charge.stripe_charge_id.should_not be_nil
lesson_package_purchase.lesson_payment_charge.post_processed.should be true
lesson_package_purchase.lesson_payment_charge.sent_billing_notices.should be true
lesson_package_purchase.lesson_payment_charge.billing_attempts.should eql 1
end
end
end