mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Keep the order of passed argument
Do not retrieve the orders list sorted by completed_at but by the order_ids array itself Add BulkInvoiceJob spec and cover sorting behaviour
This commit is contained in:
committed by
Jean-Baptiste Bellet
parent
7a48ffdd38
commit
45beefc533
@@ -4,7 +4,7 @@ class BulkInvoiceJob < ActiveJob::Base
|
||||
def perform(order_ids, filepath)
|
||||
pdf = CombinePDF.new
|
||||
|
||||
orders_from(order_ids).each do |order|
|
||||
sorted_orders(order_ids).each do |order|
|
||||
invoice = renderer.render_to_string(order)
|
||||
|
||||
pdf << CombinePDF.parse(invoice)
|
||||
@@ -15,8 +15,9 @@ class BulkInvoiceJob < ActiveJob::Base
|
||||
|
||||
private
|
||||
|
||||
def orders_from(order_ids)
|
||||
Spree::Order.where(id: order_ids).order("completed_at DESC")
|
||||
# Ensures the records are returned in the same order the ids were originally given in
|
||||
def sorted_orders(order_ids)
|
||||
Spree::Order.where(id: order_ids).to_a.sort_by{ |order| order_ids.index(order.id) }
|
||||
end
|
||||
|
||||
def renderer
|
||||
|
||||
21
spec/jobs/bulk_invoice_job_spec.rb
Normal file
21
spec/jobs/bulk_invoice_job_spec.rb
Normal file
@@ -0,0 +1,21 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe BulkInvoiceJob do
|
||||
let(:order1) { build(:order, id: 1) }
|
||||
let(:order2) { build(:order, id: 2) }
|
||||
let(:order3) { build(:order, id: 3) }
|
||||
|
||||
let(:order_ids) { [3, 1, 2] }
|
||||
|
||||
subject { BulkInvoiceJob.new(order_ids, "/tmp/file/path") }
|
||||
|
||||
describe "#sorted_orders" do
|
||||
it "returns results in their original order" do
|
||||
expect(Spree::Order).to receive(:where).and_return([order1, order2, order3])
|
||||
|
||||
expect(subject.__send__(:sorted_orders, order_ids)).to eq [order3, order1, order2]
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -53,30 +53,4 @@ describe BulkInvoiceService do
|
||||
expect(filepath).to eq 'tmp/invoices/1234567.pdf'
|
||||
end
|
||||
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, :with_line_item, :completed,
|
||||
completed_at: 2.minutes.ago)
|
||||
order_oldest = create(:order_with_distributor, :with_line_item, :completed,
|
||||
completed_at: 4.minutes.ago)
|
||||
order_older = create(:order_with_distributor, :with_line_item, :completed,
|
||||
completed_at: 3.minutes.ago)
|
||||
|
||||
expect(renderer).to receive(:render_to_string).with(order_old).ordered.and_return("")
|
||||
expect(renderer).to receive(:render_to_string).with(order_older).ordered.and_return("")
|
||||
expect(renderer).to receive(:render_to_string).with(order_oldest).ordered.and_return("")
|
||||
|
||||
order_ids = [order_oldest, order_old, order_older].map(&:id)
|
||||
perform_enqueued_jobs do
|
||||
service.start_pdf_job(order_ids)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user