annotate test/functional/search_controller_test.rb @ 8:0c83d98252d9 yuya

* Add custom repo prefix and proper auth realm, remove auth cache (seems like an unwise feature), pass DB handle around, various other bits of tidying
author Chris Cannam
date Thu, 12 Aug 2010 15:31:37 +0100
parents 513646585e45
children 94944d00e43c
rev   line source
Chris@0 1 require File.dirname(__FILE__) + '/../test_helper'
Chris@0 2 require 'search_controller'
Chris@0 3
Chris@0 4 # Re-raise errors caught by the controller.
Chris@0 5 class SearchController; def rescue_action(e) raise e end; end
Chris@0 6
Chris@0 7 class SearchControllerTest < ActionController::TestCase
Chris@0 8 fixtures :projects, :enabled_modules, :roles, :users, :members, :member_roles,
Chris@0 9 :issues, :trackers, :issue_statuses,
Chris@0 10 :custom_fields, :custom_values,
Chris@0 11 :repositories, :changesets
Chris@0 12
Chris@0 13 def setup
Chris@0 14 @controller = SearchController.new
Chris@0 15 @request = ActionController::TestRequest.new
Chris@0 16 @response = ActionController::TestResponse.new
Chris@0 17 User.current = nil
Chris@0 18 end
Chris@0 19
Chris@0 20 def test_search_for_projects
Chris@0 21 get :index
Chris@0 22 assert_response :success
Chris@0 23 assert_template 'index'
Chris@0 24
Chris@0 25 get :index, :q => "cook"
Chris@0 26 assert_response :success
Chris@0 27 assert_template 'index'
Chris@0 28 assert assigns(:results).include?(Project.find(1))
Chris@0 29 end
Chris@0 30
Chris@0 31 def test_search_all_projects
Chris@0 32 get :index, :q => 'recipe subproject commit', :submit => 'Search'
Chris@0 33 assert_response :success
Chris@0 34 assert_template 'index'
Chris@0 35
Chris@0 36 assert assigns(:results).include?(Issue.find(2))
Chris@0 37 assert assigns(:results).include?(Issue.find(5))
Chris@0 38 assert assigns(:results).include?(Changeset.find(101))
Chris@0 39 assert_tag :dt, :attributes => { :class => /issue/ },
Chris@0 40 :child => { :tag => 'a', :content => /Add ingredients categories/ },
Chris@0 41 :sibling => { :tag => 'dd', :content => /should be classified by categories/ }
Chris@0 42
Chris@0 43 assert assigns(:results_by_type).is_a?(Hash)
Chris@0 44 assert_equal 5, assigns(:results_by_type)['changesets']
Chris@0 45 assert_tag :a, :content => 'Changesets (5)'
Chris@0 46 end
Chris@0 47
Chris@0 48 def test_search_issues
Chris@0 49 get :index, :q => 'issue', :issues => 1
Chris@0 50 assert_response :success
Chris@0 51 assert_template 'index'
Chris@0 52
Chris@0 53 assert assigns(:results).include?(Issue.find(8))
Chris@0 54 assert assigns(:results).include?(Issue.find(5))
Chris@0 55 assert_tag :dt, :attributes => { :class => /issue closed/ },
Chris@0 56 :child => { :tag => 'a', :content => /Closed/ }
Chris@0 57 end
Chris@0 58
Chris@0 59 def test_search_project_and_subprojects
Chris@0 60 get :index, :id => 1, :q => 'recipe subproject', :scope => 'subprojects', :submit => 'Search'
Chris@0 61 assert_response :success
Chris@0 62 assert_template 'index'
Chris@0 63 assert assigns(:results).include?(Issue.find(1))
Chris@0 64 assert assigns(:results).include?(Issue.find(5))
Chris@0 65 end
Chris@0 66
Chris@0 67 def test_search_without_searchable_custom_fields
Chris@0 68 CustomField.update_all "searchable = #{ActiveRecord::Base.connection.quoted_false}"
Chris@0 69
Chris@0 70 get :index, :id => 1
Chris@0 71 assert_response :success
Chris@0 72 assert_template 'index'
Chris@0 73 assert_not_nil assigns(:project)
Chris@0 74
Chris@0 75 get :index, :id => 1, :q => "can"
Chris@0 76 assert_response :success
Chris@0 77 assert_template 'index'
Chris@0 78 end
Chris@0 79
Chris@0 80 def test_search_with_searchable_custom_fields
Chris@0 81 get :index, :id => 1, :q => "stringforcustomfield"
Chris@0 82 assert_response :success
Chris@0 83 results = assigns(:results)
Chris@0 84 assert_not_nil results
Chris@0 85 assert_equal 1, results.size
Chris@0 86 assert results.include?(Issue.find(3))
Chris@0 87 end
Chris@0 88
Chris@0 89 def test_search_all_words
Chris@0 90 # 'all words' is on by default
Chris@0 91 get :index, :id => 1, :q => 'recipe updating saving'
Chris@0 92 results = assigns(:results)
Chris@0 93 assert_not_nil results
Chris@0 94 assert_equal 1, results.size
Chris@0 95 assert results.include?(Issue.find(3))
Chris@0 96 end
Chris@0 97
Chris@0 98 def test_search_one_of_the_words
Chris@0 99 get :index, :id => 1, :q => 'recipe updating saving', :submit => 'Search'
Chris@0 100 results = assigns(:results)
Chris@0 101 assert_not_nil results
Chris@0 102 assert_equal 3, results.size
Chris@0 103 assert results.include?(Issue.find(3))
Chris@0 104 end
Chris@0 105
Chris@0 106 def test_search_titles_only_without_result
Chris@0 107 get :index, :id => 1, :q => 'recipe updating saving', :all_words => '1', :titles_only => '1', :submit => 'Search'
Chris@0 108 results = assigns(:results)
Chris@0 109 assert_not_nil results
Chris@0 110 assert_equal 0, results.size
Chris@0 111 end
Chris@0 112
Chris@0 113 def test_search_titles_only
Chris@0 114 get :index, :id => 1, :q => 'recipe', :titles_only => '1', :submit => 'Search'
Chris@0 115 results = assigns(:results)
Chris@0 116 assert_not_nil results
Chris@0 117 assert_equal 2, results.size
Chris@0 118 end
Chris@0 119
Chris@0 120 def test_search_with_invalid_project_id
Chris@0 121 get :index, :id => 195, :q => 'recipe'
Chris@0 122 assert_response 404
Chris@0 123 assert_nil assigns(:results)
Chris@0 124 end
Chris@0 125
Chris@0 126 def test_quick_jump_to_issue
Chris@0 127 # issue of a public project
Chris@0 128 get :index, :q => "3"
Chris@0 129 assert_redirected_to 'issues/3'
Chris@0 130
Chris@0 131 # issue of a private project
Chris@0 132 get :index, :q => "4"
Chris@0 133 assert_response :success
Chris@0 134 assert_template 'index'
Chris@0 135 end
Chris@0 136
Chris@0 137 def test_large_integer
Chris@0 138 get :index, :q => '4615713488'
Chris@0 139 assert_response :success
Chris@0 140 assert_template 'index'
Chris@0 141 end
Chris@0 142
Chris@0 143 def test_tokens_with_quotes
Chris@0 144 get :index, :id => 1, :q => '"good bye" hello "bye bye"'
Chris@0 145 assert_equal ["good bye", "hello", "bye bye"], assigns(:tokens)
Chris@0 146 end
Chris@0 147 end