From: Jean-Philippe Lang Date: Mon, 21 Jan 2008 18:52:45 +0000 (+0000) Subject: Fixed search with all words (broken in r994). X-Git-Tag: 0.7.0-RC1~194 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=dad5f6d403dcf70e11065da199f05be49ca2bc48;p=redmine.git Fixed search with all words (broken in r994). git-svn-id: http://redmine.rubyforge.org/svn/trunk@1092 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/test/fixtures/issues.yml b/test/fixtures/issues.yml index fc5b48dee..b3c662039 100644 --- a/test/fixtures/issues.yml +++ b/test/fixtures/issues.yml @@ -22,7 +22,7 @@ issues_002: id: 2 fixed_version_id: category_id: - description: Ingredients should be classified by categories + description: Ingredients of the recipe should be classified by categories tracker_id: 2 assigned_to_id: 3 author_id: 2 diff --git a/test/functional/search_controller_test.rb b/test/functional/search_controller_test.rb index 330cd0de0..63f1097d6 100644 --- a/test/functional/search_controller_test.rb +++ b/test/functional/search_controller_test.rb @@ -5,7 +5,7 @@ require 'search_controller' class SearchController; def rescue_action(e) raise e end; end class SearchControllerTest < Test::Unit::TestCase - fixtures :projects, :issues, :custom_fields, :custom_values + fixtures :projects, :enabled_modules, :issues, :custom_fields, :custom_values def setup @controller = SearchController.new @@ -47,6 +47,37 @@ class SearchControllerTest < Test::Unit::TestCase assert results.include?(Issue.find(3)) end + def test_search_all_words + # 'all words' is on by default + get :index, :id => 1, :q => 'recipe updating saving' + results = assigns(:results) + assert_not_nil results + assert_equal 1, results.size + assert results.include?(Issue.find(3)) + end + + def test_search_one_of_the_words + get :index, :id => 1, :q => 'recipe updating saving', :submit => 'Search' + results = assigns(:results) + assert_not_nil results + assert_equal 3, results.size + assert results.include?(Issue.find(3)) + end + + def test_search_titles_only_without_result + get :index, :id => 1, :q => 'recipe updating saving', :all_words => '1', :titles_only => '1', :submit => 'Search' + results = assigns(:results) + assert_not_nil results + assert_equal 0, results.size + end + + def test_search_titles_only + get :index, :id => 1, :q => 'recipe', :titles_only => '1', :submit => 'Search' + results = assigns(:results) + assert_not_nil results + assert_equal 2, results.size + end + def test_quick_jump_to_issue # issue of a public project get :index, :q => "3" diff --git a/vendor/plugins/acts_as_searchable/lib/acts_as_searchable.rb b/vendor/plugins/acts_as_searchable/lib/acts_as_searchable.rb index 1dd88978c..dff76b913 100644 --- a/vendor/plugins/acts_as_searchable/lib/acts_as_searchable.rb +++ b/vendor/plugins/acts_as_searchable/lib/acts_as_searchable.rb @@ -85,7 +85,7 @@ module Redmine end end - sql = ([token_clauses.join(' OR ')] * tokens.size).join(options[:all_words] ? ' AND ' : ' OR ') + sql = (['(' + token_clauses.join(' OR ') + ')'] * tokens.size).join(options[:all_words] ? ' AND ' : ' OR ') if options[:offset] sql = "(#{sql}) AND (#{searchable_options[:date_column]} " + (options[:before] ? '<' : '>') + "'#{connection.quoted_date(options[:offset])}')"