From 680ee3dc860da5bf6ad4af1c1b444d788dffeb80 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 10 Jun 2020 10:05:47 +1000 Subject: [PATCH] Check the bulk invoice rendering order As it turns out, our performance optimisation with `find_each` overrides or custom sorting. --- spec/services/bulk_invoice_service_spec.rb | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/spec/services/bulk_invoice_service_spec.rb b/spec/services/bulk_invoice_service_spec.rb index 52fe085288..1ff3d9edab 100644 --- a/spec/services/bulk_invoice_service_spec.rb +++ b/spec/services/bulk_invoice_service_spec.rb @@ -49,12 +49,25 @@ describe BulkInvoiceService do end describe "#orders_from" do + let(:renderer) { InvoiceRenderer.new } + + before do + allow(InvoiceRenderer).to receive(:new).and_return(renderer) + end + it "orders with completed desc" do order_old = create(:order_with_distributor, :completed, completed_at: 2.minutes.ago) + order_oldest = create(:order_with_distributor, :completed, completed_at: 4.minutes.ago) order_older = create(:order_with_distributor, :completed, completed_at: 3.minutes.ago) - expect(service.send(:orders_from, [order_older.id, order_old.id]).pluck(:id)) - .to eq([order_old.id, order_older.id]) + # This is the creation order provided `find_each` which invalidates + # our intended sorting by `completed_at`: + expect(renderer).to receive(:render_to_string).with(order_old).ordered.and_return("") + expect(renderer).to receive(:render_to_string).with(order_oldest).ordered.and_return("") + expect(renderer).to receive(:render_to_string).with(order_older).ordered.and_return("") + + order_ids = [order_oldest, order_old, order_older].map(&:id) + service.start_pdf_job_without_delay(order_ids) end end end