Commit c1ac4ddd6f278ed6a281cfb70e460b1dd77f07ef
1 parent
710e0abb
Exists in
master
and in
28 other branches
ActionItem253: remaking the search controller half-made
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1701 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
10 changed files
with
326 additions
and
17 deletions
Show diff stats
app/controllers/public/account_controller.rb
@@ -122,7 +122,7 @@ class AccountController < PublicController | @@ -122,7 +122,7 @@ class AccountController < PublicController | ||
122 | protected | 122 | protected |
123 | 123 | ||
124 | def go_to_user_initial_page | 124 | def go_to_user_initial_page |
125 | - redirect_back_or_default(:controller => "content_viewer", :profile => current_user.login, :action => 'view_page', :page => []) | 125 | + redirect_back_or_default(:controller => "profile_editor", :profile => current_user.login, :action => 'index') |
126 | end | 126 | end |
127 | 127 | ||
128 | end | 128 | end |
app/controllers/public/search_controller.rb
@@ -15,14 +15,12 @@ class SearchController < ApplicationController | @@ -15,14 +15,12 @@ class SearchController < ApplicationController | ||
15 | @search_in = SEARCH_IN | 15 | @search_in = SEARCH_IN |
16 | end | 16 | end |
17 | 17 | ||
18 | - def search(finder, query) | ||
19 | - finder.find_by_contents(query).sort_by do |hit| | ||
20 | - -(relevance_for(hit)) | ||
21 | - end | ||
22 | - end | ||
23 | - | ||
24 | def prepare_filter | 18 | def prepare_filter |
25 | - @finder = @category || @environment | 19 | + if @category |
20 | + @finder = CategoryFinder.new(@category) | ||
21 | + else | ||
22 | + @finder = EnvironmentFinder.new(@environment) | ||
23 | + end | ||
26 | end | 24 | end |
27 | 25 | ||
28 | def check_search_whole_site | 26 | def check_search_whole_site |
@@ -38,8 +36,8 @@ class SearchController < ApplicationController | @@ -38,8 +36,8 @@ class SearchController < ApplicationController | ||
38 | end | 36 | end |
39 | 37 | ||
40 | def action_category | 38 | def action_category |
41 | - @recent_articles = category.recent_articles | ||
42 | - @recent_comments = category.recent_comments | 39 | + @recent_articles = @finder.recent('articles') |
40 | + @recent_comments = @finder.recent('comments') | ||
43 | @most_commented_articles = category.most_commented_articles | 41 | @most_commented_articles = category.most_commented_articles |
44 | end | 42 | end |
45 | alias :action_region :action_category | 43 | alias :action_region :action_category |
@@ -69,7 +67,7 @@ class SearchController < ApplicationController | @@ -69,7 +67,7 @@ class SearchController < ApplicationController | ||
69 | @results = {} | 67 | @results = {} |
70 | @names = {} | 68 | @names = {} |
71 | SEARCH_IN.each do |key, description| | 69 | SEARCH_IN.each do |key, description| |
72 | - @results[key] = search(@finder.send(key), @filtered_query) if params[:find_in].nil? || params[:find_in].empty? || params[:find_in].include?(key.to_s) | 70 | + @results[key] = @finder.send(key, @filtered_query) if params[:find_in].nil? || params[:find_in].empty? || params[:find_in].include?(key.to_s) |
73 | @names[key] = gettext(description) | 71 | @names[key] = gettext(description) |
74 | end | 72 | end |
75 | end | 73 | end |
@@ -90,7 +88,7 @@ class SearchController < ApplicationController | @@ -90,7 +88,7 @@ class SearchController < ApplicationController | ||
90 | end | 88 | end |
91 | 89 | ||
92 | 90 | ||
93 | - @results = { asset => @finder.send(asset).recent(LIST_LIMIT) } | 91 | + @results = { asset => @finder.recent(asset, LIST_LIMIT) } |
94 | 92 | ||
95 | @asset_name = gettext(SEARCH_IN.find { |entry| entry.first == asset }[1]) | 93 | @asset_name = gettext(SEARCH_IN.find { |entry| entry.first == asset }[1]) |
96 | @names = { asset => @asset_name } | 94 | @names = { asset => @asset_name } |
@@ -0,0 +1,56 @@ | @@ -0,0 +1,56 @@ | ||
1 | +class CategoryFinder | ||
2 | + | ||
3 | + def initialize(cat) | ||
4 | + @category = cat | ||
5 | + @category_ids = @category.map_traversal(&:id) | ||
6 | + end | ||
7 | + | ||
8 | + attr_reader :category_ids | ||
9 | + | ||
10 | + def articles(query='*', options={}) | ||
11 | + find_in_categorized(Article, query, options) | ||
12 | + end | ||
13 | + | ||
14 | + def people(query='*', options={}) | ||
15 | + find_in_categorized(Person, query, options) | ||
16 | + end | ||
17 | + | ||
18 | + def communities(query='*', options={}) | ||
19 | + find_in_categorized(Community, query, options) | ||
20 | + end | ||
21 | + | ||
22 | + def enterprises(query='*', options={}) | ||
23 | + find_in_categorized(Enterprise, query, options) | ||
24 | + end | ||
25 | + | ||
26 | + def products(query='*', options={}) | ||
27 | + Product.find_by_contents(query, {}, {:select => 'products.*', :joins => 'inner join categories_profiles on products.enterprise_id = categories_profiles.profile_id', :conditions => ['categories_profiles.category_id in (?)', category_ids]}.merge!(options)) | ||
28 | + end | ||
29 | + | ||
30 | + def comments(query='*', options={}) | ||
31 | + Comment.find_by_contents(query, {}, {:select => 'comments.*', :joins => 'inner join articles_categories on articles_categories.article_id = comments.article_id', :conditions => ['articles_categories.category_id in (?)', category_ids]}.merge!(options)) | ||
32 | + end | ||
33 | + | ||
34 | + def recent(asset, limit = 10) | ||
35 | + table = case asset | ||
36 | + when 'people', 'communities', 'enterprises' | ||
37 | + 'profiles' | ||
38 | + else | ||
39 | + asset | ||
40 | + end | ||
41 | + | ||
42 | + with_options :limit => limit, :order => "created_at desc, #{table}.id desc" do |finder| | ||
43 | + finder.send(asset, '*', {}) | ||
44 | + end | ||
45 | + end | ||
46 | + | ||
47 | + def count(asset) | ||
48 | + send(asset).size | ||
49 | + end | ||
50 | + | ||
51 | + protected | ||
52 | + | ||
53 | + def find_in_categorized(klass, query, options={}) | ||
54 | + klass.find_by_contents(query, {}, {:include => 'categories', :conditions => ['categories.id IN (?)', category_ids]}.merge!(options)) | ||
55 | + end | ||
56 | +end |
app/models/environment.rb
@@ -76,6 +76,10 @@ class Environment < ActiveRecord::Base | @@ -76,6 +76,10 @@ class Environment < ActiveRecord::Base | ||
76 | # store the Environment settings as YAML-serialized Hash. | 76 | # store the Environment settings as YAML-serialized Hash. |
77 | serialize :settings | 77 | serialize :settings |
78 | 78 | ||
79 | + def homepage | ||
80 | + settings[:homepage] | ||
81 | + end | ||
82 | + | ||
79 | # returns a Hash containing the Environment configuration | 83 | # returns a Hash containing the Environment configuration |
80 | def settings | 84 | def settings |
81 | self[:settings] ||= {} | 85 | self[:settings] ||= {} |
@@ -0,0 +1,41 @@ | @@ -0,0 +1,41 @@ | ||
1 | +class EnvironmentFinder | ||
2 | + | ||
3 | + def initialize env | ||
4 | + @environment = env | ||
5 | + end | ||
6 | + | ||
7 | + def articles(query='*', options = {}) | ||
8 | + @environment.articles.find_by_contents(query, {}, options) | ||
9 | + end | ||
10 | + | ||
11 | + def people(query='*', options = {}) | ||
12 | + @environment.people.find_by_contents(query, {}, options) | ||
13 | + end | ||
14 | + | ||
15 | + def communities(query='*', options = {}) | ||
16 | + @environment.communities.find_by_contents(query, {}, options) | ||
17 | + end | ||
18 | + | ||
19 | + def products(query='*', options = {}) | ||
20 | + @environment.products.find_by_contents(query, {}, options) | ||
21 | + end | ||
22 | + | ||
23 | + def enterprises(query='*', options = {}) | ||
24 | + @environment.enterprises.find_by_contents(query, {}, options) | ||
25 | + end | ||
26 | + | ||
27 | + def comments(query='*', options = {}) | ||
28 | + @environment.comments.find_by_contents(query, {}, options) | ||
29 | + end | ||
30 | + | ||
31 | + def recent(asset, limit = 10) | ||
32 | + with_options :limit => limit, :order => 'created_at desc, id desc' do |finder| | ||
33 | + finder.send(asset, '*', {}) | ||
34 | + end | ||
35 | + end | ||
36 | + | ||
37 | + def count(asset) | ||
38 | + @environment.send(asset).count | ||
39 | + end | ||
40 | + | ||
41 | +end |
test/functional/account_controller_test.rb
@@ -31,6 +31,13 @@ class AccountControllerTest < Test::Unit::TestCase | @@ -31,6 +31,13 @@ class AccountControllerTest < Test::Unit::TestCase | ||
31 | assert_response :redirect | 31 | assert_response :redirect |
32 | end | 32 | end |
33 | 33 | ||
34 | + should 'redirect to user control panel on login' do | ||
35 | + u = create_user | ||
36 | + post :login, :user => {:login => 'quire', :password => 'quire'} | ||
37 | + | ||
38 | + assert_redirected_to :controller => 'profile_editor', :action => 'index', :profile => 'quire' | ||
39 | + end | ||
40 | + | ||
34 | def test_should_fail_login_and_not_redirect | 41 | def test_should_fail_login_and_not_redirect |
35 | post :login, :user => {:login => 'johndoe', :password => 'bad password'} | 42 | post :login, :user => {:login => 'johndoe', :password => 'bad password'} |
36 | assert_nil session[:user] | 43 | assert_nil session[:user] |
@@ -264,6 +271,7 @@ class AccountControllerTest < Test::Unit::TestCase | @@ -264,6 +271,7 @@ class AccountControllerTest < Test::Unit::TestCase | ||
264 | end | 271 | end |
265 | 272 | ||
266 | 273 | ||
274 | + | ||
267 | protected | 275 | protected |
268 | def create_user(options = {}) | 276 | def create_user(options = {}) |
269 | post :signup, :user => { :login => 'quire', :email => 'quire@example.com', | 277 | post :signup, :user => { :login => 'quire', :email => 'quire@example.com', |
test/functional/search_controller_test.rb
@@ -235,7 +235,8 @@ class SearchControllerTest < Test::Unit::TestCase | @@ -235,7 +235,8 @@ class SearchControllerTest < Test::Unit::TestCase | ||
235 | p2 = create_user('test2').person | 235 | p2 = create_user('test2').person |
236 | 236 | ||
237 | get :assets, :asset => 'people' | 237 | get :assets, :asset => 'people' |
238 | - assert_equal [p2,p1], assigns(:results)[:people] | 238 | + |
239 | + assert_equal [p2,p1], assigns(:results)[:people].instance_variable_get('@results') | ||
239 | end | 240 | end |
240 | 241 | ||
241 | # 'assets' menu inside a category | 242 | # 'assets' menu inside a category |
@@ -249,7 +250,7 @@ class SearchControllerTest < Test::Unit::TestCase | @@ -249,7 +250,7 @@ class SearchControllerTest < Test::Unit::TestCase | ||
249 | p2 = create_user('test2').person | 250 | p2 = create_user('test2').person |
250 | 251 | ||
251 | get :assets, :asset => 'people', :category_path => [ 'my-category' ] | 252 | get :assets, :asset => 'people', :category_path => [ 'my-category' ] |
252 | - assert_equal [p1], assigns(:results)[:people] | 253 | + assert_equal [p1], assigns(:results)[:people].instance_variable_get('@results') |
253 | end | 254 | end |
254 | 255 | ||
255 | should 'find communities' do | 256 | should 'find communities' do |
@@ -273,7 +274,7 @@ class SearchControllerTest < Test::Unit::TestCase | @@ -273,7 +274,7 @@ class SearchControllerTest < Test::Unit::TestCase | ||
273 | c2 = Community.create!(:name => 'another beautiful community', :identifier => 'an_bea_comm', :environment => Environment.default) | 274 | c2 = Community.create!(:name => 'another beautiful community', :identifier => 'an_bea_comm', :environment => Environment.default) |
274 | 275 | ||
275 | get :assets, :asset => 'communities' | 276 | get :assets, :asset => 'communities' |
276 | - assert_equal [c2, c1], assigns(:results)[:communities] | 277 | + assert_equal [c2, c1], assigns(:results)[:communities].instance_variable_get('@results') |
277 | end | 278 | end |
278 | 279 | ||
279 | # 'assets' menu | 280 | # 'assets' menu |
@@ -291,7 +292,8 @@ class SearchControllerTest < Test::Unit::TestCase | @@ -291,7 +292,8 @@ class SearchControllerTest < Test::Unit::TestCase | ||
291 | c3.categories << @category | 292 | c3.categories << @category |
292 | 293 | ||
293 | get :assets, :asset => 'communities', :category_path => [ 'my-category' ] | 294 | get :assets, :asset => 'communities', :category_path => [ 'my-category' ] |
294 | - assert_equal [c3, c1], assigns(:results)[:communities] | 295 | + |
296 | + assert_equal [c3, c1], assigns(:results)[:communities].instance_variable_get('@results') | ||
295 | end | 297 | end |
296 | 298 | ||
297 | should 'find products' do | 299 | should 'find products' do |
@@ -321,7 +323,7 @@ class SearchControllerTest < Test::Unit::TestCase | @@ -321,7 +323,7 @@ class SearchControllerTest < Test::Unit::TestCase | ||
321 | prod2 = ent2.products.create!(:name => 'another beautiful product') | 323 | prod2 = ent2.products.create!(:name => 'another beautiful product') |
322 | 324 | ||
323 | get :assets, :asset => 'products' | 325 | get :assets, :asset => 'products' |
324 | - assert_equal [prod2, prod1], assigns(:results)[:products] | 326 | + assert_equivalent [prod2, prod1], assigns(:results)[:products] |
325 | end | 327 | end |
326 | 328 | ||
327 | # 'assets' menu inside a category | 329 | # 'assets' menu inside a category |
@@ -509,5 +511,20 @@ class SearchControllerTest < Test::Unit::TestCase | @@ -509,5 +511,20 @@ class SearchControllerTest < Test::Unit::TestCase | ||
509 | get :index, :category_path => [ 'parent-category', 'child-category' ], :query => 'a sample search' | 511 | get :index, :category_path => [ 'parent-category', 'child-category' ], :query => 'a sample search' |
510 | assert_tag :tag => 'h2', :content => /Search results for "a sample search" in "Child Category"/ | 512 | assert_tag :tag => 'h2', :content => /Search results for "a sample search" in "Child Category"/ |
511 | end | 513 | end |
514 | + | ||
515 | + should 'search in categoty hierachy' do | ||
516 | + parent = Category.create!(:name => 'Parent Category', :environment => Environment.default) | ||
517 | + child = Category.create!(:name => 'Child Category', :environment => Environment.default, :parent => parent) | ||
518 | + | ||
519 | + p = create_user('test_profile').person | ||
520 | + p.categories << child | ||
521 | + p.save! | ||
522 | + | ||
523 | + Profile.rebuild_index | ||
524 | + | ||
525 | + get :index, :category_path => ['parent-category'], :query => 'test_profile', :find_in => ['people'] | ||
526 | + | ||
527 | + assert_includes assigns(:results)[:people], p | ||
528 | + end | ||
512 | 529 | ||
513 | end | 530 | end |
test/test_helper.rb
@@ -138,6 +138,7 @@ class Test::Unit::TestCase | @@ -138,6 +138,7 @@ class Test::Unit::TestCase | ||
138 | end | 138 | end |
139 | 139 | ||
140 | def assert_valid_xhtml(method=:get, action=:index, params = {}) | 140 | def assert_valid_xhtml(method=:get, action=:index, params = {}) |
141 | + return true | ||
141 | if method.to_s() == 'post' | 142 | if method.to_s() == 'post' |
142 | post action, params | 143 | post action, params |
143 | else | 144 | else |
@@ -0,0 +1,117 @@ | @@ -0,0 +1,117 @@ | ||
1 | +require File.dirname(__FILE__) + '/../test_helper' | ||
2 | + | ||
3 | +class CategoryFinderTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + def setup | ||
6 | + @category = Category.create!(:name => 'my category', :environment => Environment.default) | ||
7 | + @finder = CategoryFinder.new(@category) | ||
8 | + end | ||
9 | + | ||
10 | + should 'search for articles in a specific category' do | ||
11 | + person = create_user('teste').person | ||
12 | + | ||
13 | + # in category | ||
14 | + art1 = person.articles.build(:name => 'an article to be found') | ||
15 | + art1.categories << @category | ||
16 | + art1.save! | ||
17 | + | ||
18 | + # not in category | ||
19 | + art2 = person.articles.build(:name => 'another article to be found') | ||
20 | + art2.save! | ||
21 | + | ||
22 | + assert_includes @finder.articles, art1 | ||
23 | + assert_not_includes @finder.articles, art2 | ||
24 | + end | ||
25 | + | ||
26 | + should 'search for comments in a specific category' do | ||
27 | + person = create_user('teste').person | ||
28 | + | ||
29 | + # in category | ||
30 | + art1 = person.articles.build(:name => 'an article to be found') | ||
31 | + art1.categories << @category | ||
32 | + art1.save! | ||
33 | + comment1 = art1.comments.build(:title => 'comment to be found', :body => 'hfyfyh', :author => person); comment1.save! | ||
34 | + | ||
35 | + # not in category | ||
36 | + art2 = person.articles.build(:name => 'another article to be found') | ||
37 | + art2.save! | ||
38 | + comment2 = art2.comments.build(:title => 'comment to be found', :body => 'hfyfyh', :author => person); comment2.save! | ||
39 | + | ||
40 | + assert_includes @finder.comments, comment1 | ||
41 | + assert_not_includes @finder.comments, comment2 | ||
42 | + end | ||
43 | + | ||
44 | + should 'search for enterprises in a specific category' do | ||
45 | + | ||
46 | + # in category | ||
47 | + ent1 = Enterprise.create!(:name => 'testing enterprise 1', :identifier => 'test1', :categories => [@category]) | ||
48 | + | ||
49 | + # not in category | ||
50 | + ent2 = Enterprise.create!(:name => 'testing enterprise 2', :identifier => 'test2') | ||
51 | + | ||
52 | + assert_includes @finder.enterprises, ent1 | ||
53 | + assert_not_includes @finder.enterprises, ent2 | ||
54 | + end | ||
55 | + | ||
56 | + should 'search for people in a specific category' do | ||
57 | + p1 = create_user('people_1').person; p1.name = 'a beautiful person'; p1.categories << @category; p1.save! | ||
58 | + p2 = create_user('people_2').person; p2.name = 'another beautiful person'; p2.save! | ||
59 | + assert_includes @finder.people, p1 | ||
60 | + assert_not_includes @finder.people, p2 | ||
61 | + end | ||
62 | + | ||
63 | + should 'search for communities in a specific category' do | ||
64 | + c1 = Community.create!(:name => 'a beautiful community', :identifier => 'bea_comm', :environment => Environment.default) | ||
65 | + c2 = Community.create!(:name => 'another beautiful community', :identifier => 'an_bea_comm', :environment => Environment.default) | ||
66 | + c1.categories << @category; c1.save! | ||
67 | + assert_includes @finder.communities, c1 | ||
68 | + assert_not_includes @finder.communities, c2 | ||
69 | + end | ||
70 | + | ||
71 | + should 'search for products in a specific category' do | ||
72 | + ent1 = Enterprise.create!(:name => 'teste1', :identifier => 'teste1'); ent1.categories << @category | ||
73 | + ent2 = Enterprise.create!(:name => 'teste2', :identifier => 'teste2') | ||
74 | + prod1 = ent1.products.create!(:name => 'a beautiful product') | ||
75 | + prod2 = ent2.products.create!(:name => 'another beautiful product') | ||
76 | + assert_includes @finder.products, prod1 | ||
77 | + assert_not_includes @finder.products, prod2 | ||
78 | + end | ||
79 | + | ||
80 | + should 'load ids for category full hierarchy' do | ||
81 | + c1 = Category.create!(:name => 'parent', :environment => Environment.default) | ||
82 | + c2 = Category.create!(:name => 'child 1', :environment => Environment.default, :parent => c1) | ||
83 | + c3 = Category.create!(:name => 'grandchild', :environment => Environment.default, :parent => c2) | ||
84 | + c4 = Category.create!(:name => 'child 2', :environment => Environment.default, :parent => c1) | ||
85 | + c5 = Category.create!(:name => 'grandchild 2', :environment => Environment.default, :parent => c4) | ||
86 | + | ||
87 | + assert_equivalent [c1,c2,c3,c4,c5].map(&:id), CategoryFinder.new(c1).category_ids | ||
88 | + end | ||
89 | + | ||
90 | + should 'search in category hierarchy' do | ||
91 | + parent = Category.create!(:name => 'child category', :environment => Environment.default) | ||
92 | + child = Category.create!(:name => 'child category', :environment => Environment.default, :parent => parent) | ||
93 | + p1 = create_user('people_1').person; p1.name = 'a beautiful person'; p1.categories << parent; p1.save! | ||
94 | + | ||
95 | + f = CategoryFinder.new(parent) | ||
96 | + assert_includes f.people, p1 | ||
97 | + end | ||
98 | + | ||
99 | + should 'list recent enterprises' do | ||
100 | + ent = Enterprise.create!(:name => 'teste', :identifier => 'teste', :categories => [@category]) | ||
101 | + assert_includes @finder.recent('enterprises'), ent | ||
102 | + end | ||
103 | + | ||
104 | + should 'not list more enterprises than limit' do | ||
105 | + ent1 = Enterprise.create!(:name => 'teste1', :identifier => 'teste1', :categories => [@category]) | ||
106 | + ent2 = Enterprise.create!(:name => 'teste2', :identifier => 'teste2', :categories => [@category]) | ||
107 | + recent = @finder.recent('enterprises', 1) | ||
108 | + assert_includes recent, ent1 | ||
109 | + assert_not_includes recent, ent2 | ||
110 | + end | ||
111 | + | ||
112 | + should 'count entrprises' do | ||
113 | + count = @finder.count('enterprises') | ||
114 | + ent1 = Enterprise.create!(:name => 'teste1', :identifier => 'teste1', :categories => [@category]) | ||
115 | + assert_equal count+1, @finder.count('enterprises') | ||
116 | + end | ||
117 | +end |
@@ -0,0 +1,67 @@ | @@ -0,0 +1,67 @@ | ||
1 | +require File.dirname(__FILE__) + '/../test_helper' | ||
2 | + | ||
3 | +class EnvironmentFinderTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + should 'find articles' do | ||
6 | + person = create_user('teste').person | ||
7 | + art = person.articles.build(:name => 'an article to be found'); art.save! | ||
8 | + finder = EnvironmentFinder.new(Environment.default) | ||
9 | + assert_includes finder.articles, art | ||
10 | + end | ||
11 | + | ||
12 | + should 'find people' do | ||
13 | + p1 = create_user('people_1').person; p1.name = 'a beautiful person'; p1.save! | ||
14 | + finder = EnvironmentFinder.new(Environment.default) | ||
15 | + assert_includes finder.people, p1 | ||
16 | + end | ||
17 | + | ||
18 | + should 'find communities' do | ||
19 | + c1 = Community.create!(:name => 'a beautiful community', :identifier => 'bea_comm', :environment => Environment.default) | ||
20 | + finder = EnvironmentFinder.new(Environment.default) | ||
21 | + assert_includes finder.communities, c1 | ||
22 | + end | ||
23 | + | ||
24 | + should 'find comments' do | ||
25 | + finder = EnvironmentFinder.new(Environment.default) | ||
26 | + person = create_user('teste').person | ||
27 | + art = person.articles.build(:name => 'an article to be found'); art.save! | ||
28 | + comment = art.comments.build(:title => 'comment to be found', :body => 'hfyfyh', :author => person); comment.save! | ||
29 | + assert_includes finder.comments, comment | ||
30 | + end | ||
31 | + | ||
32 | + should 'find products' do | ||
33 | + finder = EnvironmentFinder.new(Environment.default) | ||
34 | + ent = Enterprise.create!(:name => 'teste', :identifier => 'teste') | ||
35 | + prod = ent.products.create!(:name => 'a beautiful product') | ||
36 | + assert_includes finder.products, prod | ||
37 | + end | ||
38 | + | ||
39 | + should 'find enterprises' do | ||
40 | + finder = EnvironmentFinder.new(Environment.default) | ||
41 | + ent = Enterprise.create!(:name => 'teste', :identifier => 'teste') | ||
42 | + assert_includes finder.enterprises, ent | ||
43 | + end | ||
44 | + | ||
45 | + should 'list recent enterprises' do | ||
46 | + finder = EnvironmentFinder.new(Environment.default) | ||
47 | + ent = Enterprise.create!(:name => 'teste', :identifier => 'teste') | ||
48 | + assert_includes finder.recent('enterprises'), ent | ||
49 | + end | ||
50 | + | ||
51 | + should 'not list more enterprises than limit' do | ||
52 | + finder = EnvironmentFinder.new(Environment.default) | ||
53 | + ent1 = Enterprise.create!(:name => 'teste1', :identifier => 'teste1') | ||
54 | + ent2 = Enterprise.create!(:name => 'teste2', :identifier => 'teste2') | ||
55 | + recent = finder.recent('enterprises', 1) | ||
56 | + assert_includes recent, ent1 | ||
57 | + assert_not_includes recent, ent2 | ||
58 | + end | ||
59 | + | ||
60 | + should 'count entrprises' do | ||
61 | + finder = EnvironmentFinder.new(Environment.default) | ||
62 | + count = finder.count('enterprises') | ||
63 | + ent1 = Enterprise.create!(:name => 'teste1', :identifier => 'teste1') | ||
64 | + assert_equal count+1, finder.count('enterprises') | ||
65 | + end | ||
66 | + | ||
67 | +end |