diff --git a/app/controllers/public/search_controller.rb b/app/controllers/public/search_controller.rb index 068a3cc..5916847 100644 --- a/app/controllers/public/search_controller.rb +++ b/app/controllers/public/search_controller.rb @@ -89,7 +89,14 @@ class SearchController < ApplicationController def load_product_categories_menu(asset) @results[asset].uniq! @categories_menu = ProductCategory.menu_categories(@product_category, environment).map do |cat| - [cat, @finder.count(:products, @filtered_query, calculate_find_options(asset, nil, cat, @region, params[:radius]))] + hits = @finder.count(:products, @filtered_query, calculate_find_options(asset, nil, cat, @region, params[:radius])) + childs = [] + # REFACTOR DUPLICATED CODE inner loop doing the same thing that outter loop + childs = cat.children.map do |child| + child_hits = @finder.count(:products, @filtered_query, calculate_find_options(asset, nil, child, @region, params[:radius])) + [child, child_hits] + end.select{|child, child_hits| child_hits > 0 } + [cat, hits, childs] end.select{|cat, hits| hits > 0 } end diff --git a/app/views/search/_product_categories_menu.rhtml b/app/views/search/_product_categories_menu.rhtml index b3115eb..f195cfe 100644 --- a/app/views/search/_product_categories_menu.rhtml +++ b/app/views/search/_product_categories_menu.rhtml @@ -1,8 +1,17 @@ <% if product_categories_menu %>
diff --git a/test/functional/search_controller_test.rb b/test/functional/search_controller_test.rb index d4e48b8..337c4aa 100644 --- a/test/functional/search_controller_test.rb +++ b/test/functional/search_controller_test.rb @@ -904,6 +904,19 @@ class SearchControllerTest < Test::Unit::TestCase assert_not_includes assigns(:categories_menu).map(&:first), cat12 end + should 'load two level of the product categories tree' do + cat1 = ProductCategory.create(:name => 'prod cat 1', :environment => Environment.default) + cat11 = ProductCategory.create(:name => 'prod cat 11', :environment => Environment.default, :parent => cat1) + cat12 = ProductCategory.create(:name => 'prod cat 12', :environment => Environment.default, :parent => cat1) + ent = Enterprise.create!(:name => 'test ent', :identifier => 'test_ent') + p = cat11.products.create!(:name => 'prod test 1', :enterprise => ent) + + get :index, :find_in => 'enterprises' + + assert_includes assigns(:categories_menu).map{|a|a[2].map(&:first)}.flatten, cat11 + assert_not_includes assigns(:categories_menu).map{|a|a[2].map(&:first)}.flatten, cat12 + end + should 'provide calendar for events' do get :index, :find_in => [ 'events' ] assert_equal 0, assigns(:calendar).size % 7 diff --git a/test/unit/product_category_test.rb b/test/unit/product_category_test.rb index bb550a2..1f5a080 100644 --- a/test/unit/product_category_test.rb +++ b/test/unit/product_category_test.rb @@ -71,12 +71,11 @@ class ProductCategoryTest < Test::Unit::TestCase assert_equal [c1], ProductCategory.menu_categories(nil, env1) end - should 'return chlidren of parent category' do + should 'return children of parent category' do c1 = ProductCategory.create!(:name => 'test cat 1', :environment => Environment.default) c11 = ProductCategory.create!(:name => 'test cat 11', :environment => Environment.default, :parent => c1) c2 = ProductCategory.create!(:name => 'test cat 2', :environment => Environment.default) assert_equal [c11], ProductCategory.menu_categories(c1, nil) end - end -- libgit2 0.21.2