diff --git a/app/models/product_import/reset_absent.rb b/app/models/product_import/reset_absent.rb index 54d3340c93..74ba1d41d9 100644 --- a/app/models/product_import/reset_absent.rb +++ b/app/models/product_import/reset_absent.rb @@ -19,35 +19,33 @@ module ProductImport # that were not listed in the newly uploaded spreadsheet return unless data_for_stock_reset? - suppliers_to_reset_products = [] - suppliers_to_reset_inventories = [] + @suppliers_to_reset_products = [] + @suppliers_to_reset_inventories = [] enterprises_to_reset.each do |enterprise_id| - if reset_all_absent? && - permission_by_id?(enterprise_id) && - !importing_into_inventory? - suppliers_to_reset_products.push(Integer(enterprise_id)) + next unless reset_all_absent? && permission_by_id?(enterprise_id) + + if !importing_into_inventory? + @suppliers_to_reset_products.push(Integer(enterprise_id)) end - if reset_all_absent? && - permission_by_id?(enterprise_id) && - importing_into_inventory? - suppliers_to_reset_inventories.push(Integer(enterprise_id)) + if importing_into_inventory? + @suppliers_to_reset_inventories.push(Integer(enterprise_id)) end end - unless suppliers_to_reset_inventories.empty? + unless @suppliers_to_reset_inventories.empty? relation = VariantOverride .where( 'variant_overrides.hub_id IN (?) ' \ 'AND variant_overrides.id NOT IN (?)', - suppliers_to_reset_inventories, + @suppliers_to_reset_inventories, updated_ids ) @products_reset_count += relation.update_all(count_on_hand: 0) end - return if suppliers_to_reset_products.empty? + return if @suppliers_to_reset_products.empty? relation = Spree::Variant .joins(:product) @@ -56,7 +54,7 @@ module ProductImport 'AND spree_variants.id NOT IN (?) ' \ 'AND spree_variants.is_master = false ' \ 'AND spree_variants.deleted_at IS NULL', - suppliers_to_reset_products, + @suppliers_to_reset_products, updated_ids ) @products_reset_count += relation.update_all(count_on_hand: 0) diff --git a/spec/models/product_import/reset_absent_spec.rb b/spec/models/product_import/reset_absent_spec.rb index f2addc9dc3..c6fa531af9 100644 --- a/spec/models/product_import/reset_absent_spec.rb +++ b/spec/models/product_import/reset_absent_spec.rb @@ -99,6 +99,55 @@ describe ProductImport::ResetAbsent do end end end + + context 'when reset_all_absent is not set' do + let(:import_settings) do + { + settings: { 'reset_all_absent' => false }, + updated_ids: [0], + enterprises_to_reset: [1] + } + end + + it 'does not reset anything' do + reset_absent.call + + suppliers_to_reset_products = reset_absent + .instance_variable_get('@suppliers_to_reset_products') + suppliers_to_reset_inventories = reset_absent + .instance_variable_get('@suppliers_to_reset_inventories') + + expect(suppliers_to_reset_products).to eq([]) + expect(suppliers_to_reset_inventories).to eq([]) + end + end + + context 'the enterprise has no permission' do + let(:import_settings) do + { + settings: { 'reset_all_absent' => true }, + updated_ids: [0], + enterprises_to_reset: [1] + } + end + + before do + allow(entry_processor) + .to receive(:permission_by_id?).with(1) { false } + end + + it 'does not reset anything' do + reset_absent.call + + suppliers_to_reset_products = reset_absent + .instance_variable_get('@suppliers_to_reset_products') + suppliers_to_reset_inventories = reset_absent + .instance_variable_get('@suppliers_to_reset_inventories') + + expect(suppliers_to_reset_products).to eq([]) + expect(suppliers_to_reset_inventories).to eq([]) + end + end end describe '#products_reset_count' do