diff --git a/app/models/spree/property_decorator.rb b/app/models/spree/property_decorator.rb index ede97bcc2d..58657ad3b1 100644 --- a/app/models/spree/property_decorator.rb +++ b/app/models/spree/property_decorator.rb @@ -10,7 +10,8 @@ module Spree joins(products: {variants: {exchanges: :order_cycle}}). merge(Exchange.outgoing). merge(Exchange.to_enterprise(shop)). - merge(OrderCycle.active) + merge(OrderCycle.active). + select('DISTINCT spree_properties.*') } after_save :refresh_products_cache diff --git a/spec/models/spree/property_spec.rb b/spec/models/spree/property_spec.rb index f291c4a7af..6e6ed2d780 100644 --- a/spec/models/spree/property_spec.rb +++ b/spec/models/spree/property_spec.rb @@ -68,6 +68,19 @@ module Spree it "doesn't return the property from a closed order cycle" do expect(Property.sold_by(shop)).not_to include property_closed_oc end + + context "with another product in the order cycle" do + let!(:product2) { create(:simple_product) } + let!(:oc) { create(:simple_order_cycle, distributors: [shop], variants: [product.variants.first, product2.variants.first]) } + + before do + product2.set_property 'Organic', 'NASAA 12345' + end + + it "doesn't return duplicates" do + expect(Property.sold_by(shop).to_a.count).to eq 1 + end + end end end