7b0cb6aba8
* Ran the Rails upgrade * Upgraded to Rails Engines 2.3.2 * Added a plugin to let Engines override application views. * Converted tests to use the new classes: ** ActionController::TestCase for functional ** ActiveSupport::TestCase for units * Converted ActiveRecord::Error message to a string. * ActiveRecord grouping returns an ordered hash which doesn't have #sort! * Updated the I18n storage_units format. * Added some default initializers from a fresh rails app * Changed the order of check_box_tags and hidden_field_tags. The hidden tag needs to appear first in Rails 2.3, otherwise it will override any value in the check_box_tag. * Removed the custom handler for when the cookie store is tampered with. Rails 2.3 removed the TamperedWithCookie exception and instead Rails will not load the data from it when it's been tampered with (e.g. no user login). * Fixed mail layouts, 2.3 has problems with implicit multipart emails that use layouts. Also removed some custom Redmine mailer code. * Fixed a bug that occurred in tests where the "required" span tag would be added to the :field_status translation. This resulted in an email string of: <li>Status<span class="required"> *</span><span class="required"> *</span> Instead of: <li>Status: New</li> git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2887 e93f8b46-1217-0410-a6f0-8f06a7374b81
142 lines
4.4 KiB
Ruby
142 lines
4.4 KiB
Ruby
require File.dirname(__FILE__) + '/../test_helper'
|
|
require 'search_controller'
|
|
|
|
# Re-raise errors caught by the controller.
|
|
class SearchController; def rescue_action(e) raise e end; end
|
|
|
|
class SearchControllerTest < ActionController::TestCase
|
|
fixtures :projects, :enabled_modules, :roles, :users, :members, :member_roles,
|
|
:issues, :trackers, :issue_statuses,
|
|
:custom_fields, :custom_values,
|
|
:repositories, :changesets
|
|
|
|
def setup
|
|
@controller = SearchController.new
|
|
@request = ActionController::TestRequest.new
|
|
@response = ActionController::TestResponse.new
|
|
User.current = nil
|
|
end
|
|
|
|
def test_search_for_projects
|
|
get :index
|
|
assert_response :success
|
|
assert_template 'index'
|
|
|
|
get :index, :q => "cook"
|
|
assert_response :success
|
|
assert_template 'index'
|
|
assert assigns(:results).include?(Project.find(1))
|
|
end
|
|
|
|
def test_search_all_projects
|
|
get :index, :q => 'recipe subproject commit', :submit => 'Search'
|
|
assert_response :success
|
|
assert_template 'index'
|
|
|
|
assert assigns(:results).include?(Issue.find(2))
|
|
assert assigns(:results).include?(Issue.find(5))
|
|
assert assigns(:results).include?(Changeset.find(101))
|
|
assert_tag :dt, :attributes => { :class => /issue/ },
|
|
:child => { :tag => 'a', :content => /Add ingredients categories/ },
|
|
:sibling => { :tag => 'dd', :content => /should be classified by categories/ }
|
|
|
|
assert assigns(:results_by_type).is_a?(Hash)
|
|
assert_equal 5, assigns(:results_by_type)['changesets']
|
|
assert_tag :a, :content => 'Changesets (5)'
|
|
end
|
|
|
|
def test_search_issues
|
|
get :index, :q => 'issue', :issues => 1
|
|
assert_response :success
|
|
assert_template 'index'
|
|
|
|
assert assigns(:results).include?(Issue.find(8))
|
|
assert assigns(:results).include?(Issue.find(5))
|
|
assert_tag :dt, :attributes => { :class => /issue closed/ },
|
|
:child => { :tag => 'a', :content => /Closed/ }
|
|
end
|
|
|
|
def test_search_project_and_subprojects
|
|
get :index, :id => 1, :q => 'recipe subproject', :scope => 'subprojects', :submit => 'Search'
|
|
assert_response :success
|
|
assert_template 'index'
|
|
assert assigns(:results).include?(Issue.find(1))
|
|
assert assigns(:results).include?(Issue.find(5))
|
|
end
|
|
|
|
def test_search_without_searchable_custom_fields
|
|
CustomField.update_all "searchable = #{ActiveRecord::Base.connection.quoted_false}"
|
|
|
|
get :index, :id => 1
|
|
assert_response :success
|
|
assert_template 'index'
|
|
assert_not_nil assigns(:project)
|
|
|
|
get :index, :id => 1, :q => "can"
|
|
assert_response :success
|
|
assert_template 'index'
|
|
end
|
|
|
|
def test_search_with_searchable_custom_fields
|
|
get :index, :id => 1, :q => "stringforcustomfield"
|
|
assert_response :success
|
|
results = assigns(:results)
|
|
assert_not_nil results
|
|
assert_equal 1, results.size
|
|
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_search_with_invalid_project_id
|
|
get :index, :id => 195, :q => 'recipe'
|
|
assert_response 404
|
|
assert_nil assigns(:results)
|
|
end
|
|
|
|
def test_quick_jump_to_issue
|
|
# issue of a public project
|
|
get :index, :q => "3"
|
|
assert_redirected_to 'issues/3'
|
|
|
|
# issue of a private project
|
|
get :index, :q => "4"
|
|
assert_response :success
|
|
assert_template 'index'
|
|
end
|
|
|
|
def test_tokens_with_quotes
|
|
get :index, :id => 1, :q => '"good bye" hello "bye bye"'
|
|
assert_equal ["good bye", "hello", "bye bye"], assigns(:tokens)
|
|
end
|
|
end
|