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