From e84e0aebe6f79a17dd0b342345340c59401230df Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 9 Jun 2020 14:58:07 +0200 Subject: [PATCH] Fix fatal error in reports helper for orders without payments --- app/helpers/spree/reports_helper.rb | 11 +++++--- .../spree/admin/reports_helper_spec.rb | 25 +++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 spec/helpers/spree/admin/reports_helper_spec.rb diff --git a/app/helpers/spree/reports_helper.rb b/app/helpers/spree/reports_helper.rb index bc75cfb9e8..3f299c8250 100644 --- a/app/helpers/spree/reports_helper.rb +++ b/app/helpers/spree/reports_helper.rb @@ -11,10 +11,13 @@ module Spree end def report_payment_method_options(orders) - orders.map do |o| - pm = o.payments.first.payment_method - [pm.andand.name, pm.andand.id] - end.uniq + orders.map do |order| + payment_method = order.payments.first.andand.payment_method + + next unless payment_method + + [payment_method.name, payment_method.id] + end.compact.uniq end def report_shipping_method_options(orders) diff --git a/spec/helpers/spree/admin/reports_helper_spec.rb b/spec/helpers/spree/admin/reports_helper_spec.rb new file mode 100644 index 0000000000..9ef4976750 --- /dev/null +++ b/spec/helpers/spree/admin/reports_helper_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'spec_helper' + + +describe Spree::ReportsHelper, type: :helper do + describe "#report_payment_method_options" do + let(:order_with_payments) { create(:order_ready_to_ship) } + let(:order_without_payments) { create(:order_with_line_items) } + let(:orders) { [order_with_payments, order_without_payments] } + let(:payment_method) { order_with_payments.payments.first.payment_method } + + it "returns payment method select options for given orders" do + select_options = helper.report_payment_method_options([order_with_payments]) + + expect(select_options).to eq [[payment_method.name, payment_method.id]] + end + + it "handles orders that don't have payments, without error" do + select_options = helper.report_payment_method_options(orders) + + expect(select_options).to eq [[payment_method.name, payment_method.id]] + end + end +end