jam-cloud/ruby/spec/jam_ruby/models/lesson_session_spec.rb

130 lines
4.9 KiB
Ruby
Raw Normal View History

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
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]})
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
2016-05-16 16:39:20 +00:00
lesson = normal_lesson(user, teacher)
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!
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
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