Commit e66e02bf227bfd9d2f5a73c991652a108ea1a728
1 parent
12588c61
Exists in
master
and in
29 other branches
ActionItem252: added suport for counting how many item are categorized by a category
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1765 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
4 changed files
with
46 additions
and
2 deletions
Show diff stats
app/models/category.rb
app/models/category_finder.rb
... | ... | @@ -20,7 +20,7 @@ class CategoryFinder |
20 | 20 | end |
21 | 21 | |
22 | 22 | def count(asset) |
23 | - asset_class(asset).count(:all, options_for_find(asset_class(asset))) | |
23 | + asset_class(asset).count(:all, options_for_find(asset_class(asset), :select => "#{asset_table(asset)}.id")) | |
24 | 24 | end |
25 | 25 | |
26 | 26 | def most_commented_articles(limit=10) |
... | ... | @@ -30,7 +30,11 @@ class CategoryFinder |
30 | 30 | protected |
31 | 31 | |
32 | 32 | def find_in_categorized(klass, query, options={}) |
33 | - klass.find_by_contents(query, {}, options_for_find(klass, options)).uniq | |
33 | + if query.nil? | |
34 | + klass.find(:all, options_for_find(klass, options)) | |
35 | + else | |
36 | + klass.find_by_contents(query, {}, options_for_find(klass, options)).uniq | |
37 | + end | |
34 | 38 | end |
35 | 39 | |
36 | 40 | def options_for_find(klass, options={}) | ... | ... |
test/unit/category_finder_test.rb
... | ... | @@ -23,6 +23,22 @@ class CategoryFinderTest < ActiveSupport::TestCase |
23 | 23 | assert_includes list, art1 |
24 | 24 | assert_not_includes list, art2 |
25 | 25 | end |
26 | + | |
27 | + should 'search with query for articles in a specific category' do | |
28 | + person = create_user('teste').person | |
29 | + | |
30 | + # in category | |
31 | + art1 = person.articles.build(:name => 'an article to be found') | |
32 | + art1.categories << @category | |
33 | + art1.save! | |
34 | + | |
35 | + # not in category | |
36 | + art2 = person.articles.build(:name => 'another article to be found') | |
37 | + art2.save! | |
38 | + | |
39 | + assert_includes @finder.find('articles', 'found'), art1 | |
40 | + assert_not_includes @finder.find('articles','found'), art2 | |
41 | + end | |
26 | 42 | |
27 | 43 | should 'search for comments in a specific category' do |
28 | 44 | person = create_user('teste').person | ... | ... |
test/unit/category_test.rb
... | ... | @@ -346,6 +346,27 @@ class CategoryTest < Test::Unit::TestCase |
346 | 346 | assert_not_includes c.people, ent |
347 | 347 | end |
348 | 348 | |
349 | + should 'report the total items in this category' do | |
350 | + @category = Category.create!(:name => 'my category', :environment => @env) | |
351 | + # in category | |
352 | + person1 = create_user('test1').person; person1.categories << @category; person1.save! | |
353 | + art1 = person1.articles.build(:name => 'an article to be counted'); art1.categories << @category; art1.save! | |
354 | + comment1 = art1.comments.build(:title => 'comment to be counted', :body => 'hfyfyh', :author => person1); comment1.save! | |
355 | + ent1 = Enterprise.create!(:name => 'test2', :identifier => 'test2', :categories => [@category]) | |
356 | + com1 = Community.create!(:name => 'test3', :identifier => 'test3', :categories => [@category]) | |
357 | + prod1 = Product.create!(:name => 'test4', :enterprise => ent1) | |
358 | + | |
359 | + # not in category | |
360 | + person2 = create_user('test5').person | |
361 | + art2 = person2.articles.build(:name => 'an article not to be counted'); art2.save! | |
362 | + comment2 = art2.comments.build(:title => 'comment not to be counted', :body => 'hfh', :author => person2); comment2.save! | |
363 | + ent2 = Enterprise.create!(:name => 'test6', :identifier => 'test6') | |
364 | + com2 = Community.create!(:name => 'test7', :identifier => 'test7') | |
365 | + prod2 = Product.create!(:name => 'test8', :enterprise => ent2) | |
366 | + | |
367 | + assert_equal 6, @category.total_items | |
368 | + end | |
369 | + | |
349 | 370 | # NOT YET |
350 | 371 | #should 'list people that are categorized in children categories' do |
351 | 372 | # c1 = @env.categories.create!(:name => 'top category') | ... | ... |