From 21fb3f3da6b1a137d73dc820e9af4e62b8bfd2f5 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Wed, 3 Mar 2021 08:51:22 +0100 Subject: [PATCH] Extract orders relation as a query object --- app/queries/complete_visible_orders.rb | 15 +++++++ .../reports/bulk_coop/bulk_coop_report.rb | 10 +++-- spec/queries/complete_visible_orders_spec.rb | 40 +++++++++++++++++++ 3 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 app/queries/complete_visible_orders.rb create mode 100644 spec/queries/complete_visible_orders_spec.rb diff --git a/app/queries/complete_visible_orders.rb b/app/queries/complete_visible_orders.rb new file mode 100644 index 0000000000..10eabe4f6d --- /dev/null +++ b/app/queries/complete_visible_orders.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class CompleteVisibleOrders + def initialize(order_permissions) + @order_permissions = order_permissions + end + + def query + order_permissions.visible_orders.complete + end + + private + + attr_reader :order_permissions +end diff --git a/engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb b/engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb index eb1f3ca60a..ef9cfdccc8 100644 --- a/engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb +++ b/engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb @@ -149,13 +149,15 @@ module OrderManagement end def order_permissions - return @order_permissions unless @order_permissions.nil? - - @order_permissions = ::Permissions::Order.new(@user, @params[:q]) + @order_permissions ||= ::Permissions::Order.new(@user, @params[:q]) end def report_line_items - @report_line_items ||= OpenFoodNetwork::Reports::LineItems.new(order_permissions, @params) + @report_line_items ||= OpenFoodNetwork::Reports::LineItems.new( + order_permissions, + @params, + CompleteVisibleOrders.new(order_permissions).query + ) end def customer_payments_total_cost(line_items) diff --git a/spec/queries/complete_visible_orders_spec.rb b/spec/queries/complete_visible_orders_spec.rb new file mode 100644 index 0000000000..82f66093ff --- /dev/null +++ b/spec/queries/complete_visible_orders_spec.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe CompleteVisibleOrders do + subject(:complete_visible_orders) { described_class.new(order_permissions) } + let(:filter_canceled) { false } + + describe '#query' do + let(:user) { create(:user) } + let(:enterprise) { create(:enterprise) } + let(:order_permissions) { ::Permissions::Order.new(user, filter_canceled) } + + before do + user.enterprises << enterprise + user.save! + end + + context 'when an order has no completed_at' do + let(:cart_order) { create(:order, distributor: enterprise) } + + it 'does not return it' do + expect(complete_visible_orders.query).not_to include(cart_order) + end + end + + context 'when an order has complete_at' do + let(:complete_order) { create(:order, completed_at: 1.day.ago, distributor: enterprise) } + + it 'does not return it' do + expect(complete_visible_orders.query).to include(complete_order) + end + end + + it 'calls #visible_orders' do + expect(order_permissions).to receive(:visible_orders).and_call_original + complete_visible_orders.query + end + end +end