From ee116023e6fee6b2b3ac0863c48391abdc7fcb3a Mon Sep 17 00:00:00 2001 From: Rafael Martins Date: Tue, 17 Apr 2012 15:43:27 -0300 Subject: [PATCH] Added some functional tests and small fixes for SearchController --- app/controllers/public/search_controller.rb | 9 +++++---- test/functional/search_controller_test.rb | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 86 insertions(+), 9 deletions(-) diff --git a/app/controllers/public/search_controller.rb b/app/controllers/public/search_controller.rb index af64b26..8f30109 100644 --- a/app/controllers/public/search_controller.rb +++ b/app/controllers/public/search_controller.rb @@ -114,7 +114,7 @@ class SearchController < PublicController @names = {} @results_only = true - @enabled_searchs.select { |key,description| @searching[key] }.each do |key, description| + @enabled_searches.select { |key,description| @searching[key] }.each do |key, description| load_query @asset = key send(key) @@ -149,7 +149,7 @@ class SearchController < PublicController ].each do |asset, name, filter| @order << asset @results[asset] = @category.send(filter, limit) - raise "nao total #{asset}" unless @results[asset].respond_to?(:total_entries) + raise "No total_entries for: #{asset}" unless @results[asset].respond_to?(:total_entries) @names[asset] = name end end @@ -229,7 +229,7 @@ class SearchController < PublicController end def load_search_assets - @enabled_searchs = [ + @enabled_searches = [ [ :articles, _('Contents') ], [ :enterprises, _('Enterprises') ], [ :people, _('People') ], @@ -240,10 +240,11 @@ class SearchController < PublicController @searching = {} @titles = {} - @enabled_searchs.each do |key, name| + @enabled_searches.each do |key, name| @titles[key] = name @searching[key] = params[:action] == 'index' || params[:action] == key.to_s end + @names = @titles if @names.nil? end def limit diff --git a/test/functional/search_controller_test.rb b/test/functional/search_controller_test.rb index e614b0d..9ed7f90 100644 --- a/test/functional/search_controller_test.rb +++ b/test/functional/search_controller_test.rb @@ -74,6 +74,15 @@ class SearchControllerTest < ActionController::TestCase assert_includes assigns(:results)[:articles], art end + should 'redirect contents to articles' do + person = fast_create(Person) + art = create_article_with_optional_category('an article to be found', person) + + get 'contents', :query => 'article found' + # full description to avoid deprecation warning + assert_redirected_to :controller => :search, :action => :articles, :query => 'article found' + end + # 'assets' outside any category should 'list articles in general' do person = fast_create(Person) @@ -89,7 +98,7 @@ class SearchControllerTest < ActionController::TestCase should 'find enterprises' do ent = create_profile_with_optional_category(Enterprise, 'teste') - get 'enterprises', :query => 'teste' + get :enterprises, :query => 'teste' assert_includes assigns(:results)[:enterprises], ent end @@ -143,8 +152,9 @@ class SearchControllerTest < ActionController::TestCase end # 'assets' menu outside any category - should 'list products in general' do + should 'list products in general without geosearch' do Profile.delete_all + SearchController.stubs(:logged_in?).returns(false) ent1 = create_profile_with_optional_category(Enterprise, 'teste1') ent2 = create_profile_with_optional_category(Enterprise, 'teste2') @@ -161,13 +171,13 @@ class SearchControllerTest < ActionController::TestCase lambda {"This is Plugin1 speaking!"} end end - + class Plugin2 < Noosfero::Plugin def asset_product_extras(product, enterprise) lambda {"This is Plugin2 speaking!"} end end - + enterprise = fast_create(Enterprise) prod_cat = fast_create(ProductCategory) 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 assert_not_includes assigns('results')[:enterprises], ent2 end + should 'show only results in general search' do + ent1 = create_profile_with_optional_category(Enterprise, 'test1') + prod_cat = ProductCategory.create!(:name => 'pctest', :environment => Environment.default) + prod = ent1.products.create!(:name => 'teste', :product_category => prod_cat) + + ent2 = create_profile_with_optional_category(Enterprise, 'test2') + + get :index, :query => prod_cat.name + + assert assigns(:facets).empty? + assert_nil assigns(:results)[:enterprises].facets + assert_nil assigns(:results)[:products].facets + end + + should 'search all enabled assets in general search' do + ent1 = create_profile_with_optional_category(Enterprise, 'test enterprise') + prod_cat = ProductCategory.create!(:name => 'pctest', :environment => Environment.default) + prod = ent1.products.create!(:name => 'test product', :product_category => prod_cat) + art = Article.create!(:name => 'test article', :profile_id => fast_create(Person).id) + per = Person.create!(:name => 'test person', :identifier => 'test-person', :user_id => fast_create(User).id) + com = Community.create!(:name => 'test community') + eve = Event.create!(:name => 'test event', :profile_id => fast_create(Person).id) + + get :index, :query => 'test' + + [:articles, :enterprises, :people, :communities, :products, :events].select do |key, name| + !@controller.environment.enabled?('disable_asset_' + key.to_s) + end.each do |asset| + assert !assigns(:results)[asset].docs.empty? + end + end + should 'display category image while in directory' do parent = Category.create!(:name => 'category1', :environment => Environment.default) cat = Category.create!(:name => 'category2', :environment => Environment.default, :parent => parent, @@ -371,7 +413,7 @@ class SearchControllerTest < ActionController::TestCase assert_tag :tag => 'h1', :content => 'Communities' end - should 'indicate more than page for total_entries' do + should 'indicate more than the page limit for total_entries' do Enterprise.destroy_all ('1'..'20').each do |n| create_profile_with_optional_category(Enterprise, 'test ' + n) @@ -504,6 +546,40 @@ class SearchControllerTest < ActionController::TestCase assert_not_includes assigns(:results), p1 end + should 'browse facets when query is not empty' do + get :articles, :query => 'something' + get :facets_browse, :asset => 'articles', :facet_id => 'f_type' + assert_equal assigns(:facet)[:id], 'f_type' + get :products, :query => 'something' + get :facets_browse, :asset => 'products', :facet_id => 'f_category' + assert_equal assigns(:facet)[:id], 'f_category' + get :people, :query => 'something' + get :facets_browse, :asset => 'people', :facet_id => 'f_region' + assert_equal assigns(:facet)[:id], 'f_region' + end + + should 'raise exception when facet is invalid' do + get :articles, :query => 'something' + assert_raise RuntimeError do + get :facets_browse, :asset => 'articles', :facet_id => 'f_whatever' + end + end + + should 'keep old urls working' do + get :assets, :asset => 'articles' + assert_redirected_to :controller => :search, :action => :articles + get :assets, :asset => 'people' + assert_redirected_to :controller => :search, :action => :people + get :assets, :asset => 'communities' + assert_redirected_to :controller => :search, :action => :communities + get :assets, :asset => 'products' + assert_redirected_to :controller => :search, :action => :products + get :assets, :asset => 'enterprises' + assert_redirected_to :controller => :search, :action => :enterprises + get :assets, :asset => 'events' + assert_redirected_to :controller => :search, :action => :events + end + ################################################################## ################################################################## -- libgit2 0.21.2