To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / test / unit / .svn / text-base / search_test.rb.svn-base @ 441:cbce1fd3b1b7

History | View | Annotate | Download (4.49 KB)

1 441:cbce1fd3b1b7 Chris
# Redmine - project management software
2
# Copyright (C) 2006-2011  Jean-Philippe Lang
3 0:513646585e45 Chris
#
4
# This program is free software; you can redistribute it and/or
5
# modify it under the terms of the GNU General Public License
6
# as published by the Free Software Foundation; either version 2
7
# of the License, or (at your option) any later version.
8 441:cbce1fd3b1b7 Chris
#
9 0:513646585e45 Chris
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13 441:cbce1fd3b1b7 Chris
#
14 0:513646585e45 Chris
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17
18 119:8661b858af72 Chris
require File.expand_path('../../test_helper', __FILE__)
19 0:513646585e45 Chris
20
class SearchTest < ActiveSupport::TestCase
21
  fixtures :users,
22 441:cbce1fd3b1b7 Chris
           :members,
23 0:513646585e45 Chris
           :member_roles,
24
           :projects,
25
           :roles,
26
           :enabled_modules,
27
           :issues,
28
           :trackers,
29
           :journals,
30
           :journal_details,
31
           :repositories,
32
           :changesets
33
34
  def setup
35
    @project = Project.find(1)
36
    @issue_keyword = '%unable to print recipes%'
37
    @issue = Issue.find(1)
38
    @changeset_keyword = '%very first commit%'
39
    @changeset = Changeset.find(100)
40
  end
41 441:cbce1fd3b1b7 Chris
42 0:513646585e45 Chris
  def test_search_by_anonymous
43
    User.current = nil
44 441:cbce1fd3b1b7 Chris
45 0:513646585e45 Chris
    r = Issue.search(@issue_keyword).first
46
    assert r.include?(@issue)
47
    r = Changeset.search(@changeset_keyword).first
48
    assert r.include?(@changeset)
49 441:cbce1fd3b1b7 Chris
50 0:513646585e45 Chris
    # Removes the :view_changesets permission from Anonymous role
51
    remove_permission Role.anonymous, :view_changesets
52 441:cbce1fd3b1b7 Chris
53 0:513646585e45 Chris
    r = Issue.search(@issue_keyword).first
54
    assert r.include?(@issue)
55
    r = Changeset.search(@changeset_keyword).first
56
    assert !r.include?(@changeset)
57 441:cbce1fd3b1b7 Chris
58 0:513646585e45 Chris
    # Make the project private
59
    @project.update_attribute :is_public, false
60
    r = Issue.search(@issue_keyword).first
61
    assert !r.include?(@issue)
62
    r = Changeset.search(@changeset_keyword).first
63
    assert !r.include?(@changeset)
64
  end
65 441:cbce1fd3b1b7 Chris
66 0:513646585e45 Chris
  def test_search_by_user
67
    User.current = User.find_by_login('rhill')
68
    assert User.current.memberships.empty?
69 441:cbce1fd3b1b7 Chris
70 0:513646585e45 Chris
    r = Issue.search(@issue_keyword).first
71
    assert r.include?(@issue)
72
    r = Changeset.search(@changeset_keyword).first
73
    assert r.include?(@changeset)
74 441:cbce1fd3b1b7 Chris
75 0:513646585e45 Chris
    # Removes the :view_changesets permission from Non member role
76
    remove_permission Role.non_member, :view_changesets
77 441:cbce1fd3b1b7 Chris
78 0:513646585e45 Chris
    r = Issue.search(@issue_keyword).first
79
    assert r.include?(@issue)
80
    r = Changeset.search(@changeset_keyword).first
81
    assert !r.include?(@changeset)
82 441:cbce1fd3b1b7 Chris
83 0:513646585e45 Chris
    # Make the project private
84
    @project.update_attribute :is_public, false
85
    r = Issue.search(@issue_keyword).first
86
    assert !r.include?(@issue)
87
    r = Changeset.search(@changeset_keyword).first
88
    assert !r.include?(@changeset)
89
  end
90 441:cbce1fd3b1b7 Chris
91 0:513646585e45 Chris
  def test_search_by_allowed_member
92
    User.current = User.find_by_login('jsmith')
93
    assert User.current.projects.include?(@project)
94 441:cbce1fd3b1b7 Chris
95 0:513646585e45 Chris
    r = Issue.search(@issue_keyword).first
96
    assert r.include?(@issue)
97
    r = Changeset.search(@changeset_keyword).first
98
    assert r.include?(@changeset)
99
100
    # Make the project private
101
    @project.update_attribute :is_public, false
102
    r = Issue.search(@issue_keyword).first
103
    assert r.include?(@issue)
104
    r = Changeset.search(@changeset_keyword).first
105
    assert r.include?(@changeset)
106
  end
107
108
  def test_search_by_unallowed_member
109
    # Removes the :view_changesets permission from user's and non member role
110
    remove_permission Role.find(1), :view_changesets
111
    remove_permission Role.non_member, :view_changesets
112 441:cbce1fd3b1b7 Chris
113 0:513646585e45 Chris
    User.current = User.find_by_login('jsmith')
114
    assert User.current.projects.include?(@project)
115 441:cbce1fd3b1b7 Chris
116 0:513646585e45 Chris
    r = Issue.search(@issue_keyword).first
117
    assert r.include?(@issue)
118
    r = Changeset.search(@changeset_keyword).first
119
    assert !r.include?(@changeset)
120
121
    # Make the project private
122
    @project.update_attribute :is_public, false
123
    r = Issue.search(@issue_keyword).first
124
    assert r.include?(@issue)
125
    r = Changeset.search(@changeset_keyword).first
126
    assert !r.include?(@changeset)
127
  end
128 441:cbce1fd3b1b7 Chris
129 0:513646585e45 Chris
  def test_search_issue_with_multiple_hits_in_journals
130
    i = Issue.find(1)
131
    assert_equal 2, i.journals.count(:all, :conditions => "notes LIKE '%notes%'")
132 441:cbce1fd3b1b7 Chris
133 0:513646585e45 Chris
    r = Issue.search('%notes%').first
134
    assert_equal 1, r.size
135
    assert_equal i, r.first
136
  end
137 441:cbce1fd3b1b7 Chris
138 0:513646585e45 Chris
  private
139 441:cbce1fd3b1b7 Chris
140 0:513646585e45 Chris
  def remove_permission(role, permission)
141
    role.permissions = role.permissions - [ permission ]
142
    role.save
143
  end
144
end