summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/search_controller.rb8
-rw-r--r--app/helpers/search_helper.rb6
-rw-r--r--app/views/search/index.rhtml2
-rw-r--r--test/functional/search_controller_test.rb27
4 files changed, 30 insertions, 13 deletions
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
('<ul>' + links.map {|link| content_tag('li', link)}.join(' ') + '</ul>') 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 @@
<p><%= 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 %>
<label><%= check_box_tag 'all_words', 1, @all_words %> <%= l(:label_all_words) %></label>
+<%= hidden_field_tag 'titles_only', '', :id => nil %>
<label><%= check_box_tag 'titles_only', 1, @titles_only %> <%= l(:label_search_titles_only) %></label>
</p>
<p>
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