diff --git a/.rubocop_manual_todo.yml b/.rubocop_manual_todo.yml index f02f99e9b5..e55124201f 100644 --- a/.rubocop_manual_todo.yml +++ b/.rubocop_manual_todo.yml @@ -226,7 +226,6 @@ Layout/LineLength: - spec/lib/open_food_network/group_buy_report_spec.rb - spec/lib/open_food_network/lettuce_share_report_spec.rb - spec/lib/open_food_network/option_value_namer_spec.rb - - spec/lib/open_food_network/order_and_distributor_report_spec.rb - spec/lib/open_food_network/order_cycle_form_applicator_spec.rb - spec/lib/open_food_network/order_cycle_permissions_spec.rb - spec/lib/open_food_network/order_grouper_spec.rb diff --git a/lib/open_food_network/order_and_distributor_report.rb b/lib/open_food_network/order_and_distributor_report.rb index 570096cb23..48435e4bd7 100644 --- a/lib/open_food_network/order_and_distributor_report.rb +++ b/lib/open_food_network/order_and_distributor_report.rb @@ -34,7 +34,9 @@ module OpenFoodNetwork end def search - @permissions.visible_orders.complete.not_state(:canceled).search(@params[:q]) + @permissions.visible_orders.select("DISTINCT spree_orders.*"). + complete.not_state(:canceled). + search(@params[:q]) end def table diff --git a/spec/lib/open_food_network/order_and_distributor_report_spec.rb b/spec/lib/open_food_network/order_and_distributor_report_spec.rb index 5b9e564b21..616af0fc6c 100644 --- a/spec/lib/open_food_network/order_and_distributor_report_spec.rb +++ b/spec/lib/open_food_network/order_and_distributor_report_spec.rb @@ -8,11 +8,16 @@ module OpenFoodNetwork subject = OrderAndDistributorReport.new nil header = subject.header - expect(header).to eq(['Order date', 'Order Id', - 'Customer Name', 'Customer Email', 'Customer Phone', 'Customer City', - 'SKU', 'Item name', 'Variant', 'Quantity', 'Max Quantity', 'Cost', 'Shipping Cost', - 'Payment Method', - 'Distributor', 'Distributor address', 'Distributor city', 'Distributor postcode', 'Shipping Method', 'Shipping instructions']) + expect(header).to eq( + [ + 'Order date', 'Order Id', + 'Customer Name', 'Customer Email', 'Customer Phone', 'Customer City', + 'SKU', 'Item name', 'Variant', 'Quantity', 'Max Quantity', 'Cost', 'Shipping Cost', + 'Payment Method', + 'Distributor', 'Distributor address', 'Distributor city', 'Distributor postcode', + 'Shipping Method', 'Shipping instructions' + ] + ) end context 'with completed order' do @@ -21,7 +26,12 @@ module OpenFoodNetwork let(:product) { create(:product) } let(:shipping_method) { create(:shipping_method) } let(:shipping_instructions) { 'pick up on thursday please!' } - let(:order) { create(:order, state: 'complete', completed_at: Time.zone.now, distributor: distributor, bill_address: bill_address, special_instructions: shipping_instructions) } + let(:order) { + create(:order, + state: 'complete', completed_at: Time.zone.now, + distributor: distributor, bill_address: bill_address, + special_instructions: shipping_instructions) + } let(:payment_method) { create(:payment_method, distributors: [distributor]) } let(:payment) { create(:payment, payment_method: payment_method, order: order) } let(:line_item) { create(:line_item_with_shipment, product: product, order: order) } @@ -37,6 +47,7 @@ module OpenFoodNetwork table = subject.table + expect(table.size).to eq 1 expect(table[0]).to eq([ order.reload.completed_at.strftime("%F %T"), order.id, @@ -60,6 +71,15 @@ module OpenFoodNetwork shipping_instructions ]) end + + it "prints one row per line item" do + create(:line_item_with_shipment, order: order) + + subject = OrderAndDistributorReport.new(create(:admin_user), {}, true) + + table = subject.table + expect(table.size).to eq 2 + end end end end