mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-25 20:46:48 +00:00
The string '< Hidden >' was agreed on as a good default, so we will use the hidden_field key. I also moved the definition in en.yml up to the more general area at the start of admin.reports section (before it was hidden between report-specific keys.
82 lines
2.3 KiB
Ruby
82 lines
2.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Reporting::LineItems do
|
|
# This object lets us add some test coverage despite the very deep coupling between the class
|
|
# under test and the various objects it depends on. Other more common moking strategies where very
|
|
# hard.
|
|
let(:fake_order_permissions) do
|
|
Class.new do
|
|
def initialize(line_items, orders_relation)
|
|
@relations = Spree::LineItem.where(id: line_items.map(&:id))
|
|
@orders_relation = orders_relation
|
|
end
|
|
|
|
def visible_line_items
|
|
relations
|
|
end
|
|
|
|
def editable_line_items
|
|
line_item = FactoryBot.create(:line_item)
|
|
Spree::LineItem.where(id: line_item.id)
|
|
end
|
|
|
|
def visible_orders
|
|
orders_relation
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :relations, :orders_relation
|
|
end
|
|
end
|
|
|
|
subject(:reports_line_items) { described_class.new(order_permissions, params) }
|
|
|
|
describe '#list' do
|
|
let!(:order) do
|
|
create(
|
|
:order,
|
|
distributor: create(:enterprise),
|
|
completed_at: 1.day.ago,
|
|
shipments: [build(:shipment)]
|
|
)
|
|
end
|
|
let!(:line_item1) { create(:line_item, order:) }
|
|
|
|
let(:orders_relation) { Spree::Order.where(id: order.id) }
|
|
let(:order_permissions) { fake_order_permissions.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:) }
|
|
let!(:line_item3) { create(:line_item, order:) }
|
|
let(:order_permissions) do
|
|
fake_order_permissions.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
|