2018-03-25 16:15:39 +00:00
|
|
|
# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
|
2018-03-25 17:30:42 +00:00
|
|
|
require 'rails_helper'
|
|
|
|
|
|
|
|
describe QueryTicketLevels do
|
|
|
|
include_context :shared_donation_charge_context
|
|
|
|
describe '.gross_amount_from_tickets' do
|
|
|
|
it 'handles free tickets only properly' do
|
|
|
|
result = QueryTicketLevels.gross_amount_from_tickets(['ticket_level_id' => free_ticket_level.id, 'quantity'=> 5], nil)
|
|
|
|
expect(result).to eq 0
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'handles nonfree tickets only properly' do
|
|
|
|
result = QueryTicketLevels.gross_amount_from_tickets(['ticket_level_id' => ticket_level.id, 'quantity'=> 5], nil)
|
|
|
|
expect(result).to eq 2000
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'handles mix of tickets properly' do
|
|
|
|
result = QueryTicketLevels.gross_amount_from_tickets(
|
|
|
|
[{'ticket_level_id' => ticket_level.id, 'quantity'=> 5},
|
|
|
|
{'ticket_level_id' => ticket_level2.id, 'quantity'=> 2},
|
|
|
|
{'ticket_level_id' => free_ticket_level.id, 'quantity'=> 4000}], nil)
|
|
|
|
expect(result).to eq 3000
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'handles mix of tickets properly with discount code properly' do
|
|
|
|
result = QueryTicketLevels.gross_amount_from_tickets(
|
|
|
|
[{'ticket_level_id' => ticket_level.id, 'quantity'=> 5},
|
|
|
|
{'ticket_level_id' => ticket_level2.id, 'quantity'=> 2},
|
|
|
|
{'ticket_level_id' => free_ticket_level.id, 'quantity'=> 4000}], event_discount.id)
|
|
|
|
expect(result).to eq 2400
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '.verify_tickets_available' do
|
|
|
|
let(:ticket_level_1){ force_create(:ticket_level, limit: 3)}
|
|
|
|
let(:ticket_level_2) { force_create(:ticket_level, limit: 2)}
|
|
|
|
let(:tickets) {[
|
|
|
|
force_create(:ticket, ticket_level: ticket_level_1, quantity: 1),
|
|
|
|
force_create(:ticket, ticket_level: ticket_level_1, quantity: 1)
|
|
|
|
]}
|
|
|
|
|
|
|
|
it 'fails when ticket level is too many' do
|
|
|
|
expect { QueryTicketLevels.verify_tickets_available([
|
|
|
|
{ticket_level_id: ticket_level_1.id, quantity: 50},
|
|
|
|
{ticket_level_id: ticket_level_2.id, quantity: 1}
|
|
|
|
])}.to raise_error(NotEnoughQuantityError)
|
|
|
|
expect { QueryTicketLevels.verify_tickets_available([
|
|
|
|
|
|
|
|
{ticket_level_id: ticket_level_2.id, quantity: 3}
|
|
|
|
])}.to raise_error(NotEnoughQuantityError)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'allows when a full item is at 0 and other is acceptable' do
|
|
|
|
expect { QueryTicketLevels.verify_tickets_available([
|
|
|
|
{ticket_level_id: ticket_level_1.id, quantity: 0},
|
|
|
|
{ticket_level_id: ticket_level_2.id, quantity: 2}
|
|
|
|
])}.to_not raise_error
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'allows when only acceptable are passed ' do
|
|
|
|
expect { QueryTicketLevels.verify_tickets_available([
|
|
|
|
{ticket_level_id: ticket_level_2.id, quantity: 2}
|
|
|
|
])}.to_not raise_error
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|