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

114 lines
2.8 KiB
Ruby

require 'spec_helper'
describe PosaCard do
let(:user) {FactoryGirl.create(:user)}
let(:card) {FactoryGirl.create(:posa_card)}
let(:card2) {FactoryGirl.create(:posa_card)}
let(:card_lessons) {FactoryGirl.create(:posa_card, card_type: JamRuby::PosaCardType::JAM_CLASS_4)}
let(:retailer) {FactoryGirl.create(:retailer)}
it "created by factory" do
card.touch
end
describe "activated" do
it "succeeds" do
card.activate(retailer)
card.errors.any?.should be false
card.activated_at.should_not be_nil
card.retailer.should eql retailer
end
it "cant be re-activated" do
card.activate(retailer)
Timecop.travel(Time.now + 1)
card.activate(retailer)
card.errors.any?.should be true
card.errors[:activated_at].should eql ['already activated. Please give card to customer. Thank you!']
end
it "must have retailer" do
card.activate(nil)
card.errors.any?.should be true
card.errors[:retailer].should eql ['must be specified']
end
end
describe "claim" do
it "succeeds" do
PosaCard.activate(card, retailer)
card.reload
card.claim(user)
card.errors.any?.should be false
card.claimed_at.should_not be_nil
card.user.should eql user
end
it "succeeds with jamclass type" do
PosaCard.activate(card_lessons, retailer)
card_lessons.reload
card_lessons.claim(user)
card_lessons.errors.any?.should be false
card_lessons.claimed_at.should_not be_nil
card_lessons.user.should eql user
card_lessons.reload
card_lessons.lesson_package_purchase.should_not be_nil
card_lessons.lesson_package_purchase.lesson_package_type.should eql LessonPackageType.test_drive_4
card_lessons.lesson_package_purchase.posa_card.should eql card_lessons
end
it "must be already activated" do
card.claim(user)
card.errors.any?.should be true
card.errors[:activated_at].should eql ['must already be set']
end
it "cant be re-claimed" do
PosaCard.activate(card, retailer)
card.reload
card.claim(user)
Timecop.travel(Time.now + 1)
card.claim(user)
card.errors.any?.should be true
card.errors[:claimed_at].should eql ['already claimed']
end
it "must have user" do
PosaCard.activate(card, retailer)
card.reload
card.claim(nil)
card.errors.any?.should be true
card.errors[:user].should eql ['must be specified']
end
it "can't be within one year" do
PosaCard.activate(card, retailer)
card.reload
card.claim(user)
PosaCard.activate(card2, retailer)
card2.reload
card2.claim(user)
card2.errors.any?.should be true
card2.errors[:user].should eql ['was within 1 year']
end
end
end