Replace Ultrasphinx with ThinkingSphinx
[gitorious:pkong23s-mainline.git] / test / functional / searches_controller_test.rb
1 # encoding: utf-8
2 #--
3 #   Copyright (C) 2012 Gitorious AS
4 #   Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
5 #
6 #   This program is free software: you can redistribute it and/or modify
7 #   it under the terms of the GNU Affero General Public License as published by
8 #   the Free Software Foundation, either version 3 of the License, or
9 #   (at your option) any later version.
10 #
11 #   This program is distributed in the hope that it will be useful,
12 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
13 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 #   GNU Affero General Public License for more details.
15 #
16 #   You should have received a copy of the GNU Affero General Public License
17 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 #++
19
20 require File.dirname(__FILE__) + "/../test_helper"
21
22 class SearchesControllerTest < ActionController::TestCase
23   should_render_in_global_context
24   should_enforce_ssl_for(:get, :show)
25
26   context "#show" do
27     should "search for the given query" do
28       search_result = [projects(:johans)]
29
30       ThinkingSphinx.expects(:search).with({
31         :query => "foo", :page => 1, :per_page => 30
32       }).returns(search_result)
33
34       search_result.expects(:total_entries).returns(1)
35       search_result.expects(:query_time).returns(42)
36
37       get :show, :q => "foo"
38       assert_equal search_result, assigns(:all_results)
39       assert_equal [projects(:johans)], assigns(:results)
40     end
41
42     should "not search if there is no :q param" do
43       ThinkingSphinx.expects(:search).never
44       get :show, :q => ""
45       assert_nil assigns(:results)
46     end
47
48 #    should_scope_pagination_to(:show, nil, "search results", :delete_all => false)
49   end
50
51   context "With private repositories" do
52     setup do
53       GitoriousConfig["use_ssl"] = false
54       @project = Project.first
55       search_results = Project.all.concat(Repository.all)
56       enable_private_repositories
57       ThinkingSphinx.stubs(:search).returns(search_results)
58
59       search_results.stubs(:total_pages).returns(1)
60       search_results.stubs(:total_entries).returns(search_results.length)
61       search_results.stubs(:query_time).returns(42)
62     end
63
64     should "filter out unauthorized results" do
65       get :show, :q => "gitorious"
66       assert_response :success
67       assert(assigns(:results).none? do |r|
68         (r.respond_to?(:project) ? r.project : r) == @project
69       end)
70       assert_match /Found 4 results/, @response.body
71     end
72
73     should "not filter out authorized results" do
74       login_as :johan
75       get :show, :q => "gitorious"
76
77       assert(assigns(:results).any? do |r|
78         (r.respond_to?(:project) ? r.project : r) == @project
79       end)
80       assert_match /Found 8 results/, @response.body
81     end
82    end
83 end