osem-fcy/spec/models/ticket_spec.rb
Chrisbr 5f8a8ac6d9 Refactoring Tickets
- Tickets now independent from registration
- Implemented money gem
#419
2014-08-28 15:21:05 +02:00

92 lines
2.5 KiB
Ruby

require 'spec_helper'
describe Ticket do
let(:conference) { create(:conference) }
let(:ticket) { create(:ticket, price: 50, conference: conference) }
let(:user) { create(:user) }
describe 'validations' do
it 'has a valid factory' do
expect(build(:ticket)).to be_valid
end
it 'is not valid without a title' do
should validate_presence_of(:title)
end
it 'is not valid without a price_cents' do
should validate_presence_of(:price_cents)
end
it 'is not valid without a price_currency' do
should validate_presence_of(:price_currency)
end
it 'is not valid with a price_cents equals zero' do
should_not allow_value(0).for(:price_cents)
end
it 'is not valid with a price_cents smaller than zero' do
should_not allow_value(-1).for(:price_cents)
end
it 'is valid with a price_cents greater than zero' do
should allow_value(1).for(:price_cents)
end
end
describe '#bought?' do
it 'returns true if the user has bought this ticket' do
create(:ticket_purchase,
user: user,
ticket: ticket)
expect(ticket.bought?(user)).to eq(true)
end
it 'returns true if the user has bought this ticket' do
expect(ticket.bought?(user)).to eq(false)
end
end
describe '#quantity_bought_by' do
it 'returns the correct value if the user has bought this ticket' do
create(:ticket_purchase,
user: user,
ticket: ticket,
quantity: 20)
expect(ticket.quantity_bought_by(user)).to eq(20)
end
it 'returns zero if the user has not bought this ticket' do
expect(ticket.quantity_bought_by(user)).to eq(0)
end
end
describe '#total_price' do
it 'returns the correct value if the user has bought this ticket' do
create(:ticket_purchase,
user: user,
ticket: ticket,
quantity: 20)
expect(ticket.total_price(user)).to eq(20 * 50)
end
it 'returns zero if the user has not bought this ticket' do
expect(ticket.total_price(user)).to eq(0)
end
end
describe 'self#total_price' do
it 'returns the correct value if the user has bought this ticket' do
create(:ticket_purchase,
user: user,
ticket: ticket,
quantity: 20)
expect(Ticket.total_price(conference, user)).to eq(20 * 50)
end
it 'returns zero if the user has not bought this ticket' do
expect(Ticket.total_price(conference, user)).to eq(0)
end
end
end