306 lines
9.3 KiB
Ruby
306 lines
9.3 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
# License: AGPL-3.0-or-later WITH WTO-AP-3.0-or-later
|
||
|
# Full license explanation at https://github.com/houdiniproject/houdini/blob/master/LICENSE
|
||
|
require 'rails_helper'
|
||
|
|
||
|
RSpec.describe TicketLevel, type: :model do
|
||
|
include_context :shared_donation_charge_context
|
||
|
let(:ticket_level_name) {"TICKET LEVEL"}
|
||
|
let(:order) { 3}
|
||
|
let(:free_amount) { 0}
|
||
|
let(:non_free_amount) {7500}
|
||
|
let(:ticket_limit) {4}
|
||
|
let(:description) {"Description"}
|
||
|
|
||
|
|
||
|
let(:ticket_level_1) { event.ticket_levels.create(
|
||
|
name: ticket_level_name,
|
||
|
limit: ticket_limit,
|
||
|
admin_only: true,
|
||
|
order: order,
|
||
|
amount: free_amount,
|
||
|
description: description
|
||
|
|
||
|
) }
|
||
|
|
||
|
let(:ticket_level_2) {
|
||
|
event.ticket_levels.create(
|
||
|
name: ticket_level_name,
|
||
|
limit: nil,
|
||
|
admin_only: false,
|
||
|
order: order,
|
||
|
amount: non_free_amount,
|
||
|
description: description
|
||
|
|
||
|
)
|
||
|
}
|
||
|
|
||
|
describe 'create' do
|
||
|
describe 'ticket_level_1' do
|
||
|
it 'is without error' do
|
||
|
expect(ticket_level_1.errors).to be_empty
|
||
|
end
|
||
|
|
||
|
it 'announces create' do
|
||
|
expect(Houdini.event_publisher).to receive(:announce).with(:ticket_level_created, {
|
||
|
'id' => kind_of(String),
|
||
|
'object' => 'object_event',
|
||
|
'type' => 'ticket_level.created',
|
||
|
'data' => {
|
||
|
'object' => {
|
||
|
'amount' => {'value_in_cents' => 0, 'currency' => 'usd'},
|
||
|
'available_to' => 'admins',
|
||
|
'deleted' => false,
|
||
|
'description' => description,
|
||
|
'event' => {
|
||
|
'id' => event.id,
|
||
|
'name' => event.name,
|
||
|
'object' => 'event',
|
||
|
'nonprofit' => nonprofit.id
|
||
|
},
|
||
|
'id'=> kind_of(Numeric),
|
||
|
'limit' => 4,
|
||
|
'name' => ticket_level_name,
|
||
|
'nonprofit'=> {
|
||
|
'id' => nonprofit.id,
|
||
|
'name' => nonprofit.name,
|
||
|
'object' => 'nonprofit'
|
||
|
},
|
||
|
'event_discounts' => [],
|
||
|
'object' => 'ticket_level',
|
||
|
'order' => order
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
ticket_level_1
|
||
|
end
|
||
|
|
||
|
end
|
||
|
describe 'ticket_level_2' do
|
||
|
it 'is without error' do
|
||
|
expect(ticket_level_2.errors).to be_empty
|
||
|
end
|
||
|
|
||
|
it 'announces create' do
|
||
|
expect(Houdini.event_publisher).to receive(:announce).with(:ticket_level_created, {
|
||
|
'id' => kind_of(String),
|
||
|
'object' => 'object_event',
|
||
|
'type' => 'ticket_level.created',
|
||
|
'data' => {
|
||
|
'object' => {
|
||
|
'amount' => {'value_in_cents' => non_free_amount, 'currency' => 'usd'},
|
||
|
'available_to' => 'everyone',
|
||
|
'deleted' => false,
|
||
|
'description' => description,
|
||
|
'event' => {
|
||
|
'id' => event.id,
|
||
|
'name' => event.name,
|
||
|
'object' => 'event',
|
||
|
'nonprofit' => nonprofit.id
|
||
|
},
|
||
|
'id'=> kind_of(Numeric),
|
||
|
'limit' => nil,
|
||
|
'name' => ticket_level_name,
|
||
|
'nonprofit'=> {
|
||
|
'id' => nonprofit.id,
|
||
|
'name' => nonprofit.name,
|
||
|
'object' => 'nonprofit'
|
||
|
},
|
||
|
'event_discounts' => [],
|
||
|
'object' => 'ticket_level',
|
||
|
'order' => order
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
ticket_level_2
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe 'update' do
|
||
|
describe 'ticket_level_1' do
|
||
|
it 'is without error' do
|
||
|
ticket_level_1.amount = 5000
|
||
|
ticket_level_1.save
|
||
|
expect(ticket_level_1.errors).to be_empty
|
||
|
end
|
||
|
|
||
|
it 'announces updated' do
|
||
|
expect(Houdini.event_publisher).to receive(:announce).with(:ticket_level_created, anything).ordered
|
||
|
expect(Houdini.event_publisher).to receive(:announce).with(:ticket_level_updated, {
|
||
|
'id' => kind_of(String),
|
||
|
'object' => 'object_event',
|
||
|
'type' => 'ticket_level.updated',
|
||
|
'data' => {
|
||
|
'object' => {
|
||
|
'amount' => {'value_in_cents' => 5000, 'currency' => 'usd'},
|
||
|
'available_to' => 'admins',
|
||
|
'deleted' => false,
|
||
|
'description' => description,
|
||
|
'event' => {
|
||
|
'id' => event.id,
|
||
|
'name' => event.name,
|
||
|
'object' => 'event',
|
||
|
'nonprofit' => nonprofit.id
|
||
|
},
|
||
|
'id'=> kind_of(Numeric),
|
||
|
'limit' => 4,
|
||
|
'name' => ticket_level_name,
|
||
|
'nonprofit'=> {
|
||
|
'id' => nonprofit.id,
|
||
|
'name' => nonprofit.name,
|
||
|
'object' => 'nonprofit'
|
||
|
},
|
||
|
'event_discounts' => [],
|
||
|
'object' => 'ticket_level',
|
||
|
'order' => order
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
ticket_level_1
|
||
|
ticket_level_1.amount = 5000
|
||
|
ticket_level_1.save
|
||
|
end
|
||
|
|
||
|
end
|
||
|
describe 'ticket_level_2' do
|
||
|
it 'is without error' do
|
||
|
ticket_level_2.amount = 0
|
||
|
ticket_level_2.save
|
||
|
expect(ticket_level_2.errors).to be_empty
|
||
|
end
|
||
|
|
||
|
it 'announces updated' do
|
||
|
expect(Houdini.event_publisher).to receive(:announce).with(:ticket_level_created, anything).ordered
|
||
|
expect(Houdini.event_publisher).to receive(:announce).with(:ticket_level_updated, {
|
||
|
'id' => kind_of(String),
|
||
|
'object' => 'object_event',
|
||
|
'type' => 'ticket_level.updated',
|
||
|
'data' => {
|
||
|
'object' => {
|
||
|
'amount' => {'value_in_cents' => 0, 'currency' => 'usd'},
|
||
|
'available_to' => 'everyone',
|
||
|
'deleted' => false,
|
||
|
'description' => description,
|
||
|
'event' => {
|
||
|
'id' => event.id,
|
||
|
'name' => event.name,
|
||
|
'object' => 'event',
|
||
|
'nonprofit' => nonprofit.id
|
||
|
},
|
||
|
'id'=> kind_of(Numeric),
|
||
|
'limit' => nil,
|
||
|
'name' => ticket_level_name,
|
||
|
'nonprofit'=> {
|
||
|
'id' => nonprofit.id,
|
||
|
'name' => nonprofit.name,
|
||
|
'object' => 'nonprofit'
|
||
|
},
|
||
|
'event_discounts' => [],
|
||
|
'object' => 'ticket_level',
|
||
|
'order' => order
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
ticket_level_2
|
||
|
ticket_level_2.amount = 0
|
||
|
ticket_level_2.save
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
describe 'deleted' do
|
||
|
describe 'ticket_level_1' do
|
||
|
it 'is without error' do
|
||
|
|
||
|
ticket_level_1.discard!
|
||
|
expect(ticket_level_1.deleted).to eq true
|
||
|
end
|
||
|
|
||
|
it 'announces deleted' do
|
||
|
expect(Houdini.event_publisher).to receive(:announce).with(:ticket_level_created, anything).ordered
|
||
|
expect(Houdini.event_publisher).to receive(:announce).with(:ticket_level_deleted, {
|
||
|
'id' => kind_of(String),
|
||
|
'object' => 'object_event',
|
||
|
'type' => 'ticket_level.deleted',
|
||
|
'data' => {
|
||
|
'object' => {
|
||
|
'amount' => {'value_in_cents' => 0, 'currency' => 'usd'},
|
||
|
'available_to' => 'admins',
|
||
|
'deleted' => true,
|
||
|
'description' => description,
|
||
|
'event' => {
|
||
|
'id' => event.id,
|
||
|
'name' => event.name,
|
||
|
'object' => 'event',
|
||
|
'nonprofit' => nonprofit.id
|
||
|
},
|
||
|
'id'=> kind_of(Numeric),
|
||
|
'limit' => 4,
|
||
|
'name' => ticket_level_name,
|
||
|
'nonprofit'=> {
|
||
|
'id' => nonprofit.id,
|
||
|
'name' => nonprofit.name,
|
||
|
'object' => 'nonprofit'
|
||
|
},
|
||
|
'event_discounts' => [],
|
||
|
'object' => 'ticket_level',
|
||
|
'order' => order
|
||
|
}
|
||
|
}
|
||
|
}).ordered
|
||
|
|
||
|
ticket_level_1.discard!
|
||
|
end
|
||
|
|
||
|
end
|
||
|
describe 'ticket_level_2' do
|
||
|
it 'is without error' do
|
||
|
expect(ticket_level_2.errors).to be_empty
|
||
|
end
|
||
|
|
||
|
it 'announces deleted' do
|
||
|
expect(Houdini.event_publisher).to receive(:announce).with(:ticket_level_created, anything).ordered
|
||
|
expect(Houdini.event_publisher).to receive(:announce).with(:ticket_level_deleted, {
|
||
|
'id' => kind_of(String),
|
||
|
'object' => 'object_event',
|
||
|
'type' => 'ticket_level.deleted',
|
||
|
'data' => {
|
||
|
'object' => {
|
||
|
'amount' => {'value_in_cents' => non_free_amount, 'currency' => 'usd'},
|
||
|
'available_to' => 'everyone',
|
||
|
'deleted' => true,
|
||
|
'description' => description,
|
||
|
'event' => {
|
||
|
'id' => event.id,
|
||
|
'name' => event.name,
|
||
|
'object' => 'event',
|
||
|
'nonprofit' => nonprofit.id
|
||
|
},
|
||
|
'id'=> kind_of(Numeric),
|
||
|
'limit' => nil,
|
||
|
'name' => ticket_level_name,
|
||
|
'nonprofit'=> {
|
||
|
'id' => nonprofit.id,
|
||
|
'name' => nonprofit.name,
|
||
|
'object' => 'nonprofit'
|
||
|
},
|
||
|
'event_discounts' => [],
|
||
|
'object' => 'ticket_level',
|
||
|
'order' => order
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
ticket_level_2.discard!
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|