require 'spec_helper' describe LessonSession do let(:user) {FactoryGirl.create(:user, stored_credit_card: true, remaining_free_lessons: 1, remaining_test_drives: 1)} let(:teacher) {FactoryGirl.create(:teacher_user)} let(:slot1) { FactoryGirl.build(:lesson_booking_slot_single) } let(:slot2) { FactoryGirl.build(:lesson_booking_slot_single) } 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} let(:lesson_session) {lesson_booking.lesson_sessions[0]} describe "accept" do it "can accept" do end end 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, slot: slotRecurring1 }) 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]}) 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 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 describe "upcoming_sessions_reminder" do it "succeeds" do lesson = normal_lesson(user, teacher) UserMailer.deliveries.clear LessonSession.upcoming_sessions_reminder #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! LessonSession.upcoming_sessions_reminder UserMailer.deliveries.count.should eql 2 UserMailer.deliveries.clear lesson.reload lesson.sent_starting_notice.should be_true LessonSession.upcoming_sessions_reminder UserMailer.deliveries.count.should eql 0 end end 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