From 512672a174513367348b9d1b05b47d46f622ce8b Mon Sep 17 00:00:00 2001 From: Eric Schultz Date: Tue, 2 Feb 2021 17:48:05 -0600 Subject: [PATCH] Verifies that all the events related to ticket_creation are fired --- app/listeners/ticket_listener.rb | 10 ---------- app/listeners/ticket_mailing_listener.rb | 12 ++++++++++++ app/models/ticket_purchase.rb | 5 +++++ app/models/ticket_to_legacy_ticket.rb | 12 ++++++++++++ app/models/transaction.rb | 18 ++++++++++++++---- config/initializers/houdini_event_publisher.rb | 2 +- lib/insert/insert_tickets.rb | 13 ++++++++++++- spec/lib/insert/insert_tickets_spec.rb | 4 +++- 8 files changed, 59 insertions(+), 17 deletions(-) delete mode 100644 app/listeners/ticket_listener.rb create mode 100644 app/listeners/ticket_mailing_listener.rb diff --git a/app/listeners/ticket_listener.rb b/app/listeners/ticket_listener.rb deleted file mode 100644 index 1612d26d..00000000 --- a/app/listeners/ticket_listener.rb +++ /dev/null @@ -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 \ No newline at end of file diff --git a/app/listeners/ticket_mailing_listener.rb b/app/listeners/ticket_mailing_listener.rb new file mode 100644 index 00000000..f4f28a89 --- /dev/null +++ b/app/listeners/ticket_mailing_listener.rb @@ -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 \ No newline at end of file diff --git a/app/models/ticket_purchase.rb b/app/models/ticket_purchase.rb index cb044559..5a22125f 100644 --- a/app/models/ticket_purchase.rb +++ b/app/models/ticket_purchase.rb @@ -5,6 +5,7 @@ class TicketPurchase < ApplicationRecord include Model::Houidable include Model::Jbuilder + include Model::Eventable setup_houid :tktpur add_builder_expansion :event, :nonprofit, :supporter @@ -52,6 +53,10 @@ class TicketPurchase < ApplicationRecord 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 def set_original_discount original_discount = event_discount.nil? ? 0 : event_discount.percent diff --git a/app/models/ticket_to_legacy_ticket.rb b/app/models/ticket_to_legacy_ticket.rb index 104d1f7d..b8c82849 100644 --- a/app/models/ticket_to_legacy_ticket.rb +++ b/app/models/ticket_to_legacy_ticket.rb @@ -5,6 +5,8 @@ class TicketToLegacyTicket < ApplicationRecord include Model::Houidable include Model::Jbuilder + include Model::Eventable + belongs_to :ticket_purchase belongs_to :ticket @@ -43,4 +45,14 @@ class TicketToLegacyTicket < ApplicationRecord 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 diff --git a/app/models/transaction.rb b/app/models/transaction.rb index df4f97b8..4edf61c6 100644 --- a/app/models/transaction.rb +++ b/app/models/transaction.rb @@ -4,9 +4,15 @@ # Full license explanation at https://github.com/houdiniproject/houdini/blob/master/LICENSE class Transaction < ApplicationRecord include Model::Houidable + include Model::Jbuilder + include Model::Eventable + setup_houid :trx + add_builder_expansion :nonprofit, :supporter belongs_to :supporter + has_one :nonprofit, through: :supporter + has_many :transaction_assignments has_many :ticket_purchases, through: :transaction_assignments, source: :assignable, source_type: 'TicketPurchase' @@ -15,15 +21,19 @@ class Transaction < ApplicationRecord def to_builder(*expand) - Jbuilder.new do |json| + init_builder(*expand) do |json| json.(self, :id) json.object 'transaction' - json.supporter supporter.id - json.nonprofit supporter.nonprofit.id + json.amount do json.value_in_cents amount || 0 - json.currency supporter.nonprofit.currency + json.currency nonprofit.currency end end end + + def publish_created + Houdini.event_publisher.announce(:transaction_created, + to_event('transaction.created', :nonprofit, :supporter).attributes!) + end end diff --git a/config/initializers/houdini_event_publisher.rb b/config/initializers/houdini_event_publisher.rb index c4faee7a..70bb89ff 100644 --- a/config/initializers/houdini_event_publisher.rb +++ b/config/initializers/houdini_event_publisher.rb @@ -8,5 +8,5 @@ Wisper.clear if Rails.env.development? Rails.application.config.houdini.listeners.push(NonprofitMailerListener, CreditCardPaymentListener, SepaPaymentListener, - TicketListener + TicketMailingListener ) diff --git a/lib/insert/insert_tickets.rb b/lib/insert/insert_tickets.rb index e93fb33a..701c2da9 100644 --- a/lib/insert/insert_tickets.rb +++ b/lib/insert/insert_tickets.rb @@ -49,6 +49,7 @@ module InsertTickets result = {} + trx = entities[:supporter_id].transactions.create(amount: gross_amount) if gross_amount > 0 # Create offsite payment for tickets if data[:kind] == 'offsite' @@ -90,10 +91,17 @@ module InsertTickets end end + ticket_purchase = trx.ticket_purchases.create(event: entities[:event_id]) # Generate the bid ids data['tickets'] = generate_bid_ids(entities[:event_id].id, tl_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 InsertActivities.for_tickets(result['tickets'].map(&:id)) @@ -101,7 +109,10 @@ module InsertTickets ticket_ids = result['tickets'].map(&:id) 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 end diff --git a/spec/lib/insert/insert_tickets_spec.rb b/spec/lib/insert/insert_tickets_spec.rb index cda823be..d1b313ed 100644 --- a/spec/lib/insert/insert_tickets_spec.rb +++ b/spec/lib/insert/insert_tickets_spec.rb @@ -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(:supporter_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) expected = generate_expected_tickets(payment_id: result['payment'].id,