From d47c80594cf092d31cfcb1f01144c4a75ba73fe6 Mon Sep 17 00:00:00 2001 From: Eric Schultz Date: Wed, 3 Feb 2021 16:44:24 -0600 Subject: [PATCH] ticket.deleted is published --- app/listeners/ticket_mailing_listener.rb | 4 +- app/models/ticket_to_legacy_ticket.rb | 10 +++ lib/update/update_tickets.rb | 13 ++-- spec/lib/update/update_tickets_spec.rb | 79 +++++++++++++++++++++++- 4 files changed, 95 insertions(+), 11 deletions(-) diff --git a/app/listeners/ticket_mailing_listener.rb b/app/listeners/ticket_mailing_listener.rb index f4f28a89..3489f69e 100644 --- a/app/listeners/ticket_mailing_listener.rb +++ b/app/listeners/ticket_mailing_listener.rb @@ -4,8 +4,8 @@ # 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 + tickets_ids = ticket_purchase.ticket_to_legacy_tickets.joins(:ticket).map {|i| i.ticket.id} + charge = ticket_purchase.ticket_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 diff --git a/app/models/ticket_to_legacy_ticket.rb b/app/models/ticket_to_legacy_ticket.rb index 984fc72f..e46df44a 100644 --- a/app/models/ticket_to_legacy_ticket.rb +++ b/app/models/ticket_to_legacy_ticket.rb @@ -65,4 +65,14 @@ class TicketToLegacyTicket < ApplicationRecord :event_discount).attributes!) end + def publish_deleted + Houdini.event_publisher.announce(:ticket_deleted, to_event('ticket.deleted', + :ticket_purchase, + :ticket_level, + :supporter, + :event, + :nonprofit, + :event_discount).attributes!) + end + end diff --git a/lib/update/update_tickets.rb b/lib/update/update_tickets.rb index 60d5e660..0a5e9580 100644 --- a/lib/update/update_tickets.rb +++ b/lib/update/update_tickets.rb @@ -55,12 +55,13 @@ module UpdateTickets end def self.delete(event_id, ticket_id) - Qx.update(:tickets) - .set(deleted: true) - .timestamps - .where(id: ticket_id) - .and_where(event_id: event_id) - .execute + + Ticket.transaction do + ticket = Event.find(event_id).tickets.find(ticket_id) + ticket.deleted = true + ticket.save! + ticket.ticket_to_legacy_tickets.each {|i| i.publish_deleted} + end end def self.delete_card_for_ticket(event_id, ticket_id) diff --git a/spec/lib/update/update_tickets_spec.rb b/spec/lib/update/update_tickets_spec.rb index 75309362..c441c91f 100644 --- a/spec/lib/update/update_tickets_spec.rb +++ b/spec/lib/update/update_tickets_spec.rb @@ -29,7 +29,7 @@ describe UpdateTickets do let(:general_ticket) do { - quantity: 1, + quantity: 2, supporter: supporter, payment: payment, charge: charge, @@ -50,7 +50,7 @@ describe UpdateTickets do let(:general_expected) do { id: ticket.id, - quantity: 1, + quantity: 2, supporter_id: supporter.id, payment_id: payment.id, charge_id: charge.id, @@ -233,11 +233,84 @@ describe UpdateTickets do end describe '.delete' do + include_context :shared_rd_donation_value_context + let(:trx) {create(:transaction, supporter: supporter)} + + let(:basic_valid_ticket_input) do + { ticket_id: ticket.id, event_id: event.id } + end + let(:include_fake_token) do + basic_valid_ticket_input.merge(token: fake_uuid) + end + + let(:include_valid_token) do + basic_valid_ticket_input.merge(token: source_token.token) + end + + let(:general_ticket) do + { + quantity: 2, + supporter: supporter, + payment: payment, + charge: charge, + event_discount: event_discount, + created_at: Time.now, + updated_at: Time.now, + checked_in: false, + bid_id: 1, + card_id: nil, + profile_id: nil, + note: nil, + deleted: false, + source_token_id: nil, + ticket_level_id: ticket_level.id + } + end + + let(:general_expected) do + { + id: ticket.id, + quantity: 2, + supporter_id: supporter.id, + payment_id: payment.id, + charge_id: charge.id, + event_discount_id: event_discount.id, + created_at: Time.now, + updated_at: Time.now, + checked_in: false, + bid_id: 1, + card_id: nil, + profile_id: nil, + note: nil, + deleted: false, + source_token_id: nil, + event_id: event.id, + ticket_level_id: ticket_level.id + }.with_indifferent_access + end + + + let(:payment) { force_create(:payment) } + let(:charge) { force_create(:charge) } + + let(:ticket) do + tp = trx.ticket_purchases.create(event: event) + + ticket = force_create(:ticket, + general_ticket.merge(event: event)) + ticket.quantity.times do + ticket.ticket_to_legacy_tickets.create(ticket_purchase: tp) + end + ticket + end it 'marks the given ticket as deleted=true' do + allow(Houdini.event_publisher).to receive(:announce) + expect(Houdini.event_publisher).to_not receive(:announce).with(:ticket_updated, any_args) + expect(Houdini.event_publisher).to receive(:announce).with(:ticket_deleted, any_args).exactly(ticket.quantity).times UpdateTickets.delete(ticket['event_id'], ticket['id']) ticket.reload expect(ticket['deleted']).to eq(true) - + expect(ticket.ticket_to_legacy_tickets.all? {|i| i.deleted}).to eq true expect(Ticket.count).to eq(1) end end