Check the bulk invoice rendering order

As it turns out, our performance optimisation with `find_each` overrides
or custom sorting.
This commit is contained in:
Maikel Linke
2020-06-10 10:05:47 +10:00
parent 795106aaa2
commit 680ee3dc86

View File

@@ -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