From 678fa37df9432d594aa002cde7fbb8c57bd1c69e Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 21 Feb 2024 16:12:33 +1100 Subject: [PATCH] Fix duplication issue When a product had mutiple variant assigned to the same category it should only return the product one --- app/reflexes/products_reflex.rb | 2 +- spec/reflexes/products_reflex_spec.rb | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/app/reflexes/products_reflex.rb b/app/reflexes/products_reflex.rb index 650ce2b23f..e8d7634b7c 100644 --- a/app/reflexes/products_reflex.rb +++ b/app/reflexes/products_reflex.rb @@ -152,7 +152,7 @@ class ProductsReflex < ApplicationReflex def fetch_products product_query = OpenFoodNetwork::Permissions.new(current_user) - .editable_products.merge(product_scope).ransack(ransack_query).result + .editable_products.merge(product_scope).ransack(ransack_query).result(distinct: true) @pagy, @products = pagy(product_query.order(:name), items: @per_page, page: @page, size: [1, 2, 2, 1]) end diff --git a/spec/reflexes/products_reflex_spec.rb b/spec/reflexes/products_reflex_spec.rb index 542199628e..cb8314b544 100644 --- a/spec/reflexes/products_reflex_spec.rb +++ b/spec/reflexes/products_reflex_spec.rb @@ -15,7 +15,7 @@ describe ProductsReflex, type: :reflex, feature: :admin_style_v3 do end describe '#fetch' do - subject{ build_reflex(method_name: :fetch, **context) } + subject { build_reflex(method_name: :fetch, **context) } describe "sorting" do let!(:product_z) { create(:simple_product, name: "Zucchini") } @@ -34,6 +34,27 @@ describe ProductsReflex, type: :reflex, feature: :admin_style_v3 do end end + describe '#filter' do + context "when filtering by category" do + let!(:product_a) { create(:simple_product, name: "Apples") } + let!(:product_z) do + create(:simple_product, name: "Zucchini").tap do |p| + p.variants.first.update(primary_taxon: category_c) + end + end + let(:category_c) { create(:taxon, name: "Category 1") } + + it "returns product with a variant matching the given category" do + # Add a second variant to test we are not returning duplicate product + product_z.variants << create(:variant, primary_taxon: category_c) + + reflex = run_reflex(:filter, params: { category_id: category_c.id } ) + + expect(reflex.get(:products).to_a).to eq([product_z]) + end + end + end + describe '#bulk_update' do let!(:variant_a1) { product_a.variants.first.tap{ |v|