Inject strategy_factory into ResetAbsent

This commit is contained in:
Pau Perez
2018-09-25 17:53:21 +02:00
parent a9444b8909
commit a10e58e20a
4 changed files with 34 additions and 14 deletions

View File

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

View File

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

View File

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

View File

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