Commit a762ff5861aab493b9577f647b47a64d0006f022
1 parent
8398fa80
Exists in
master
and in
28 other branches
ActionItem129: fixed the finder so it can properly find the enterprises by its products categories
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1932 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
4 changed files
with
24 additions
and
1 deletions
Show diff stats
app/models/environment_finder.rb
| @@ -18,6 +18,8 @@ class EnvironmentFinder | @@ -18,6 +18,8 @@ class EnvironmentFinder | ||
| 18 | if query.blank? | 18 | if query.blank? |
| 19 | if product_category && asset == :products | 19 | if product_category && asset == :products |
| 20 | @environment.send(asset).find(:all, options.merge({:order => 'created_at desc, id desc', :conditions => ['product_category_id in (?)', product_category_ids]})) | 20 | @environment.send(asset).find(:all, options.merge({:order => 'created_at desc, id desc', :conditions => ['product_category_id in (?)', product_category_ids]})) |
| 21 | + elsif product_category && asset == :enterprises | ||
| 22 | + @environment.send(asset).find_by_contents("extra_data_for_index:#{product_category.name}", {}, options.merge( {:order => 'created_at desc, id desc'} ) ) | ||
| 21 | else | 23 | else |
| 22 | @environment.send(asset).find( :all, options.merge( {:order => 'created_at desc, id desc'} ) ) | 24 | @environment.send(asset).find( :all, options.merge( {:order => 'created_at desc, id desc'} ) ) |
| 23 | end | 25 | end |
| @@ -25,6 +27,8 @@ class EnvironmentFinder | @@ -25,6 +27,8 @@ class EnvironmentFinder | ||
| 25 | if product_category && asset == :products | 27 | if product_category && asset == :products |
| 26 | # SECURITY no risk of SQL injection, since product_category_ids comes from trusted source | 28 | # SECURITY no risk of SQL injection, since product_category_ids comes from trusted source |
| 27 | @environment.send(asset).find_by_contents(query, {}, options.merge({:conditions => 'product_category_id in (%s)' % product_category_ids.join(',') })) | 29 | @environment.send(asset).find_by_contents(query, {}, options.merge({:conditions => 'product_category_id in (%s)' % product_category_ids.join(',') })) |
| 30 | + elsif product_category && asset == :enterprises | ||
| 31 | + @environment.send(asset).find_by_contents(query + " +extra_data_for_index:#{product_category.name}", {}, options) | ||
| 28 | else | 32 | else |
| 29 | @environment.send(asset).find_by_contents(query, {}, options) | 33 | @environment.send(asset).find_by_contents(query, {}, options) |
| 30 | end | 34 | end |
app/views/search/products.rhtml
| @@ -13,7 +13,7 @@ | @@ -13,7 +13,7 @@ | ||
| 13 | <%= render :partial => 'search_form', :locals => { :form_title => _("Refine your search"), :simple_search => true } %> | 13 | <%= render :partial => 'search_form', :locals => { :form_title => _("Refine your search"), :simple_search => true } %> |
| 14 | 14 | ||
| 15 | <% if @found_product_categories %> | 15 | <% if @found_product_categories %> |
| 16 | - <div id="product-categories-menu"> | 16 | + <div id="product-categories-menu" class="product-search-filter"> |
| 17 | <ul> | 17 | <ul> |
| 18 | <% @found_product_categories.each do |cat, hits| %> | 18 | <% @found_product_categories.each do |cat, hits| %> |
| 19 | <li><%= link_to (cat.name + "(#{hits})"), params.merge({:product_category => cat.id}) %> </li> | 19 | <li><%= link_to (cat.name + "(#{hits})"), params.merge({:product_category => cat.id}) %> </li> |
public/stylesheets/search.css
| @@ -75,7 +75,9 @@ | @@ -75,7 +75,9 @@ | ||
| 75 | padding-top: 0px; | 75 | padding-top: 0px; |
| 76 | margin-bottom: -20px; | 76 | margin-bottom: -20px; |
| 77 | } | 77 | } |
| 78 | +.product-search-filter { | ||
| 78 | 79 | ||
| 80 | +} | ||
| 79 | .map-or-list-search-results { | 81 | .map-or-list-search-results { |
| 80 | margin-left: 2em; | 82 | margin-left: 2em; |
| 81 | margin-right: 2em; | 83 | margin-right: 2em; |
test/unit/environment_finder_test.rb
| @@ -191,4 +191,21 @@ class EnvironmentFinderTest < ActiveSupport::TestCase | @@ -191,4 +191,21 @@ class EnvironmentFinderTest < ActiveSupport::TestCase | ||
| 191 | assert ents.index(ent2) < ents.index(ent1), "expected #{ents.index(ent2)} be smaller than #{ents.index(ent1)}" | 191 | assert ents.index(ent2) < ents.index(ent1), "expected #{ents.index(ent2)} be smaller than #{ents.index(ent1)}" |
| 192 | end | 192 | end |
| 193 | 193 | ||
| 194 | + should 'find enterprises by its products categories' do | ||
| 195 | + finder = EnvironmentFinder.new(Environment.default) | ||
| 196 | + | ||
| 197 | + pc1 = ProductCategory.create!(:name => 'test_cat1', :environment => Environment.default) | ||
| 198 | + pc2 = ProductCategory.create!(:name => 'test_cat2', :environment => Environment.default) | ||
| 199 | + | ||
| 200 | + ent1 = Enterprise.create!(:name => 'test enterprise 1', :identifier => 'test_ent1') | ||
| 201 | + ent1.products.create!(:name => 'test product 1', :product_category => pc1) | ||
| 202 | + ent2 = Enterprise.create!(:name => 'test enterprise 2', :identifier => 'test_ent2') | ||
| 203 | + ent2.products.create!(:name => 'test product 2', :product_category => pc2) | ||
| 204 | + | ||
| 205 | + ents = finder.find(:enterprises, nil, :product_category => pc1) | ||
| 206 | + | ||
| 207 | + assert_includes ents, ent1 | ||
| 208 | + assert_not_includes ents, ent2 | ||
| 209 | + end | ||
| 210 | + | ||
| 194 | end | 211 | end |