From ae24b2d6887306f7fc4410b3666581bc51ae2db1 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Fri, 9 Jun 2023 12:46:28 +0100 Subject: [PATCH] Update ScopeVariantsForSearch logic to match both product and variant SKUs --- app/models/spree/product.rb | 2 +- lib/open_food_network/scope_variants_for_search.rb | 2 +- .../scope_variants_to_search_spec.rb | 13 +++++++++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/app/models/spree/product.rb b/app/models/spree/product.rb index 440286ad1d..8eca297dd0 100755 --- a/app/models/spree/product.rb +++ b/app/models/spree/product.rb @@ -28,7 +28,7 @@ module Spree acts_as_paranoid - searchable_attributes :supplier_id, :primary_taxon_id, :meta_keywords + searchable_attributes :supplier_id, :primary_taxon_id, :meta_keywords, :sku searchable_associations :supplier, :properties, :primary_taxon, :variants searchable_scopes :active, :with_properties diff --git a/lib/open_food_network/scope_variants_for_search.rb b/lib/open_food_network/scope_variants_for_search.rb index e84d4b66f3..a1295ef915 100644 --- a/lib/open_food_network/scope_variants_for_search.rb +++ b/lib/open_food_network/scope_variants_for_search.rb @@ -29,7 +29,7 @@ module OpenFoodNetwork attr_reader :params def search_params - { product_name_cont: params[:q], sku_cont: params[:q] } + { product_name_cont: params[:q], sku_cont: params[:q], product_sku_cont: params[:q] } end def query_scope diff --git a/spec/lib/open_food_network/scope_variants_to_search_spec.rb b/spec/lib/open_food_network/scope_variants_to_search_spec.rb index 73f66f1c10..f9c72214b1 100644 --- a/spec/lib/open_food_network/scope_variants_to_search_spec.rb +++ b/spec/lib/open_food_network/scope_variants_to_search_spec.rb @@ -30,8 +30,17 @@ describe OpenFoodNetwork::ScopeVariantsForSearch do let(:params) { { q: "product 1" } } it "returns all products whose names or SKUs match the query" do - expect(result).to include v1 - expect(result).to_not include v2, v3, v4 + expect(result).to include v1, v2 + expect(result).to_not include v3, v4 + end + + context "matching both product SKUs and variant SKUs" do + let!(:v5) { create(:variant, sku: "Product 1b") } + + it "returns all variants whose SKU or product's SKU match the query" do + expect(result).to include v1, v2, v5 + expect(result).to_not include v3, v4 + end end end