mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Move import_settings query methods to Settings
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user