Extract orders relation as a query object

This commit is contained in:
Pau Perez
2021-03-03 08:51:22 +01:00
parent 72597ea3f9
commit 21fb3f3da6
3 changed files with 61 additions and 4 deletions

View File

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

View File

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

View File

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