Commit ee116023e6fee6b2b3ac0863c48391abdc7fcb3a
1 parent
78b068d9
Exists in
master
and in
29 other branches
Added some functional tests and small fixes for SearchController
Showing
2 changed files
with
86 additions
and
9 deletions
Show diff stats
app/controllers/public/search_controller.rb
@@ -114,7 +114,7 @@ class SearchController < PublicController | @@ -114,7 +114,7 @@ class SearchController < PublicController | ||
114 | @names = {} | 114 | @names = {} |
115 | @results_only = true | 115 | @results_only = true |
116 | 116 | ||
117 | - @enabled_searchs.select { |key,description| @searching[key] }.each do |key, description| | 117 | + @enabled_searches.select { |key,description| @searching[key] }.each do |key, description| |
118 | load_query | 118 | load_query |
119 | @asset = key | 119 | @asset = key |
120 | send(key) | 120 | send(key) |
@@ -149,7 +149,7 @@ class SearchController < PublicController | @@ -149,7 +149,7 @@ class SearchController < PublicController | ||
149 | ].each do |asset, name, filter| | 149 | ].each do |asset, name, filter| |
150 | @order << asset | 150 | @order << asset |
151 | @results[asset] = @category.send(filter, limit) | 151 | @results[asset] = @category.send(filter, limit) |
152 | - raise "nao total #{asset}" unless @results[asset].respond_to?(:total_entries) | 152 | + raise "No total_entries for: #{asset}" unless @results[asset].respond_to?(:total_entries) |
153 | @names[asset] = name | 153 | @names[asset] = name |
154 | end | 154 | end |
155 | end | 155 | end |
@@ -229,7 +229,7 @@ class SearchController < PublicController | @@ -229,7 +229,7 @@ class SearchController < PublicController | ||
229 | end | 229 | end |
230 | 230 | ||
231 | def load_search_assets | 231 | def load_search_assets |
232 | - @enabled_searchs = [ | 232 | + @enabled_searches = [ |
233 | [ :articles, _('Contents') ], | 233 | [ :articles, _('Contents') ], |
234 | [ :enterprises, _('Enterprises') ], | 234 | [ :enterprises, _('Enterprises') ], |
235 | [ :people, _('People') ], | 235 | [ :people, _('People') ], |
@@ -240,10 +240,11 @@ class SearchController < PublicController | @@ -240,10 +240,11 @@ class SearchController < PublicController | ||
240 | 240 | ||
241 | @searching = {} | 241 | @searching = {} |
242 | @titles = {} | 242 | @titles = {} |
243 | - @enabled_searchs.each do |key, name| | 243 | + @enabled_searches.each do |key, name| |
244 | @titles[key] = name | 244 | @titles[key] = name |
245 | @searching[key] = params[:action] == 'index' || params[:action] == key.to_s | 245 | @searching[key] = params[:action] == 'index' || params[:action] == key.to_s |
246 | end | 246 | end |
247 | + @names = @titles if @names.nil? | ||
247 | end | 248 | end |
248 | 249 | ||
249 | def limit | 250 | def limit |
test/functional/search_controller_test.rb
@@ -74,6 +74,15 @@ class SearchControllerTest < ActionController::TestCase | @@ -74,6 +74,15 @@ class SearchControllerTest < ActionController::TestCase | ||
74 | assert_includes assigns(:results)[:articles], art | 74 | assert_includes assigns(:results)[:articles], art |
75 | end | 75 | end |
76 | 76 | ||
77 | + should 'redirect contents to articles' do | ||
78 | + person = fast_create(Person) | ||
79 | + art = create_article_with_optional_category('an article to be found', person) | ||
80 | + | ||
81 | + get 'contents', :query => 'article found' | ||
82 | + # full description to avoid deprecation warning | ||
83 | + assert_redirected_to :controller => :search, :action => :articles, :query => 'article found' | ||
84 | + end | ||
85 | + | ||
77 | # 'assets' outside any category | 86 | # 'assets' outside any category |
78 | should 'list articles in general' do | 87 | should 'list articles in general' do |
79 | person = fast_create(Person) | 88 | person = fast_create(Person) |
@@ -89,7 +98,7 @@ class SearchControllerTest < ActionController::TestCase | @@ -89,7 +98,7 @@ class SearchControllerTest < ActionController::TestCase | ||
89 | 98 | ||
90 | should 'find enterprises' do | 99 | should 'find enterprises' do |
91 | ent = create_profile_with_optional_category(Enterprise, 'teste') | 100 | ent = create_profile_with_optional_category(Enterprise, 'teste') |
92 | - get 'enterprises', :query => 'teste' | 101 | + get :enterprises, :query => 'teste' |
93 | assert_includes assigns(:results)[:enterprises], ent | 102 | assert_includes assigns(:results)[:enterprises], ent |
94 | end | 103 | end |
95 | 104 | ||
@@ -143,8 +152,9 @@ class SearchControllerTest < ActionController::TestCase | @@ -143,8 +152,9 @@ class SearchControllerTest < ActionController::TestCase | ||
143 | end | 152 | end |
144 | 153 | ||
145 | # 'assets' menu outside any category | 154 | # 'assets' menu outside any category |
146 | - should 'list products in general' do | 155 | + should 'list products in general without geosearch' do |
147 | Profile.delete_all | 156 | Profile.delete_all |
157 | + SearchController.stubs(:logged_in?).returns(false) | ||
148 | 158 | ||
149 | ent1 = create_profile_with_optional_category(Enterprise, 'teste1') | 159 | ent1 = create_profile_with_optional_category(Enterprise, 'teste1') |
150 | ent2 = create_profile_with_optional_category(Enterprise, 'teste2') | 160 | ent2 = create_profile_with_optional_category(Enterprise, 'teste2') |
@@ -161,13 +171,13 @@ class SearchControllerTest < ActionController::TestCase | @@ -161,13 +171,13 @@ class SearchControllerTest < ActionController::TestCase | ||
161 | lambda {"<span id='plugin1'>This is Plugin1 speaking!</span>"} | 171 | lambda {"<span id='plugin1'>This is Plugin1 speaking!</span>"} |
162 | end | 172 | end |
163 | end | 173 | end |
164 | - | 174 | + |
165 | class Plugin2 < Noosfero::Plugin | 175 | class Plugin2 < Noosfero::Plugin |
166 | def asset_product_extras(product, enterprise) | 176 | def asset_product_extras(product, enterprise) |
167 | lambda {"<span id='plugin2'>This is Plugin2 speaking!</span>"} | 177 | lambda {"<span id='plugin2'>This is Plugin2 speaking!</span>"} |
168 | end | 178 | end |
169 | end | 179 | end |
170 | - | 180 | + |
171 | enterprise = fast_create(Enterprise) | 181 | enterprise = fast_create(Enterprise) |
172 | prod_cat = fast_create(ProductCategory) | 182 | prod_cat = fast_create(ProductCategory) |
173 | product = fast_create(Product, {:enterprise_id => enterprise.id, :name => "produto1", :product_category_id => prod_cat.id}, :search => true) | 183 | product = fast_create(Product, {:enterprise_id => enterprise.id, :name => "produto1", :product_category_id => prod_cat.id}, :search => true) |
@@ -272,6 +282,38 @@ class SearchControllerTest < ActionController::TestCase | @@ -272,6 +282,38 @@ class SearchControllerTest < ActionController::TestCase | ||
272 | assert_not_includes assigns('results')[:enterprises], ent2 | 282 | assert_not_includes assigns('results')[:enterprises], ent2 |
273 | end | 283 | end |
274 | 284 | ||
285 | + should 'show only results in general search' do | ||
286 | + ent1 = create_profile_with_optional_category(Enterprise, 'test1') | ||
287 | + prod_cat = ProductCategory.create!(:name => 'pctest', :environment => Environment.default) | ||
288 | + prod = ent1.products.create!(:name => 'teste', :product_category => prod_cat) | ||
289 | + | ||
290 | + ent2 = create_profile_with_optional_category(Enterprise, 'test2') | ||
291 | + | ||
292 | + get :index, :query => prod_cat.name | ||
293 | + | ||
294 | + assert assigns(:facets).empty? | ||
295 | + assert_nil assigns(:results)[:enterprises].facets | ||
296 | + assert_nil assigns(:results)[:products].facets | ||
297 | + end | ||
298 | + | ||
299 | + should 'search all enabled assets in general search' do | ||
300 | + ent1 = create_profile_with_optional_category(Enterprise, 'test enterprise') | ||
301 | + prod_cat = ProductCategory.create!(:name => 'pctest', :environment => Environment.default) | ||
302 | + prod = ent1.products.create!(:name => 'test product', :product_category => prod_cat) | ||
303 | + art = Article.create!(:name => 'test article', :profile_id => fast_create(Person).id) | ||
304 | + per = Person.create!(:name => 'test person', :identifier => 'test-person', :user_id => fast_create(User).id) | ||
305 | + com = Community.create!(:name => 'test community') | ||
306 | + eve = Event.create!(:name => 'test event', :profile_id => fast_create(Person).id) | ||
307 | + | ||
308 | + get :index, :query => 'test' | ||
309 | + | ||
310 | + [:articles, :enterprises, :people, :communities, :products, :events].select do |key, name| | ||
311 | + !@controller.environment.enabled?('disable_asset_' + key.to_s) | ||
312 | + end.each do |asset| | ||
313 | + assert !assigns(:results)[asset].docs.empty? | ||
314 | + end | ||
315 | + end | ||
316 | + | ||
275 | should 'display category image while in directory' do | 317 | should 'display category image while in directory' do |
276 | parent = Category.create!(:name => 'category1', :environment => Environment.default) | 318 | parent = Category.create!(:name => 'category1', :environment => Environment.default) |
277 | cat = Category.create!(:name => 'category2', :environment => Environment.default, :parent => parent, | 319 | cat = Category.create!(:name => 'category2', :environment => Environment.default, :parent => parent, |
@@ -371,7 +413,7 @@ class SearchControllerTest < ActionController::TestCase | @@ -371,7 +413,7 @@ class SearchControllerTest < ActionController::TestCase | ||
371 | assert_tag :tag => 'h1', :content => 'Communities' | 413 | assert_tag :tag => 'h1', :content => 'Communities' |
372 | end | 414 | end |
373 | 415 | ||
374 | - should 'indicate more than page for total_entries' do | 416 | + should 'indicate more than the page limit for total_entries' do |
375 | Enterprise.destroy_all | 417 | Enterprise.destroy_all |
376 | ('1'..'20').each do |n| | 418 | ('1'..'20').each do |n| |
377 | create_profile_with_optional_category(Enterprise, 'test ' + n) | 419 | create_profile_with_optional_category(Enterprise, 'test ' + n) |
@@ -504,6 +546,40 @@ class SearchControllerTest < ActionController::TestCase | @@ -504,6 +546,40 @@ class SearchControllerTest < ActionController::TestCase | ||
504 | assert_not_includes assigns(:results), p1 | 546 | assert_not_includes assigns(:results), p1 |
505 | end | 547 | end |
506 | 548 | ||
549 | + should 'browse facets when query is not empty' do | ||
550 | + get :articles, :query => 'something' | ||
551 | + get :facets_browse, :asset => 'articles', :facet_id => 'f_type' | ||
552 | + assert_equal assigns(:facet)[:id], 'f_type' | ||
553 | + get :products, :query => 'something' | ||
554 | + get :facets_browse, :asset => 'products', :facet_id => 'f_category' | ||
555 | + assert_equal assigns(:facet)[:id], 'f_category' | ||
556 | + get :people, :query => 'something' | ||
557 | + get :facets_browse, :asset => 'people', :facet_id => 'f_region' | ||
558 | + assert_equal assigns(:facet)[:id], 'f_region' | ||
559 | + end | ||
560 | + | ||
561 | + should 'raise exception when facet is invalid' do | ||
562 | + get :articles, :query => 'something' | ||
563 | + assert_raise RuntimeError do | ||
564 | + get :facets_browse, :asset => 'articles', :facet_id => 'f_whatever' | ||
565 | + end | ||
566 | + end | ||
567 | + | ||
568 | + should 'keep old urls working' do | ||
569 | + get :assets, :asset => 'articles' | ||
570 | + assert_redirected_to :controller => :search, :action => :articles | ||
571 | + get :assets, :asset => 'people' | ||
572 | + assert_redirected_to :controller => :search, :action => :people | ||
573 | + get :assets, :asset => 'communities' | ||
574 | + assert_redirected_to :controller => :search, :action => :communities | ||
575 | + get :assets, :asset => 'products' | ||
576 | + assert_redirected_to :controller => :search, :action => :products | ||
577 | + get :assets, :asset => 'enterprises' | ||
578 | + assert_redirected_to :controller => :search, :action => :enterprises | ||
579 | + get :assets, :asset => 'events' | ||
580 | + assert_redirected_to :controller => :search, :action => :events | ||
581 | + end | ||
582 | + | ||
507 | ################################################################## | 583 | ################################################################## |
508 | ################################################################## | 584 | ################################################################## |
509 | 585 |