Commit c57ced6ac61e7ae8e26a372010d701926ac26e82

Authored by Rafael Martins
1 parent debc04c9

SearchHelper fixes and unit tests

app/helpers/search_helper.rb
... ... @@ -17,7 +17,7 @@ module SearchHelper
17 17 end
18 18  
19 19 def display_results(use_map = false)
20   - if params[:display] == 'map' && use_map && GoogleMaps.enabled?(environment.default_hostname)
  20 + if params[:display] == 'map' && use_map
21 21 partial = 'google_maps'
22 22 klass = 'map'
23 23 else
... ... @@ -31,15 +31,19 @@ module SearchHelper
31 31 def display_map_list_button
32 32 button(:search, params[:display] == 'map' ? _('Display in list') : _('Display in map'),
33 33 params.merge(:display => (params[:display] == 'map' ? 'list' : 'map')),
34   - :class => "map-toggle-button" ) if GoogleMaps.enabled?(environment.default_hostname)
  34 + :class => "map-toggle-button" )
35 35 end
36 36  
37 37 def city_with_state(city)
38   - s = city.parent
39   - if city and city.kind_of?(City) and s and s.kind_of?(State) and s.acronym
40   - city.name + ', ' + s.acronym
  38 + if city and city.kind_of?(City)
  39 + s = city.parent
  40 + if s and s.kind_of?(State) and s.acronym
  41 + city.name + ', ' + s.acronym
  42 + else
  43 + city.name
  44 + end
41 45 else
42   - city.name
  46 + nil
43 47 end
44 48 end
45 49  
... ... @@ -55,6 +59,7 @@ module SearchHelper
55 59 end
56 60  
57 61 def facet_javascript(input_id, facet, array)
  62 + array = [] if array.nil?
58 63 hintText = _('Type in an option')
59 64 text_field_tag('facet['+input_id+']', '', :id => input_id) +
60 65 javascript_tag("jQuery.TokenList(jQuery('##{input_id}'), #{array.to_json},
... ... @@ -63,13 +68,13 @@ module SearchHelper
63 68 end
64 69  
65 70 def facet_link_html(facet, params, value, label, count)
66   - params = params.dup
  71 + params = params ? params.dup : {}
67 72 has_extra = label.kind_of?(Array)
68 73 link_label = has_extra ? label[0] : label
69 74 id = facet[:solr_field].to_s
70 75 params[:facet] ||= {}
71 76 params[:facet][id] ||= {}
72   - params[:page] = {}
  77 + params[:page] = {} if params[:page]
73 78  
74 79 selected = facet[:label_id].nil? ? params[:facet][id] == value : params[:facet][id][facet[:label_id]].to_a.include?(value)
75 80  
... ...
test/unit/search_helper_test.rb 0 → 100644
... ... @@ -0,0 +1,252 @@
  1 +require File.dirname(__FILE__) + '/../test_helper'
  2 +
  3 +class SearchHelperTest < ActiveSupport::TestCase
  4 +
  5 + include SearchHelper
  6 +
  7 +
  8 +
  9 + should 'display search page title' do
  10 + title = 'page_title'
  11 + assert_equal search_page_title(title), '<h1>page_title</h1>'
  12 + end
  13 +
  14 + should 'display search page title with category name' do
  15 + title = 'page_title'
  16 + category = mock
  17 + category.stubs(:name).returns('category_name')
  18 + assert_equal '<h1>page_title<small>category_name</small></h1>',
  19 + search_page_title(title, category)
  20 + end
  21 +
  22 + should 'display category context' do
  23 + stubs(:params).returns({:action => 'action'})
  24 + category = mock
  25 + category.stubs(:full_name).returns('category_full_name')
  26 + expects('link_to').returns('link_to_result').once
  27 + expects('content_tag').with('div', 'category_full_name, link_to_result', anything)
  28 + category_context(category, {})
  29 + end
  30 +
  31 + should 'display results without map' do
  32 + stubs(:params).returns({:display => ''})
  33 + expects('render').with({:partial => 'display_results'}).returns('render_return')
  34 + expects('content_tag').with('div', 'render_return', :class => 'map-or-list-search-results list')
  35 + display_results
  36 + end
  37 +
  38 + should 'display results with map' do
  39 + stubs(:params).returns({:display => 'map'})
  40 + expects('render').with({:partial => 'google_maps'}).returns('render_return')
  41 + expects('content_tag').with('div', 'render_return', :class => 'map-or-list-search-results map')
  42 + display_results true
  43 + end
  44 +
  45 + should 'show display_list button when in map view' do
  46 + stubs(:params).returns({:display => 'map'})
  47 + expects(:button).with(:search, 'Display in list', {:display => 'list'}, anything)
  48 + display_map_list_button
  49 + end
  50 +
  51 + should 'show display_map button when in list view' do
  52 + stubs(:params).returns({:display => ''})
  53 + expects(:button).with(:search, 'Display in map', {:display => 'map'}, anything)
  54 + display_map_list_button
  55 + end
  56 +
  57 + should 'return full city name with state' do
  58 + state = mock
  59 + state.stubs(:kind_of?).with(State).returns(true)
  60 + state.stubs(:acronym).returns('CE')
  61 + city = mock
  62 + city.stubs(:parent).returns(state)
  63 + city.stubs(:kind_of?).with(City).returns(true)
  64 + city.stubs(:name).returns('Jijoca de Jericoacoara')
  65 + assert_equal 'Jijoca de Jericoacoara, CE', city_with_state(city)
  66 + end
  67 +
  68 + should 'not return city_with_state when city is nil' do
  69 + assert_nil city_with_state nil
  70 + end
  71 +
  72 + should 'not return city_with_state when parameter is not a City' do
  73 + city = mock
  74 + city.stubs(:kind_of?).with(City).returns(false)
  75 + assert_nil city_with_state city
  76 + end
  77 +
  78 + should 'return city name when parent is not defined' do
  79 + city = mock
  80 + city.stubs(:kind_of?).with(City).returns(true)
  81 + city.stubs(:parent).returns(nil)
  82 + city.stubs(:name).returns('Feliz Deserto')
  83 + assert_equal 'Feliz Deserto', city_with_state(city)
  84 + end
  85 +
  86 + should 'return city name when parent is not a State' do
  87 + state = mock
  88 + state.stubs(:kind_of?).with(State).returns(false)
  89 + city = mock
  90 + city.stubs(:kind_of?).with(City).returns(true)
  91 + city.stubs(:parent).returns(state)
  92 + city.stubs(:name).returns('Feliz Deserto')
  93 + assert_equal 'Feliz Deserto', city_with_state(city)
  94 + end
  95 +
  96 + should 'return city name when parent has no acronym' do
  97 + state = mock
  98 + state.stubs(:kind_of?).with(State).returns(true)
  99 + state.stubs(:acronym).returns(nil)
  100 + city = mock
  101 + city.stubs(:kind_of?).with(City).returns(true)
  102 + city.stubs(:parent).returns(state)
  103 + city.stubs(:name).returns('Feliz Deserto')
  104 + assert_equal 'Feliz Deserto', city_with_state(city)
  105 + end
  106 +
  107 + should 'display facets menu' do
  108 + expects(:asset_class).with('asset')
  109 + expects(:render).with(:partial => 'facets_menu')
  110 + facets_menu 'asset', nil
  111 + end
  112 +
  113 + should 'display facets_unselect menu' do
  114 + expects(:asset_class).with('asset')
  115 + expects(:render).with(:partial => 'facets_unselect_menu')
  116 + facets_unselect_menu 'asset'
  117 + end
  118 +
  119 + should 'display facets javascript' do
  120 + expects(:text_field_tag).returns('<text_field_tag_return>')
  121 + expects(:javascript_tag).with(regexp_matches(/id.*[\'array_item\'].*json_message/m)).returns(
  122 + '<javascript_tag_return>')
  123 + stubs(:jquery_token_input_messages_json).returns('json_message')
  124 + assert_equal '<text_field_tag_return><javascript_tag_return>',
  125 + facet_javascript('id', '', ['array_item'])
  126 + end
  127 +
  128 + should 'display empty array in facets javascript if array is nil' do
  129 + expects(:text_field_tag).returns('<text_field_tag_return>')
  130 + expects(:javascript_tag).with(regexp_matches(/id.*\[\].*json_message/m)).returns(
  131 + '<javascript_tag_return>')
  132 + stubs(:jquery_token_input_messages_json).returns('json_message')
  133 + assert_equal '<text_field_tag_return><javascript_tag_return>',
  134 + facet_javascript('id', '', [])
  135 + end
  136 +
  137 + should 'return html code for facet link' do
  138 + facet = {
  139 + :solr_field => 'facet_solr_field',
  140 + :label_id => 'facet_label_id'
  141 + }
  142 + params = {}
  143 + value = 'facet_value'
  144 + label = 'facet_label'
  145 + count = 1
  146 +
  147 + expected_url = {:facet => {'facet_solr_field' => { 'facet_label_id' => ['facet_value']}}}
  148 +
  149 + expects(:link_to).with('facet_label', expected_url, anything).returns('<link_to_result>')
  150 + stubs(:content_tag).with(anything, '', anything).returns('<content_tag_extra>')
  151 + stubs(:content_tag).with(anything, ' (1)', anything).returns('<content_tag_count>')
  152 + stubs(:content_tag).with(anything, '<link_to_result><content_tag_extra><content_tag_count>', anything).returns('<content_tag_final_result>')
  153 +
  154 + assert_equal '<content_tag_final_result>',
  155 + facet_link_html(facet, params, value, label, count)
  156 + end
  157 +
  158 + should 'return html code for facet link with extra label' do
  159 + facet = {
  160 + :solr_field => 'facet_solr_field',
  161 + :label_id => 'facet_label_id'
  162 + }
  163 + params = {}
  164 + value = 'facet_value'
  165 + label = ['facet_label', 'facet_extra']
  166 + count = 1
  167 +
  168 + expected_url = {:facet => {'facet_solr_field' => { 'facet_label_id' => ['facet_value']}}}
  169 +
  170 + expects(:link_to).with('facet_label', expected_url, anything).returns('<link_to_result>')
  171 + stubs(:content_tag).with(anything, 'facet_extra', anything).returns('<content_tag_extra>')
  172 + stubs(:content_tag).with(anything, ' (1)', anything).returns('<content_tag_count>')
  173 + stubs(:content_tag).with(anything, '<link_to_result><content_tag_extra><content_tag_count>', anything).returns('<content_tag_final_result>')
  174 +
  175 + assert_equal '<content_tag_final_result>',
  176 + facet_link_html(facet, params, value, label, count)
  177 + end
  178 +
  179 + should 'return html code for selected facet link' do
  180 + facet = {
  181 + :solr_field => 'facet_solr_field'
  182 + }
  183 + params = {:facet => {'facet_solr_field' => 'facet_value'}}
  184 + value = 'facet_value'
  185 + label = 'facet_label'
  186 + count = 1
  187 +
  188 + expected_url = {:facet => {'facet_solr_field' => 'facet_value'}}
  189 +
  190 + expects(:link_to).with('facet_label', expected_url, anything).returns('<link_to_result>')
  191 + stubs(:content_tag).with(anything, '', anything).returns('<content_tag_extra>')
  192 + stubs(:content_tag).with(anything, ' (1)', anything).returns('<content_tag_count>')
  193 + stubs(:content_tag).with(anything, '<link_to_result><content_tag_extra><content_tag_count>', {:class => 'facet-menu-item facet-result-link-selected'}).returns('<content_tag_final_result>')
  194 +
  195 + assert_equal '<content_tag_final_result>',
  196 + facet_link_html(facet, params, value, label, count)
  197 + end
  198 +
  199 + should 'show html for non-hash selected facets' do
  200 + klass = mock
  201 + klass.stubs(:facet_by_id).with(:facet_id).returns('klass_facet_by_id')
  202 + klass.stubs(:facet_label).with('klass_facet_by_id').returns('klass_facet_label')
  203 + klass.stubs(:facet_result_name).with('klass_facet_by_id', 'facet_value').returns('klass_facet_result_name')
  204 + params = {:facet => {:facet_id => 'facet_value'}}
  205 +
  206 + expects(:content_tag).with(anything, 'klass_facet_label', anything).returns('<content_tag_label>')
  207 + expects(:content_tag).with(anything, 'klass_facet_result_name', anything).returns('<content_tag_name>')
  208 + expects(:link_to).with(anything, {:facet => {}}, anything).returns('<link_to_url>')
  209 + expects(:content_tag).with(anything, '<content_tag_label><content_tag_name><link_to_url>', anything).returns('<final_content>')
  210 +
  211 + environment = mock
  212 + assert_match '<final_content>', facet_selecteds_html_for(environment, klass, params)
  213 + end
  214 +
  215 + should 'show select tag for order_by' do
  216 + [:products, :events, :articles, :enterprises, :people, :communities].each do |asset|
  217 + params = {:order_by => 'Relevance'}
  218 +
  219 + stubs(:params).returns(params)
  220 + stubs(:options_for_select).with(instance_of(Array), params[:order_by]).returns('<options_for_select>')
  221 + stubs(:select_tag).with(regexp_matches(/#{asset}/), '<options_for_select>', anything).returns('<select_tag>')
  222 + expects(:content_tag).with(anything, regexp_matches(/<select_tag>/), anything).returns('<final_content>')
  223 +
  224 + assert_equal '<final_content>', order_by(asset)
  225 + end
  226 + end
  227 +
  228 + should 'show total of assets found' do
  229 + [:products, :events, :articles, :enterprises, :people, :communities].each do |asset|
  230 + expects(:content_tag).with(anything, regexp_matches(/10.*#{asset}.*found/), anything).returns('<final_content>')
  231 + assert_equal '<final_content>', label_total_found(asset, 10)
  232 + end
  233 + end
  234 +
  235 +
  236 + should 'return asset class from string' do
  237 + asset_names = ['products', 'events', 'articles', 'enterprises', 'people', 'communities']
  238 + asset_classes = [Product, Event, Article, Enterprise, Person, Community]
  239 + asset_names.each_index do |i|
  240 + assert_equal asset_classes[i], asset_class(asset_names[i])
  241 + end
  242 + end
  243 +
  244 + should 'return asset table from string' do
  245 + asset_classes = [Product, Event, Article, Enterprise, Person, Community]
  246 + asset_tables = ['products', 'articles', 'articles', 'profiles', 'profiles', 'profiles']
  247 + asset_classes.each_index do |i|
  248 + assert_equal asset_tables[i], asset_table(asset_classes[i])
  249 + end
  250 + end
  251 +
  252 +end
... ...