Verifies that all the events related to ticket_creation are fired
This commit is contained in:
parent
6c233bc2f9
commit
512672a174
8 changed files with 59 additions and 17 deletions
|
@ -1,10 +0,0 @@
|
||||||
# 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
|
|
||||||
class TicketListener < ApplicationListener
|
|
||||||
def self.ticket_create(tickets, charge, user=nil)
|
|
||||||
TicketMailer.followup(tickets.map{|i| i.id}, charge && charge.id).deliver_later
|
|
||||||
TicketMailer.receipt_admin(tickets.map{|i| i.id}, user && user.id).deliver_later
|
|
||||||
end
|
|
||||||
end
|
|
12
app/listeners/ticket_mailing_listener.rb
Normal file
12
app/listeners/ticket_mailing_listener.rb
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# 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
|
||||||
|
class TicketMailingListener < ApplicationListener
|
||||||
|
def self.ticket_purchase_created(ticket_purchase)
|
||||||
|
tickets_ids = ticket_purchase.tickets_to_legacy_tickets.joins(:ticket).map {|i| i.ticket.id}
|
||||||
|
charge = ticket_purchase.tickets_to_legacy_tickets.joins(:ticket).first.charge
|
||||||
|
TicketMailer.followup(tickets_ids, charge && charge.id).deliver_later
|
||||||
|
TicketMailer.receipt_admin(tickets_ids, nil).deliver_later
|
||||||
|
end
|
||||||
|
end
|
|
@ -5,6 +5,7 @@
|
||||||
class TicketPurchase < ApplicationRecord
|
class TicketPurchase < ApplicationRecord
|
||||||
include Model::Houidable
|
include Model::Houidable
|
||||||
include Model::Jbuilder
|
include Model::Jbuilder
|
||||||
|
include Model::Eventable
|
||||||
setup_houid :tktpur
|
setup_houid :tktpur
|
||||||
|
|
||||||
add_builder_expansion :event, :nonprofit, :supporter
|
add_builder_expansion :event, :nonprofit, :supporter
|
||||||
|
@ -52,6 +53,10 @@ class TicketPurchase < ApplicationRecord
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def publish_created
|
||||||
|
Houdini.event_publisher.announce(:ticket_purchase_created, to_event('ticket_purchase.created', :event, :nonprofit, :supporter, :trx, :event_discount).attributes!)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def set_original_discount
|
def set_original_discount
|
||||||
original_discount = event_discount.nil? ? 0 : event_discount.percent
|
original_discount = event_discount.nil? ? 0 : event_discount.percent
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
class TicketToLegacyTicket < ApplicationRecord
|
class TicketToLegacyTicket < ApplicationRecord
|
||||||
include Model::Houidable
|
include Model::Houidable
|
||||||
include Model::Jbuilder
|
include Model::Jbuilder
|
||||||
|
include Model::Eventable
|
||||||
|
|
||||||
belongs_to :ticket_purchase
|
belongs_to :ticket_purchase
|
||||||
belongs_to :ticket
|
belongs_to :ticket
|
||||||
|
|
||||||
|
@ -43,4 +45,14 @@ class TicketToLegacyTicket < ApplicationRecord
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def publish_created
|
||||||
|
Houdini.event_publisher.announce(:ticket_created, to_event('ticket.created',
|
||||||
|
:ticket_purchase,
|
||||||
|
:ticket_level,
|
||||||
|
:supporter,
|
||||||
|
:event,
|
||||||
|
:nonprofit,
|
||||||
|
:event_discount).attributes!)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,9 +4,15 @@
|
||||||
# Full license explanation at https://github.com/houdiniproject/houdini/blob/master/LICENSE
|
# Full license explanation at https://github.com/houdiniproject/houdini/blob/master/LICENSE
|
||||||
class Transaction < ApplicationRecord
|
class Transaction < ApplicationRecord
|
||||||
include Model::Houidable
|
include Model::Houidable
|
||||||
|
include Model::Jbuilder
|
||||||
|
include Model::Eventable
|
||||||
|
|
||||||
setup_houid :trx
|
setup_houid :trx
|
||||||
|
add_builder_expansion :nonprofit, :supporter
|
||||||
|
|
||||||
belongs_to :supporter
|
belongs_to :supporter
|
||||||
|
has_one :nonprofit, through: :supporter
|
||||||
|
|
||||||
has_many :transaction_assignments
|
has_many :transaction_assignments
|
||||||
|
|
||||||
has_many :ticket_purchases, through: :transaction_assignments, source: :assignable, source_type: 'TicketPurchase'
|
has_many :ticket_purchases, through: :transaction_assignments, source: :assignable, source_type: 'TicketPurchase'
|
||||||
|
@ -15,15 +21,19 @@ class Transaction < ApplicationRecord
|
||||||
|
|
||||||
|
|
||||||
def to_builder(*expand)
|
def to_builder(*expand)
|
||||||
Jbuilder.new do |json|
|
init_builder(*expand) do |json|
|
||||||
json.(self, :id)
|
json.(self, :id)
|
||||||
json.object 'transaction'
|
json.object 'transaction'
|
||||||
json.supporter supporter.id
|
|
||||||
json.nonprofit supporter.nonprofit.id
|
|
||||||
json.amount do
|
json.amount do
|
||||||
json.value_in_cents amount || 0
|
json.value_in_cents amount || 0
|
||||||
json.currency supporter.nonprofit.currency
|
json.currency nonprofit.currency
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def publish_created
|
||||||
|
Houdini.event_publisher.announce(:transaction_created,
|
||||||
|
to_event('transaction.created', :nonprofit, :supporter).attributes!)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,5 +8,5 @@ Wisper.clear if Rails.env.development?
|
||||||
Rails.application.config.houdini.listeners.push(NonprofitMailerListener,
|
Rails.application.config.houdini.listeners.push(NonprofitMailerListener,
|
||||||
CreditCardPaymentListener,
|
CreditCardPaymentListener,
|
||||||
SepaPaymentListener,
|
SepaPaymentListener,
|
||||||
TicketListener
|
TicketMailingListener
|
||||||
)
|
)
|
||||||
|
|
|
@ -49,6 +49,7 @@ module InsertTickets
|
||||||
|
|
||||||
result = {}
|
result = {}
|
||||||
|
|
||||||
|
trx = entities[:supporter_id].transactions.create(amount: gross_amount)
|
||||||
if gross_amount > 0
|
if gross_amount > 0
|
||||||
# Create offsite payment for tickets
|
# Create offsite payment for tickets
|
||||||
if data[:kind] == 'offsite'
|
if data[:kind] == 'offsite'
|
||||||
|
@ -90,10 +91,17 @@ module InsertTickets
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
ticket_purchase = trx.ticket_purchases.create(event: entities[:event_id])
|
||||||
# Generate the bid ids
|
# Generate the bid ids
|
||||||
data['tickets'] = generate_bid_ids(entities[:event_id].id, tl_entities)
|
data['tickets'] = generate_bid_ids(entities[:event_id].id, tl_entities)
|
||||||
|
|
||||||
result['tickets'] = generated_ticket_entities(data['tickets'], result, entities)
|
result['tickets'] = generated_ticket_entities(data['tickets'], result, entities)
|
||||||
|
result['tickets'].each do |legacy_ticket|
|
||||||
|
|
||||||
|
legacy_ticket.quantity.times do
|
||||||
|
ticket_purchase.ticket_to_legacy_tickets.create(ticket: legacy_ticket)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Create the activity rows for the tickets
|
# Create the activity rows for the tickets
|
||||||
InsertActivities.for_tickets(result['tickets'].map(&:id))
|
InsertActivities.for_tickets(result['tickets'].map(&:id))
|
||||||
|
@ -101,7 +109,10 @@ module InsertTickets
|
||||||
ticket_ids = result['tickets'].map(&:id)
|
ticket_ids = result['tickets'].map(&:id)
|
||||||
charge_id = result['charge'] ? result['charge'].id : nil
|
charge_id = result['charge'] ? result['charge'].id : nil
|
||||||
|
|
||||||
Houdini.event_publisher.announce(:ticket_create, result['tickets'], result['charge'])
|
ticket_purchase.ticket_to_legacy_tickets.each{|i| i.publish_created}
|
||||||
|
ticket_purchase.publish_created
|
||||||
|
trx.publish_created
|
||||||
|
|
||||||
result
|
result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -289,7 +289,9 @@ describe InsertTickets do
|
||||||
expect(Houdini.event_publisher).to receive(:announce).with(:ticket_level_created, any_args).ordered
|
expect(Houdini.event_publisher).to receive(:announce).with(:ticket_level_created, any_args).ordered
|
||||||
expect(Houdini.event_publisher).to receive(:announce).with(:supporter_created, anything)
|
expect(Houdini.event_publisher).to receive(:announce).with(:supporter_created, anything)
|
||||||
expect(Houdini.event_publisher).to receive(:announce).with(:supporter_address_created, anything)
|
expect(Houdini.event_publisher).to receive(:announce).with(:supporter_address_created, anything)
|
||||||
expect(Houdini.event_publisher).to receive(:announce).with(:ticket_create, any_args).ordered
|
expect(Houdini.event_publisher).to receive(:announce).with(:ticket_created, anything).once.ordered
|
||||||
|
expect(Houdini.event_publisher).to receive(:announce).with(:ticket_purchase_created, any_args).ordered
|
||||||
|
expect(Houdini.event_publisher).to receive(:announce).with(:transaction_created, any_args).ordered
|
||||||
result = InsertTickets.create(tickets: [{ quantity: 1, ticket_level_id: ticket_level.id }], nonprofit_id: nonprofit.id, supporter_id: supporter.id, token: source_token.token, event_id: event.id, kind: 'offsite', offsite_payment: { kind: 'check', check_number: 'fake_checknumber' }, current_user: user)
|
result = InsertTickets.create(tickets: [{ quantity: 1, ticket_level_id: ticket_level.id }], nonprofit_id: nonprofit.id, supporter_id: supporter.id, token: source_token.token, event_id: event.id, kind: 'offsite', offsite_payment: { kind: 'check', check_number: 'fake_checknumber' }, current_user: user)
|
||||||
|
|
||||||
expected = generate_expected_tickets(payment_id: result['payment'].id,
|
expected = generate_expected_tickets(payment_id: result['payment'].id,
|
||||||
|
|
Loading…
Reference in a new issue