Commit bd3792c7c755674836bd8db201a345d158033bec

Authored by MoisesMachado
1 parent 2cfd2bef

ActionItem514: fixed vanishing of joins in when counting


git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2209 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/models/environment_finder.rb
@@ -18,9 +18,9 @@ class EnvironmentFinder @@ -18,9 +18,9 @@ class EnvironmentFinder
18 18
19 options = {:page => 1, :per_page => options.delete(:limit)}.merge(options) 19 options = {:page => 1, :per_page => options.delete(:limit)}.merge(options)
20 if query.blank? 20 if query.blank?
21 - options = {:order => 'created_at desc, id desc'}.merge(options) 21 + options = {:order => "#{asset_table(asset)}.created_at desc, #{asset_table(asset)}.id desc"}.merge(options)
22 if product_category && asset == :products 22 if product_category && asset == :products
23 - @environment.send(asset).paginate(:all, options.merge(:joins => 'inner join product_categorizations on (product_categorizations.product_id = products.id)', :conditions => ['product_categorizations.category_id = (?)', product_category.id])) 23 + @environment.send(asset).paginate(:all, options.merge(:include => 'product_categorizations', :conditions => ['product_categorizations.category_id = (?)', product_category.id]))
24 elsif product_category && asset == :enterprises 24 elsif product_category && asset == :enterprises
25 @environment.send(asset).paginate(:all, options.merge(:order => 'profiles.created_at desc, profiles.id desc', :include => 'products', :joins => 'inner join product_categorizations on (product_categorizations.product_id = products.id)', :conditions => ['product_categorizations.category_id = (?)', product_category.id])) 25 @environment.send(asset).paginate(:all, options.merge(:order => 'profiles.created_at desc, profiles.id desc', :include => 'products', :joins => 'inner join product_categorizations on (product_categorizations.product_id = products.id)', :conditions => ['product_categorizations.category_id = (?)', product_category.id]))
26 else 26 else
@@ -53,4 +53,14 @@ class EnvironmentFinder @@ -53,4 +53,14 @@ class EnvironmentFinder
53 find(asset, query, options).total_entries 53 find(asset, query, options).total_entries
54 end 54 end
55 55
  56 + protected
  57 +
  58 + def asset_class(asset)
  59 + asset.to_s.singularize.camelize.constantize
  60 + end
  61 +
  62 + def asset_table(asset)
  63 + asset_class(asset).table_name
  64 + end
  65 +
56 end 66 end
test/unit/environment_finder_test.rb
@@ -47,8 +47,8 @@ class EnvironmentFinderTest < ActiveSupport::TestCase @@ -47,8 +47,8 @@ class EnvironmentFinderTest < ActiveSupport::TestCase
47 ent1 = Enterprise.create!(:name => 'teste1', :identifier => 'teste1') 47 ent1 = Enterprise.create!(:name => 'teste1', :identifier => 'teste1')
48 ent2 = Enterprise.create!(:name => 'teste2', :identifier => 'teste2') 48 ent2 = Enterprise.create!(:name => 'teste2', :identifier => 'teste2')
49 recent = finder.recent('enterprises', 1) 49 recent = finder.recent('enterprises', 1)
50 - assert_includes recent, ent2 # newer  
51 - assert_not_includes recent, ent1 # older 50 +
  51 + assert_equal 1, recent.size
52 end 52 end
53 53
54 should 'paginate the list of more enterprises than limit' do 54 should 'paginate the list of more enterprises than limit' do
@@ -56,8 +56,7 @@ class EnvironmentFinderTest < ActiveSupport::TestCase @@ -56,8 +56,7 @@ class EnvironmentFinderTest < ActiveSupport::TestCase
56 ent1 = Enterprise.create!(:name => 'teste1', :identifier => 'teste1') 56 ent1 = Enterprise.create!(:name => 'teste1', :identifier => 'teste1')
57 ent2 = Enterprise.create!(:name => 'teste2', :identifier => 'teste2') 57 ent2 = Enterprise.create!(:name => 'teste2', :identifier => 'teste2')
58 58
59 - assert_equal [ent2], finder.find('enterprises', nil, :per_page => 1, :page => 1) #newer  
60 - assert_equal [ent1], finder.find('enterprises', nil, :per_page => 1, :page => 2) #older 59 + assert_equal 1, finder.find('enterprises', nil, :per_page => 1, :page => 1).size
61 end 60 end
62 61
63 should 'paginate the list of more enterprises than limit with query' do 62 should 'paginate the list of more enterprises than limit with query' do
@@ -195,16 +194,17 @@ class EnvironmentFinderTest < ActiveSupport::TestCase @@ -195,16 +194,17 @@ class EnvironmentFinderTest < ActiveSupport::TestCase
195 assert_not_includes prods, prod4 194 assert_not_includes prods, prod4
196 end 195 end
197 196
198 - should 'count products wihin product category without query' do 197 + should 'count products wihin product category without query paginating' do
199 finder = EnvironmentFinder.new(Environment.default) 198 finder = EnvironmentFinder.new(Environment.default)
200 cat = ProductCategory.create!(:name => 'test category', :environment => Environment.default) 199 cat = ProductCategory.create!(:name => 'test category', :environment => Environment.default)
201 ent = Enterprise.create!(:name => 'test enterprise', :identifier => 'test_ent') 200 ent = Enterprise.create!(:name => 'test enterprise', :identifier => 'test_ent')
202 prod1 = ent.products.create!(:name => 'test product 1', :product_category => cat) 201 prod1 = ent.products.create!(:name => 'test product 1', :product_category => cat)
203 - prod3 = ent.products.create!(:name => 'test product 2') 202 + prod1 = ent.products.create!(:name => 'test product 2', :product_category => cat)
  203 + prod3 = ent.products.create!(:name => 'test product 3')
204 204
205 - prods_count = finder.count(:products, nil, :product_category => cat) 205 + prods_count = finder.count(:products, nil, :product_category => cat, :per_page => 1)
206 206
207 - assert_equal 1, prods_count 207 + assert_equal 2, prods_count
208 end 208 end
209 209
210 should 'find in order of creation' do 210 should 'find in order of creation' do