From 1d05423c887bc7ff9720fac1e2a8ba74f338e5f0 Mon Sep 17 00:00:00 2001 From: Istarengwa Date: Thu, 12 Mar 2026 20:46:21 +0100 Subject: [PATCH] fix error 500 count system --- app/models/home_page.rb | 2 +- app/views/home_pages/index.html.erb | 2 +- spec/models/home_page_spec.rb | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/models/home_page.rb b/app/models/home_page.rb index 00f0377..2b87cac 100644 --- a/app/models/home_page.rb +++ b/app/models/home_page.rb @@ -63,7 +63,7 @@ def shop_products(limit = shop_products_limit) Product.left_joins(:order_products) .select("products.*, COALESCE(SUM(order_products.quantity), 0) AS total_sold") .group("products.id") - .order(Arel.sql("total_sold DESC")) + .order(Arel.sql("COALESCE(SUM(order_products.quantity), 0) DESC")) .limit(safe_limit) else Product.order(created_at: :asc).limit(safe_limit) diff --git a/app/views/home_pages/index.html.erb b/app/views/home_pages/index.html.erb index c8eac6c..765bfa6 100644 --- a/app/views/home_pages/index.html.erb +++ b/app/views/home_pages/index.html.erb @@ -71,7 +71,7 @@ <% if home_page.shop_bloc_type? %>

<%= home_page.title %>

- <% products = home_page.shop_products %> + <% products = home_page.shop_products.to_a %> <% if products.any? %> <% product_count = products.size %> <% grid_classes = diff --git a/spec/models/home_page_spec.rb b/spec/models/home_page_spec.rb index 2e0dab8..3c123e0 100644 --- a/spec/models/home_page_spec.rb +++ b/spec/models/home_page_spec.rb @@ -14,6 +14,14 @@ let!(:product_1) { Product.create!(title: "Produit 1") } let!(:product_2) { Product.create!(title: "Produit 2") } let!(:product_3) { Product.create!(title: "Produit 3") } + let!(:user) do + User.create!( + email: "buyer@example.com", + password: "password123", + password_confirmation: "password123", + cgu_accepted: true + ) + end before do product_1.update_columns(created_at: Time.zone.local(2026, 1, 1, 9, 0, 0), updated_at: Time.zone.local(2026, 1, 1, 9, 0, 0)) @@ -38,5 +46,15 @@ expect(home_page.shop_products(0).size).to eq(1) end + + it "orders top sellers by sold quantity" do + order = Order.create!(user: user, status: "pending") + OrderProduct.create!(order: order, product: product_2, quantity: 1) + OrderProduct.create!(order: order, product: product_3, quantity: 4) + + home_page = described_class.create!(bloc_type: :shop, shop_scope: :top_sellers, shop_products_limit: 2) + + expect(home_page.shop_products.pluck(:id)).to eq([product_3.id, product_2.id]) + end end end