mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-12 23:27:48 +00:00
Inject strategy_factory into ResetAbsent
This commit is contained in:
@@ -72,10 +72,19 @@ module ProductImport
|
||||
def reset_absent
|
||||
@reset_absent ||= ResetAbsent.new(
|
||||
self,
|
||||
Settings.new(import_settings)
|
||||
Settings.new(import_settings),
|
||||
strategy_factory
|
||||
)
|
||||
end
|
||||
|
||||
def strategy_factory
|
||||
if importing_into_inventory?
|
||||
InventoryReset
|
||||
else
|
||||
ProductsReset
|
||||
end
|
||||
end
|
||||
|
||||
def total_saved_count
|
||||
@products_created + @variants_created + @variants_updated + @inventory_created + @inventory_updated
|
||||
end
|
||||
|
||||
@@ -4,11 +4,12 @@ module ProductImport
|
||||
class ResetAbsent < SimpleDelegator
|
||||
attr_reader :products_reset_count
|
||||
|
||||
def initialize(decorated, settings)
|
||||
def initialize(decorated, settings, strategy_factory)
|
||||
super(decorated)
|
||||
@products_reset_count = 0
|
||||
|
||||
@settings = settings
|
||||
@strategy_factory = strategy_factory
|
||||
|
||||
@suppliers_to_reset_products = []
|
||||
@suppliers_to_reset_inventories = []
|
||||
@@ -32,7 +33,7 @@ module ProductImport
|
||||
|
||||
private
|
||||
|
||||
attr_reader :settings
|
||||
attr_reader :settings, :strategy_factory
|
||||
|
||||
def reset_stock
|
||||
@products_reset_count += strategy.reset
|
||||
@@ -42,14 +43,6 @@ module ProductImport
|
||||
strategy_factory.new(settings.updated_ids, supplier_ids)
|
||||
end
|
||||
|
||||
def strategy_factory
|
||||
if @suppliers_to_reset_inventories.present?
|
||||
ProductImport::InventoryReset
|
||||
elsif @suppliers_to_reset_products.present?
|
||||
ProductImport::ProductsReset
|
||||
end
|
||||
end
|
||||
|
||||
def supplier_ids
|
||||
if @suppliers_to_reset_inventories.present?
|
||||
@suppliers_to_reset_inventories
|
||||
|
||||
@@ -66,7 +66,8 @@ describe ProductImport::EntryProcessor do
|
||||
instance_double(
|
||||
ProductImport::Settings,
|
||||
data_for_stock_reset?: true,
|
||||
reset_all_absent?: true
|
||||
reset_all_absent?: true,
|
||||
importing_into_inventory?: true
|
||||
)
|
||||
end
|
||||
|
||||
@@ -74,7 +75,8 @@ describe ProductImport::EntryProcessor do
|
||||
entry_processor.reset_absent_items
|
||||
|
||||
expect(ProductImport::ResetAbsent)
|
||||
.to have_received(:new).with(entry_processor, settings)
|
||||
.to have_received(:new)
|
||||
.with(entry_processor, settings, ProductImport::InventoryReset)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -88,6 +90,8 @@ describe ProductImport::EntryProcessor do
|
||||
.and_return(reset_absent)
|
||||
|
||||
allow(reset_absent).to receive(:products_reset_count)
|
||||
|
||||
allow(import_settings).to receive(:[]).with(:settings)
|
||||
end
|
||||
|
||||
it 'delegates to ResetAbsent' do
|
||||
|
||||
@@ -21,7 +21,9 @@ describe ProductImport::ResetAbsent do
|
||||
)
|
||||
end
|
||||
|
||||
let(:reset_absent) { described_class.new(entry_processor, settings) }
|
||||
let(:reset_absent) do
|
||||
described_class.new(entry_processor, settings, strategy_factory)
|
||||
end
|
||||
|
||||
describe '#call' do
|
||||
context 'when there are no enterprises_to_reset' do
|
||||
@@ -32,6 +34,8 @@ describe ProductImport::ResetAbsent do
|
||||
)
|
||||
end
|
||||
|
||||
let(:strategy_factory) { double(:strategy_factory) }
|
||||
|
||||
it 'returns nil' do
|
||||
expect(reset_absent.call).to be_nil
|
||||
end
|
||||
@@ -57,6 +61,8 @@ describe ProductImport::ResetAbsent do
|
||||
let(:variant) { create(:variant) }
|
||||
let(:enterprise) { variant.product.supplier }
|
||||
|
||||
let(:strategy_factory) { ProductImport::ProductsReset }
|
||||
|
||||
before do
|
||||
allow(entry_processor)
|
||||
.to receive(:importing_into_inventory?) { false }
|
||||
@@ -82,6 +88,8 @@ describe ProductImport::ResetAbsent do
|
||||
create(:variant_override, variant: variant, hub: enterprise)
|
||||
end
|
||||
|
||||
let(:strategy_factory) { ProductImport::InventoryReset }
|
||||
|
||||
before do
|
||||
variant_override
|
||||
|
||||
@@ -119,6 +127,8 @@ describe ProductImport::ResetAbsent do
|
||||
)
|
||||
end
|
||||
|
||||
let(:strategy_factory) { double(:strategy_factory) }
|
||||
|
||||
before do
|
||||
allow(entry_processor)
|
||||
.to receive(:permission_by_id?).with('1') { false }
|
||||
@@ -154,6 +164,8 @@ describe ProductImport::ResetAbsent do
|
||||
)
|
||||
end
|
||||
|
||||
let(:strategy_factory) { ProductImport::InventoryReset }
|
||||
|
||||
before do
|
||||
variant_override
|
||||
|
||||
@@ -192,6 +204,8 @@ describe ProductImport::ResetAbsent do
|
||||
)
|
||||
end
|
||||
|
||||
let(:strategy_factory) { ProductImport::ProductsReset }
|
||||
|
||||
it 'returns the number of reset products or variants' do
|
||||
reset_absent.call
|
||||
expect(reset_absent.products_reset_count).to eq(2)
|
||||
|
||||
Reference in New Issue
Block a user