Move import_settings query methods to Settings

This commit is contained in:
Pau Perez
2018-09-25 12:41:38 +02:00
parent fd84bea463
commit a409353d37
6 changed files with 175 additions and 52 deletions

View File

@@ -5,6 +5,7 @@
module ProductImport
class EntryProcessor
delegate :products_reset_count, to: :reset_absent
delegate :importing_into_inventory?, to: :settings
attr_reader :inventory_created, :inventory_updated, :products_created, :variants_created, :variants_updated, :supplier_products, :total_supplier_products, :import_settings
@@ -24,6 +25,8 @@ module ProductImport
@variants_updated = 0
@supplier_products = {}
@total_supplier_products = 0
@settings = Settings.new(import_settings)
end
def save_all(entries)
@@ -79,12 +82,10 @@ module ProductImport
@editable_enterprises.value?(Integer(supplier_id))
end
def importing_into_inventory?
import_settings[:settings] && import_settings[:settings]['import_into'] == 'inventories'
end
private
attr_reader :settings
def save_to_inventory(entry)
save_new_inventory_item entry if entry.validates_as? 'new_inventory_item'
save_existing_inventory_item entry if entry.validates_as? 'existing_inventory_item'
@@ -183,8 +184,6 @@ module ProductImport
end
def assign_defaults(object, entry)
settings = Settings.new(import_settings)
# Assigns a default value for a specified field e.g. category='Vegetables', setting this value
# either for all entries (overwrite_all), or only for those entries where the field was blank
# in the spreadsheet (overwrite_empty), depending on selected import settings

View File

@@ -8,9 +8,7 @@ module ProductImport
super(decorated)
@products_reset_count = 0
@settings = settings.settings
@updated_ids = settings.updated_ids
@enterprises_to_reset = settings.enterprises_to_reset
@settings = settings
@suppliers_to_reset_products = []
@suppliers_to_reset_inventories = []
@@ -19,9 +17,9 @@ module ProductImport
# For selected enterprises; set stock to zero for all products/inventory
# that were not listed in the newly uploaded spreadsheet
def call
return unless data_for_stock_reset? && reset_all_absent?
return unless settings.data_for_stock_reset? && settings.reset_all_absent?
enterprises_to_reset.each do |enterprise_id|
settings.enterprises_to_reset.each do |enterprise_id|
next unless permission_by_id?(enterprise_id)
if importing_into_inventory?
@@ -37,7 +35,7 @@ module ProductImport
'variant_overrides.hub_id IN (?) ' \
'AND variant_overrides.id NOT IN (?)',
@suppliers_to_reset_inventories,
updated_ids
settings.updated_ids
)
@products_reset_count += relation.update_all(count_on_hand: 0)
end
@@ -52,21 +50,13 @@ module ProductImport
'AND spree_variants.is_master = false ' \
'AND spree_variants.deleted_at IS NULL',
@suppliers_to_reset_products,
updated_ids
settings.updated_ids
)
@products_reset_count += relation.update_all(count_on_hand: 0)
end
private
attr_reader :settings, :updated_ids, :enterprises_to_reset
def data_for_stock_reset?
settings && updated_ids && enterprises_to_reset
end
def reset_all_absent?
settings['reset_all_absent']
end
attr_reader :settings
end
end

View File

@@ -21,5 +21,17 @@ module ProductImport
def enterprises_to_reset
@import_settings[:enterprises_to_reset]
end
def importing_into_inventory?
settings && settings['import_into'] == 'inventories'
end
def reset_all_absent?
settings['reset_all_absent']
end
def data_for_stock_reset?
!!(settings && updated_ids && enterprises_to_reset)
end
end
end

View File

@@ -56,4 +56,19 @@ describe ProductImport::EntryProcessor do
expect(reset_absent).to have_received(:products_reset_count)
end
end
describe '#importing_into_inventory?' do
let(:settings) do
instance_double(ProductImport::Settings, importing_into_inventory?: true)
end
before do
allow(ProductImport::Settings).to receive(:new) { settings }
end
it 'delegates to Settings' do
entry_processor.importing_into_inventory?
expect(settings).to have_received(:importing_into_inventory?)
end
end
end

View File

@@ -24,29 +24,9 @@ describe ProductImport::ResetAbsent do
let(:reset_absent) { described_class.new(entry_processor, settings) }
describe '#call' do
context 'when there are no settings' do
context 'when there is no data' do
let(:settings) do
instance_double(
ProductImport::Settings,
settings: nil,
updated_ids: [],
enterprises_to_reset: []
)
end
it 'returns nil' do
expect(reset_absent.call).to be_nil
end
end
context 'when there are no updated_ids' do
let(:settings) do
instance_double(
ProductImport::Settings,
settings: [],
updated_ids: nil,
enterprises_to_reset: []
)
instance_double(ProductImport::Settings, data_for_stock_reset?: false)
end
it 'returns nil' do
@@ -58,9 +38,7 @@ describe ProductImport::ResetAbsent do
let(:settings) do
instance_double(
ProductImport::Settings,
settings: [],
updated_ids: [],
enterprises_to_reset: nil
enterprises_to_reset: []
)
end
@@ -69,11 +47,12 @@ describe ProductImport::ResetAbsent do
end
end
context 'when there are settings, updated_ids and enterprises_to_reset' do
context 'when there are updated_ids and enterprises_to_reset' do
let(:settings) do
instance_double(
ProductImport::Settings,
settings: { 'reset_all_absent' => true },
reset_all_absent?: true,
data_for_stock_reset?: true,
updated_ids: [0],
enterprises_to_reset: [enterprise.id.to_s]
)
@@ -143,7 +122,8 @@ describe ProductImport::ResetAbsent do
let(:settings) do
instance_double(
ProductImport::Settings,
settings: { 'reset_all_absent' => false },
reset_all_absent?: false,
data_for_stock_reset?: true,
updated_ids: [0],
enterprises_to_reset: ['1']
)
@@ -171,7 +151,8 @@ describe ProductImport::ResetAbsent do
let(:settings) do
instance_double(
ProductImport::Settings,
settings: { 'reset_all_absent' => true },
reset_all_absent?: true,
data_for_stock_reset?: true,
updated_ids: [0],
enterprises_to_reset: ['1']
)
@@ -211,7 +192,8 @@ describe ProductImport::ResetAbsent do
let(:settings) do
instance_double(
ProductImport::Settings,
settings: { 'reset_all_absent' => true },
reset_all_absent?: true,
data_for_stock_reset?: true,
updated_ids: [0],
enterprises_to_reset: [enterprise_id.to_s]
)

View File

@@ -102,4 +102,129 @@ describe ProductImport::Settings do
end
end
end
describe '#importing_into_inventory?' do
context 'when :settings is specified' do
context 'and import_into is not specified' do
let(:import_settings) { { settings: {} } }
it 'returns false' do
expect(settings.importing_into_inventory?).to eq(false)
end
end
context 'and import_into is equal to inventories' do
let(:import_settings) do
{ settings: { 'import_into' => 'inventories' } }
end
it 'returns true' do
expect(settings.importing_into_inventory?).to eq(true)
end
end
context 'and import_into is not equal to inventories' do
let(:import_settings) do
{ settings: { 'import_into' => 'other' } }
end
it 'returns false' do
expect(settings.importing_into_inventory?).to eq(false)
end
end
end
context 'when :settings is not specified' do
let(:import_settings) { {} }
it 'returns falsy' do
expect(settings.importing_into_inventory?).to be_falsy
end
end
end
describe '#reset_all_absent?' do
context 'when :settings is not specified' do
let(:import_settings) { {} }
it 'raises' do
expect { settings.reset_all_absent? }.to raise_error(NoMethodError)
end
end
context 'when reset_all_absent is not set' do
let(:import_settings) do
{ settings: {} }
end
it 'returns nil' do
expect(settings.reset_all_absent?).to be_nil
end
end
context 'when reset_all_absent is set' do
let(:import_settings) do
{ settings: { 'reset_all_absent' => true } }
end
it 'returns true' do
expect(settings.reset_all_absent?).to eq(true)
end
end
end
describe '#data_for_stock_reset?' do
context 'when there are no settings' do
let(:import_settings) do
{
updated_ids: [],
enterprises_to_reset: []
}
end
it 'returns false' do
expect(settings.data_for_stock_reset?).to eq(false)
end
end
context 'when there are no updated_ids' do
let(:import_settings) do
{
settings: [],
enterprises_to_reset: []
}
end
it 'returns false' do
expect(settings.data_for_stock_reset?).to eq(false)
end
end
context 'when there are no enterprises_to_reset' do
let(:import_settings) do
{
settings: [],
updated_ids: []
}
end
it 'returns false' do
expect(settings.data_for_stock_reset?).to eq(false)
end
end
context 'when there are settings, updated_ids and enterprises_to_reset' do
let(:import_settings) do
{
settings: { 'something' => true },
updated_ids: [0],
enterprises_to_reset: [0]
}
end
it 'returns true' do
expect(settings.data_for_stock_reset?).to eq(true)
end
end
end
end