From 4f2c57c757389d3eae7690ea31853b2ca6bfbff7 Mon Sep 17 00:00:00 2001 From: Toon Willems Date: Thu, 12 Sep 2024 11:13:33 +0100 Subject: [PATCH] bug - Fix check for invoice.closed? in `Invoices::AdvanceChargesService` (#2572) ## Description This check returns true if the invoice is nil, this is not intended. --- app/services/invoices/advance_charges_service.rb | 7 +++---- .../invoices/advance_charges_service_spec.rb | 13 +++++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/services/invoices/advance_charges_service.rb b/app/services/invoices/advance_charges_service.rb index 0108a487ea5..8b6eed0ce07 100644 --- a/app/services/invoices/advance_charges_service.rb +++ b/app/services/invoices/advance_charges_service.rb @@ -20,7 +20,7 @@ def call invoice = create_group_invoice - unless invoice&.closed? + if invoice && !invoice.closed? SendWebhookJob.perform_later('invoice.created', invoice) Invoices::GeneratePdfAndNotifyJob.perform_later(invoice:, email: false) Integrations::Aggregator::Invoices::CreateJob.perform_later(invoice:) if invoice.should_sync_invoice? @@ -55,9 +55,8 @@ def create_group_invoice end if invoice.fees.empty? - invoice.invoice_subscriptions.destroy_all - invoice.destroy! - return nil + invoice = nil + raise ActiveRecord::Rollback end Invoices::ComputeAmountsFromFees.call(invoice:) diff --git a/spec/services/invoices/advance_charges_service_spec.rb b/spec/services/invoices/advance_charges_service_spec.rb index e507560ef6e..ac83b6af7e5 100644 --- a/spec/services/invoices/advance_charges_service_spec.rb +++ b/spec/services/invoices/advance_charges_service_spec.rb @@ -96,6 +96,19 @@ def fee_boundaries expect(result).to be_success expect(result.invoice).to be_nil end + + context "when there is a pay in advance charge" do + before do + create(:standard_charge, :regroup_paid_fees, plan: subscription.plan) + end + + it 'does not create an invoice' do + result = invoice_service.call + + expect(result).to be_success + expect(result.invoice).to be_nil + end + end end context 'with integration requiring sync' do