diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index f2e146b2f..440497c6e 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -1,5 +1,5 @@ -# redMine - project management software -# Copyright (C) 2006 Jean-Philippe Lang +# Redmine - project management software +# Copyright (C) 2006-2011 Jean-Philippe Lang # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -24,8 +24,8 @@ class SearchController < ApplicationController def index @question = params[:q] || "" @question.strip! - @all_words = params[:all_words] || (params[:submit] ? false : true) - @titles_only = !params[:titles_only].nil? + @all_words = params[:all_words] ? params[:all_words].present? : true + @titles_only = params[:titles_only] ? params[:titles_only].present? : false projects_to_search = case params[:scope] diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb index b8f416c58..da3610e95 100644 --- a/app/helpers/search_helper.rb +++ b/app/helpers/search_helper.rb @@ -1,5 +1,5 @@ -# redMine - project management software -# Copyright (C) 2006-2007 Jean-Philippe Lang +# Redmine - project management software +# Copyright (C) 2006-2011 Jean-Philippe Lang # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -57,7 +57,7 @@ module SearchHelper c = results_by_type[t] next if c == 0 text = "#{type_label(t)} (#{c})" - links << link_to(text, :q => params[:q], :titles_only => params[:title_only], :all_words => params[:all_words], :scope => params[:scope], t => 1) + links << link_to(text, :q => params[:q], :titles_only => params[:titles_only], :all_words => params[:all_words], :scope => params[:scope], t => 1) end ('') unless links.empty? end diff --git a/app/views/search/index.rhtml b/app/views/search/index.rhtml index 13ec567d9..0cedc4b14 100644 --- a/app/views/search/index.rhtml +++ b/app/views/search/index.rhtml @@ -5,7 +5,9 @@

<%= text_field_tag 'q', @question, :size => 60, :id => 'search-input' %> <%= javascript_tag "Field.focus('search-input')" %> <%= project_select_tag %> +<%= hidden_field_tag 'all_words', '', :id => nil %> +<%= hidden_field_tag 'titles_only', '', :id => nil %>

diff --git a/test/functional/search_controller_test.rb b/test/functional/search_controller_test.rb index e88ee6990..446b5488b 100644 --- a/test/functional/search_controller_test.rb +++ b/test/functional/search_controller_test.rb @@ -29,7 +29,7 @@ class SearchControllerTest < ActionController::TestCase end def test_search_all_projects - get :index, :q => 'recipe subproject commit', :submit => 'Search' + get :index, :q => 'recipe subproject commit', :all_words => '' assert_response :success assert_template 'index' @@ -50,6 +50,8 @@ class SearchControllerTest < ActionController::TestCase assert_response :success assert_template 'index' + assert_equal true, assigns(:all_words) + assert_equal false, assigns(:titles_only) assert assigns(:results).include?(Issue.find(8)) assert assigns(:results).include?(Issue.find(5)) assert_tag :dt, :attributes => { :class => /issue closed/ }, @@ -57,7 +59,7 @@ class SearchControllerTest < ActionController::TestCase end def test_search_project_and_subprojects - get :index, :id => 1, :q => 'recipe subproject', :scope => 'subprojects', :submit => 'Search' + get :index, :id => 1, :q => 'recipe subproject', :scope => 'subprojects', :all_words => '' assert_response :success assert_template 'index' assert assigns(:results).include?(Issue.find(1)) @@ -88,7 +90,8 @@ class SearchControllerTest < ActionController::TestCase def test_search_all_words # 'all words' is on by default - get :index, :id => 1, :q => 'recipe updating saving' + get :index, :id => 1, :q => 'recipe updating saving', :all_words => '1' + assert_equal true, assigns(:all_words) results = assigns(:results) assert_not_nil results assert_equal 1, results.size @@ -96,7 +99,8 @@ class SearchControllerTest < ActionController::TestCase end def test_search_one_of_the_words - get :index, :id => 1, :q => 'recipe updating saving', :submit => 'Search' + get :index, :id => 1, :q => 'recipe updating saving', :all_words => '' + assert_equal false, assigns(:all_words) results = assigns(:results) assert_not_nil results assert_equal 3, results.size @@ -104,19 +108,30 @@ class SearchControllerTest < ActionController::TestCase end def test_search_titles_only_without_result - get :index, :id => 1, :q => 'recipe updating saving', :all_words => '1', :titles_only => '1', :submit => 'Search' + get :index, :id => 1, :q => 'recipe updating saving', :titles_only => '1' 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' + get :index, :id => 1, :q => 'recipe', :titles_only => '1' + assert_equal true, assigns(:titles_only) results = assigns(:results) assert_not_nil results assert_equal 2, results.size end + def test_search_content + Issue.update_all("description = 'This is a searchkeywordinthecontent'", "id=1") + + get :index, :id => 1, :q => 'searchkeywordinthecontent', :titles_only => '' + assert_equal false, assigns(:titles_only) + results = assigns(:results) + assert_not_nil results + assert_equal 1, results.size + end + def test_search_with_invalid_project_id get :index, :id => 195, :q => 'recipe' assert_response 404