From feb7e173b19f68434bbd75a214112c91c9ca28b0 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 27 May 2024 15:11:37 +1000 Subject: [PATCH] Fix order cycle controller spec, product properties filtering And fix the underlying product renderer --- .../api/v0/order_cycles_controller.rb | 5 +-- app/services/products_renderer.rb | 3 +- .../api/v0/order_cycles_controller_spec.rb | 21 ++++++++----- spec/services/products_renderer_spec.rb | 31 ++++++++++++++----- 4 files changed, 42 insertions(+), 18 deletions(-) diff --git a/app/controllers/api/v0/order_cycles_controller.rb b/app/controllers/api/v0/order_cycles_controller.rb index 7bb56ecc56..1f195b490a 100644 --- a/app/controllers/api/v0/order_cycles_controller.rb +++ b/app/controllers/api/v0/order_cycles_controller.rb @@ -86,8 +86,9 @@ module Api end def distributed_products - OrderCycles::DistributedProductsService.new(distributor, order_cycle, - customer).products_relation + OrderCycles::DistributedProductsService.new( + distributor, order_cycle, customer + ).products_supplier_relation.pluck(:id) end end end diff --git a/app/services/products_renderer.rb b/app/services/products_renderer.rb index 4825d4aa71..2ad240d0c9 100644 --- a/app/services/products_renderer.rb +++ b/app/services/products_renderer.rb @@ -73,7 +73,8 @@ class ProductsRenderer results = query.joins('JOIN enterprises ON enterprises.id = first_variant.supplier_id LEFT OUTER JOIN producer_properties ON producer_properties.producer_id = enterprises.id'). - where(producer_properties: { property_id: property_ids }) + where(producer_properties: { property_id: property_ids }). + where(inherits_properties: true) return results end diff --git a/spec/controllers/api/v0/order_cycles_controller_spec.rb b/spec/controllers/api/v0/order_cycles_controller_spec.rb index eb578e56f4..e3cbe2503d 100644 --- a/spec/controllers/api/v0/order_cycles_controller_spec.rb +++ b/spec/controllers/api/v0/order_cycles_controller_spec.rb @@ -107,14 +107,15 @@ module Api let!(:supplier) { create(:supplier_enterprise, properties: [supplier_property]) } before do - product1.update!(supplier:) - product2.update!(supplier:) - product3.update!(supplier:, inherits_properties: false) + product1.variants.first.update!(supplier:) + product2.variants.first.update!(supplier:) + product3.update!(inherits_properties: false) + product3.variants.first.update!(supplier:) end it "filter out the product that don't inherits from supplier properties" do api_get :products, id: order_cycle.id, distributor: distributor.id, - q: { with_properties: [supplier_property.id] } + q: { with_variants_supplier_properties: [supplier_property.id] } expect(response.status).to eq 200 expect(product_ids).to match_array [product1.id, product2.id] @@ -263,16 +264,20 @@ module Api context "with custom taxon ordering applied and duplicate product names in the order cycle" do let!(:supplier) { create(:supplier_enterprise) } let!(:product5) { - create(:product, name: "Duplicate name", primary_taxon: taxon3, supplier_id: supplier.id) + create(:product, name: "Duplicate name", primary_taxon_id: taxon3.id, + supplier_id: supplier.id) } let!(:product6) { - create(:product, name: "Duplicate name", primary_taxon: taxon3, supplier_id: supplier.id) + create(:product, name: "Duplicate name", primary_taxon_id: taxon3.id, + supplier_id: supplier.id) } let!(:product7) { - create(:product, name: "Duplicate name", primary_taxon: taxon2, supplier_id: supplier.id) + create(:product, name: "Duplicate name", primary_taxon_id: taxon2.id, + supplier_id: supplier.id) } let!(:product8) { - create(:product, name: "Duplicate name", primary_taxon: taxon2, supplier_id: supplier.id) + create(:product, name: "Duplicate name", primary_taxon_id: taxon2.id, + supplier_id: supplier.id) } before do diff --git a/spec/services/products_renderer_spec.rb b/spec/services/products_renderer_spec.rb index 1a5291082d..218f8fb944 100644 --- a/spec/services/products_renderer_spec.rb +++ b/spec/services/products_renderer_spec.rb @@ -15,21 +15,24 @@ RSpec.describe ProductsRenderer do let(:fruits_supplier) { create(:supplier_enterprise) } let(:cakes_supplier) { create(:supplier_enterprise) } let!(:product_apples) { - create(:product, name: "apples", primary_taxon_id: fruits.id, supplier_id: fruits_supplier.id) + create(:product, name: "apples", primary_taxon_id: fruits.id, + supplier_id: fruits_supplier.id, inherits_properties: true) } let!(:product_banana_bread) { - create(:product, name: "banana bread", variants: [ - create(:variant, supplier: cakes_supplier, primary_taxon: cakes), - create(:variant, supplier: fruits_supplier, primary_taxon: cakes) - ]) + create(:product, name: "banana bread", inherits_properties: true, + variants: [ + create(:variant, supplier: cakes_supplier, primary_taxon: cakes), + create(:variant, supplier: fruits_supplier, primary_taxon: cakes) + ] + ) } let!(:product_cherries) { create(:product, name: "cherries", primary_taxon_id: fruits.id, - supplier_id: fruits_supplier.id) + supplier_id: fruits_supplier.id, inherits_properties: true) } let!(:product_doughnuts) { create(:product, name: "doughnuts", primary_taxon_id: cakes.id, - supplier_id: cakes_supplier.id) + supplier_id: cakes_supplier.id, inherits_properties: true) } before do @@ -112,6 +115,20 @@ RSpec.describe ProductsRenderer do expect(products).to eq([product_apples, product_cherries]) end + it "filters out products with inherits_properties set to false" do + product_cherries.update!(inherits_properties: false) + product_banana_bread.update!(inherits_properties: false) + + fruits_supplier.producer_properties.create!({ property_id: property_organic.id, + value: '1', position: 1 }) + + search_param = { q: { "with_variants_supplier_properties" => [property_organic.id] } } + products_renderer = ProductsRenderer.new(distributor, order_cycle, customer, search_param) + + products = products_renderer.send(:products) + expect(products).to eq([product_apples]) + end + it "filters products with property when sorting is enabled" do allow(distributor).to receive(:preferred_shopfront_taxon_order) { "#{fruits.id},#{cakes.id}"