diff --git a/app/services/order_cycles/distributed_products_service.rb b/app/services/order_cycles/distributed_products_service.rb index 71b0574d1e..bbaba0d1aa 100644 --- a/app/services/order_cycles/distributed_products_service.rb +++ b/app/services/order_cycles/distributed_products_service.rb @@ -118,13 +118,22 @@ module OrderCycles end def variants - options[:inventory_enabled] ? stocked_variants_and_overrides : stocked_variants + return tag_rule_filtered_variants if options[:variant_tag_enabled] + + return stocked_variants_and_overrides if options[:inventory_enabled] + + stocked_variants end def stocked_variants Spree::Variant.joins(:stock_items).where(query_stock) end + def tag_rule_filtered_variants + VariantTagRulesFilterer.new(distributor:, customer:, + variants_relation: stocked_variants).call + end + def stocked_variants_and_overrides stocked_variants = Spree::Variant. joins("LEFT OUTER JOIN variant_overrides ON variant_overrides.variant_id = spree_variants.id diff --git a/spec/services/order_cycles/distributed_products_service_spec.rb b/spec/services/order_cycles/distributed_products_service_spec.rb index ff6b9a55a4..2766219b0d 100644 --- a/spec/services/order_cycles/distributed_products_service_spec.rb +++ b/spec/services/order_cycles/distributed_products_service_spec.rb @@ -68,6 +68,20 @@ RSpec.describe OrderCycles::DistributedProductsService do expect(products_relation).not_to include product end + + context "with variant_tag enabled" do + subject(:products_relation) { + described_class.new( + distributor, order_cycle, customer, variant_tag_enabled: true + ).products_relation + } + + it "calls VariantTagRulesFilterer" do + expect(VariantTagRulesFilterer).to receive(:new).and_call_original + + products_relation + end + end end context "with variant overrides" do @@ -81,6 +95,12 @@ RSpec.describe OrderCycles::DistributedProductsService do create(:variant_override, hub: distributor, variant:, count_on_hand: 0) } + it "calls ProductTagRulesFilterer" do + expect(ProductTagRulesFilterer).to receive(:new).and_call_original + + products_relation + end + it "does not return product when an override is out of stock" do expect(products_relation).not_to include product end