From 8a3c2a3e984dda3d843c8d6bf5249cf31ae9b588 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Semp=C3=A9?= Date: Wed, 8 Jan 2025 15:55:01 +0100 Subject: [PATCH] fix: Use succeeded_at to select fees for regrouping --- .../invoices/advance_charges_service.rb | 2 +- .../invoices/advance_charges_spec.rb | 2 +- .../invoices/advance_charges_service_spec.rb | 26 ++++++++++++++++--- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/app/services/invoices/advance_charges_service.rb b/app/services/invoices/advance_charges_service.rb index 762865aa2dc..140a0050dec 100644 --- a/app/services/invoices/advance_charges_service.rb +++ b/app/services/invoices/advance_charges_service.rb @@ -50,7 +50,7 @@ def create_group_invoice invoice.invoice_subscriptions.each do |is| is.subscription.fees .where(invoice: nil, payment_status: :succeeded) - .where("properties->>'timestamp' <= ?", is.charges_to_datetime) + .where("succeeded_at <= ?", is.timestamp) .update_all(invoice_id: invoice.id) # rubocop:disable Rails/SkipsModelValidations end diff --git a/spec/scenarios/invoices/advance_charges_spec.rb b/spec/scenarios/invoices/advance_charges_spec.rb index 612dcad3163..e72a0c67d93 100644 --- a/spec/scenarios/invoices/advance_charges_spec.rb +++ b/spec/scenarios/invoices/advance_charges_spec.rb @@ -53,7 +53,7 @@ def send_card_event!(item_id = SecureRandom.uuid) expect(subscription.fees.charge.where(invoice_id: nil).count).to eq 5 subscription.fees.charge.order(created_at: :asc).limit(3).update!( payment_status: :succeeded, - succeeded_at: Time.current + succeeded_at: DateTime.new(2024, 6, 20, 0, 10) ) travel_to(DateTime.new(2024, 7, 1, 0, 10)) do perform_billing diff --git a/spec/services/invoices/advance_charges_service_spec.rb b/spec/services/invoices/advance_charges_service_spec.rb index aba81ba496d..14748503eff 100644 --- a/spec/services/invoices/advance_charges_service_spec.rb +++ b/spec/services/invoices/advance_charges_service_spec.rb @@ -50,12 +50,23 @@ def fee_boundaries before do tax charge = create(:standard_charge, :regroup_paid_fees, plan: subscription.plan) - succeeded_fees = create_list(:charge_fee, 3, :succeeded, invoice_id: nil, subscription:, charge:, amount_cents: 100, properties: fee_boundaries) + succeeded_fees = create_list( + :charge_fee, + 3, + payment_status: :succeeded, + succeeded_at: billing_at - 1.month, + invoice_id: nil, + subscription:, + charge:, + amount_cents: 100, + properties: fee_boundaries + ) create_list(:charge_fee, 2, :failed, invoice_id: nil, subscription:, charge:, amount_cents: 100, properties: fee_boundaries) create( :charge_fee, - :succeeded, + payment_status: :succeeded, + succeeded_at: (billing_at - 1.month).end_of_month + 1.day, invoice_id: nil, subscription:, charge:, @@ -123,7 +134,16 @@ def fee_boundaries before do tax charge = create(:standard_charge, :regroup_paid_fees, plan: subscription.plan) - create(:charge_fee, :succeeded, invoice_id: nil, subscription:, charge:, amount_cents: 100, properties: fee_boundaries) + create( + :charge_fee, + payment_status: :succeeded, + succeeded_at: billing_at - 1.month, + invoice_id: nil, + subscription:, + charge:, + amount_cents: 100, + properties: fee_boundaries + ) allow_any_instance_of(Invoice).to receive(:should_sync_invoice?).and_return(true) # rubocop:disable RSpec/AnyInstance end