mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-05 22:26:07 +00:00
Report, add filtering by product for line items
This commit is contained in:
@@ -56,7 +56,7 @@ module Admin
|
||||
@rendering_options = rendering_options
|
||||
@data = Reporting::FrontendData.new(spree_current_user)
|
||||
|
||||
variant_id_in = params[:variant_id_in].reject(&:blank?)
|
||||
variant_id_in = params[:variant_id_in]&.reject(&:blank?)
|
||||
load_selected_variant if variant_id_in.present?
|
||||
end
|
||||
|
||||
|
||||
@@ -23,6 +23,12 @@ module Reporting
|
||||
line_items = line_items.supplied_by_any(@params[:supplier_id_in])
|
||||
end
|
||||
|
||||
# Filter by product
|
||||
variant_id_in = @params[:variant_id_in].reject(&:blank?)
|
||||
if variant_id_in.present?
|
||||
line_items = line_items.where("spree_line_items.variant_id": variant_id_in)
|
||||
end
|
||||
|
||||
if line_item_includes.present?
|
||||
line_items = line_items.includes(*line_item_includes).references(:line_items)
|
||||
end
|
||||
|
||||
@@ -9,13 +9,13 @@ describe Reporting::LineItems do
|
||||
# under test and the various objects it depends on. Other more common moking strategies where very
|
||||
# hard.
|
||||
class FakeOrderPermissions
|
||||
def initialize(line_item, orders_relation)
|
||||
@relation = Spree::LineItem.where(id: line_item.id)
|
||||
def initialize(line_items, orders_relation)
|
||||
@relations = Spree::LineItem.where(id: line_items.map(&:id))
|
||||
@orders_relation = orders_relation
|
||||
end
|
||||
|
||||
def visible_line_items
|
||||
relation
|
||||
relations
|
||||
end
|
||||
|
||||
def editable_line_items
|
||||
@@ -29,7 +29,7 @@ describe Reporting::LineItems do
|
||||
|
||||
private
|
||||
|
||||
attr_reader :relation, :orders_relation
|
||||
attr_reader :relations, :orders_relation
|
||||
end
|
||||
|
||||
describe '#list' do
|
||||
@@ -41,15 +41,39 @@ describe Reporting::LineItems do
|
||||
shipments: [build(:shipment)]
|
||||
)
|
||||
end
|
||||
let!(:line_item) { create(:line_item, order: order) }
|
||||
let!(:line_item1) { create(:line_item, order: order) }
|
||||
|
||||
let(:orders_relation) { Spree::Order.where(id: order.id) }
|
||||
let(:order_permissions) { FakeOrderPermissions.new(line_item, orders_relation) }
|
||||
let(:order_permissions) { FakeOrderPermissions.new([line_item1], orders_relation) }
|
||||
let(:params) { {} }
|
||||
|
||||
it 'returns masked data' do
|
||||
line_items = reports_line_items.list
|
||||
expect(line_items.first.order.email).to eq('HIDDEN')
|
||||
end
|
||||
|
||||
context "when filtering by product" do
|
||||
subject(:line_items) { reports_line_items.list }
|
||||
|
||||
let!(:line_item2) { create(:line_item, order: order) }
|
||||
let!(:line_item3) { create(:line_item, order: order) }
|
||||
let(:order_permissions) do
|
||||
FakeOrderPermissions.new([line_item1, line_item2, line_item3], orders_relation)
|
||||
end
|
||||
let(:params) { { variant_id_in: [line_item3.variant.id, line_item1.variant.id] } }
|
||||
|
||||
context "with an empty array" do
|
||||
let(:params) { { variant_id_in: [""] } }
|
||||
|
||||
it "does not filter" do
|
||||
expect(line_items).to include(line_item1, line_item2, line_item3)
|
||||
end
|
||||
end
|
||||
|
||||
it "includes selected products" do
|
||||
expect(line_items).to include(line_item1, line_item3)
|
||||
expect(line_items).not_to include(line_item2)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user