2016-04-06 02:23:15 +00:00
require 'spec_helper'
describe LessonSession do
2016-05-12 21:29:27 +00:00
let ( :user ) { FactoryGirl . create ( :user , stored_credit_card : true , remaining_free_lessons : 1 , remaining_test_drives : 1 ) }
2016-04-06 02:23:15 +00:00
let ( :teacher ) { FactoryGirl . create ( :teacher_user ) }
let ( :slot1 ) { FactoryGirl . build ( :lesson_booking_slot_single ) }
let ( :slot2 ) { FactoryGirl . build ( :lesson_booking_slot_single ) }
2016-04-21 14:23:29 +00:00
let ( :lesson_booking ) { b = LessonBooking . book_normal ( user , teacher , [ slot1 , slot2 ] , " Hey I've heard of you before. " , false , LessonBooking :: PAYMENT_STYLE_SINGLE , 60 ) ; b . card_presumed_ok = true ; b . save! ; b }
2016-04-06 02:23:15 +00:00
let ( :lesson_session ) { lesson_booking . lesson_sessions [ 0 ] }
describe " accept " do
it " can accept " do
end
end
2016-05-21 03:13:39 +00:00
describe " accept " do
it " accepts in the past is errored " do
slot = FactoryGirl . build ( :lesson_booking_slot_single , preferred_day : Date . today + 1 )
lesson = normal_lesson ( user , teacher , { slots : [ slot , slot2 ] } )
Timecop . travel ( Date . today + 2 )
lesson . accept ( {
message : " Teacher time! " ,
acceptor : teacher ,
slot : slot
} )
lesson . errors . any? . should be_true
lesson . errors [ :slot ] . should eql [ " is in the past " ]
end
it " accepts in the past for a recurring is OK " do
slotRecurring1 = FactoryGirl . build ( :lesson_booking_slot_recurring )
slotRecurring2 = FactoryGirl . build ( :lesson_booking_slot_recurring )
lesson = monthly_lesson ( user , teacher , { slots : [ slotRecurring1 , slotRecurring2 ] } )
Timecop . travel ( Date . today + 100 )
lesson . accept ( {
message : " Teacher time! " ,
acceptor : teacher ,
2016-05-23 17:26:32 +00:00
slot : slotRecurring1
2016-05-21 03:13:39 +00:00
} )
lesson . errors . any? . should be_true
lesson . errors [ :slot ] . should eql [ " is in the past " ]
end
it " cancel in the past is OK " do
slot = FactoryGirl . build ( :lesson_booking_slot_single , preferred_day : Date . today + 1 )
lesson = normal_lesson ( user , teacher , { slots : [ slot , slot2 ] } )
2016-05-24 20:17:42 +00:00
2016-05-21 03:13:39 +00:00
Timecop . travel ( Date . today + 2 )
lesson . cancel ( {
message : " Cancel time! " ,
canceler : teacher ,
slot : slot
} )
lesson . errors . any? . should be_false
lesson . reload
lesson . status . should eql LessonSession :: STATUS_CANCELED
lesson . lesson_booking . status . should eql LessonSession :: STATUS_CANCELED
end
end
2016-05-20 15:31:43 +00:00
describe " permissions " do
it " student can join session " do
lesson = normal_lesson ( user , teacher )
FactoryGirl . create ( :active_music_session , music_session : lesson . music_session , creator : teacher )
connection1 = FactoryGirl . create ( :connection , user : user , music_session_id : lesson . music_session . active_music_session . id , as_musician : true )
connection2 = FactoryGirl . create ( :connection , user : teacher , music_session_id : lesson . music_session . active_music_session . id , as_musician : true )
connection1 . can_join_music_session
connection1 . errors . any? . should be_false
connection2 . can_join_music_session
connection2 . errors . any? . should be_false
end
end
2016-04-21 14:23:29 +00:00
describe " upcoming_sessions_reminder " do
it " succeeds " do
2016-05-16 16:39:20 +00:00
lesson = normal_lesson ( user , teacher )
2016-04-21 14:23:29 +00:00
UserMailer . deliveries . clear
LessonSession . upcoming_sessions_reminder
2016-05-16 16:39:20 +00:00
#UserMailer.deliveries.count.should eql 2
lesson . touch
lesson . sent_starting_notice . should be_false
lesson . is_approved? . should be_true
lesson . music_session . scheduled_start = 15 . minutes . from_now
lesson . music_session . save!
2016-04-21 14:23:29 +00:00
LessonSession . upcoming_sessions_reminder
UserMailer . deliveries . count . should eql 2
UserMailer . deliveries . clear
2016-05-16 16:39:20 +00:00
lesson . reload
lesson . sent_starting_notice . should be_true
2016-04-21 14:23:29 +00:00
LessonSession . upcoming_sessions_reminder
UserMailer . deliveries . count . should eql 0
end
end
2016-04-06 02:23:15 +00:00
describe " index " do
it " finds single lesson as student " do
lesson_session . touch
lesson_session . music_session . creator . should eql lesson_session . lesson_booking . user
lesson_session . lesson_booking . teacher . should eql teacher
query = LessonSession . index ( user ) [ :query ]
query . length . should eq 1
# make sure some random nobody can see this lesson session
query = LessonSession . index ( FactoryGirl . create ( :user ) ) [ :query ]
query . length . should eq 0
end
it " finds single lesson as teacher " do
# just sanity check that the lesson_session Factory is doing what it should
lesson_session . music_session . creator . should eql lesson_session . lesson_booking . user
lesson_session . lesson_booking . teacher . should eql teacher
query = LessonSession . index ( teacher , { as_teacher : true } ) [ :query ]
query . length . should eq 1
# make sure some random nobody can see this lesson session
query = LessonSession . index ( FactoryGirl . create ( :user ) , { as_teacher : true } ) [ :query ]
query . length . should eq 0
end
end
end