From a3c0c722ab43ccf8b6acb01c1404ccceff70bb80 Mon Sep 17 00:00:00 2001 From: Ancor Cruz Date: Fri, 26 Jul 2024 12:35:19 +0100 Subject: [PATCH] Fix InvoicesQuery payment dispute lost filter Whenever `payment_dispute_lost` filter had a value other than `nil` it was returing only inovoices with `payment_dispute_lost`, hence, when the filter had a `false` value, it still returns only invoices with a payment dispute lost. This change fixes the filter by providing the proper scoping base on the value of the filter. --- app/queries/invoices_query.rb | 3 +- spec/queries/invoices_query_spec.rb | 44 +++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/app/queries/invoices_query.rb b/app/queries/invoices_query.rb index d24aaf3b2df..51ffd5ed43b 100644 --- a/app/queries/invoices_query.rb +++ b/app/queries/invoices_query.rb @@ -14,7 +14,8 @@ def call(search_term: nil, status: nil, filters: {}, customer_id: nil, payment_s invoices = with_issuing_date_range(invoices) if filters.issuing_date_from || filters.issuing_date_to invoices = invoices.where(status:) if status.present? invoices = invoices.where(payment_status:) if payment_status.present? - invoices = invoices.where.not(payment_dispute_lost_at: nil) unless payment_dispute_lost.nil? + invoices = invoices.where.not(payment_dispute_lost_at: nil) if payment_dispute_lost + invoices = invoices.where(payment_dispute_lost_at: nil) if payment_dispute_lost == false invoices = invoices.where(payment_overdue:) if payment_overdue.present? invoices = invoices.order(issuing_date: :desc, created_at: :desc) invoices = paginate(invoices) diff --git a/spec/queries/invoices_query_spec.rb b/spec/queries/invoices_query_spec.rb index bcb4056e9e8..5e459ec1b91 100644 --- a/spec/queries/invoices_query_spec.rb +++ b/spec/queries/invoices_query_spec.rb @@ -211,6 +211,50 @@ end end + context 'when filtering by payment dispute lost false' do + it 'returns 1 invoices' do + result = invoice_query.call( + search_term: nil, + status: nil, + payment_dispute_lost: false + ) + + returned_ids = result.invoices.pluck(:id) + + aggregate_failures do + expect(returned_ids.count).to eq(5) + expect(returned_ids).to include(invoice_first.id) + expect(returned_ids).to include(invoice_second.id) + expect(returned_ids).to include(invoice_third.id) + expect(returned_ids).to include(invoice_fourth.id) + expect(returned_ids).to include(invoice_fifth.id) + expect(returned_ids).not_to include(invoice_sixth.id) + end + end + end + + context 'when filtering by payment dispute lost' do + it 'returns 1 invoices' do + result = invoice_query.call( + search_term: nil, + status: nil, + payment_dispute_lost: true + ) + + returned_ids = result.invoices.pluck(:id) + + aggregate_failures do + expect(result.invoices.count).to eq(1) + expect(returned_ids).not_to include(invoice_first.id) + expect(returned_ids).not_to include(invoice_second.id) + expect(returned_ids).not_to include(invoice_third.id) + expect(returned_ids).not_to include(invoice_fourth.id) + expect(returned_ids).not_to include(invoice_fifth.id) + expect(returned_ids).to include(invoice_sixth.id) + end + end + end + context 'when filtering by payment overdue' do it 'returns expected invoices' do result = invoice_query.call(