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 / .svn / pristine / 08 / 08c1f1410c30c4d18ef6cbcbd8954d1721fb044b.svn-base @ 1298:4f746d8966dd

History | View | Annotate | Download (6.95 KB)

1 1295:622f24f53b42 Chris
# Redmine - project management software
2
# Copyright (C) 2006-2013  Jean-Philippe Lang
3
#
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
#
9
# 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
#
14
# 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
require File.expand_path('../../test_helper', __FILE__)
19
20
class WatchersControllerTest < ActionController::TestCase
21
  fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules,
22
           :issues, :trackers, :projects_trackers, :issue_statuses, :enumerations, :watchers
23
24
  def setup
25
    User.current = nil
26
  end
27
28
  def test_watch_a_single_object
29
    @request.session[:user_id] = 3
30
    assert_difference('Watcher.count') do
31
      xhr :post, :watch, :object_type => 'issue', :object_id => '1'
32
      assert_response :success
33
      assert_include '$(".issue-1-watcher")', response.body
34
    end
35
    assert Issue.find(1).watched_by?(User.find(3))
36
  end
37
38
  def test_watch_a_collection_with_a_single_object
39
    @request.session[:user_id] = 3
40
    assert_difference('Watcher.count') do
41
      xhr :post, :watch, :object_type => 'issue', :object_id => ['1']
42
      assert_response :success
43
      assert_include '$(".issue-1-watcher")', response.body
44
    end
45
    assert Issue.find(1).watched_by?(User.find(3))
46
  end
47
48
  def test_watch_a_collection_with_multiple_objects
49
    @request.session[:user_id] = 3
50
    assert_difference('Watcher.count', 2) do
51
      xhr :post, :watch, :object_type => 'issue', :object_id => ['1', '3']
52
      assert_response :success
53
      assert_include '$(".issue-bulk-watcher")', response.body
54
    end
55
    assert Issue.find(1).watched_by?(User.find(3))
56
    assert Issue.find(3).watched_by?(User.find(3))
57
  end
58
59
  def test_watch_should_be_denied_without_permission
60
    Role.find(2).remove_permission! :view_issues
61
    @request.session[:user_id] = 3
62
    assert_no_difference('Watcher.count') do
63
      xhr :post, :watch, :object_type => 'issue', :object_id => '1'
64
      assert_response 403
65
    end
66
  end
67
68
  def test_watch_invalid_class_should_respond_with_404
69
    @request.session[:user_id] = 3
70
    assert_no_difference('Watcher.count') do
71
      xhr :post, :watch, :object_type => 'foo', :object_id => '1'
72
      assert_response 404
73
    end
74
  end
75
76
  def test_watch_invalid_object_should_respond_with_404
77
    @request.session[:user_id] = 3
78
    assert_no_difference('Watcher.count') do
79
      xhr :post, :watch, :object_type => 'issue', :object_id => '999'
80
      assert_response 404
81
    end
82
  end
83
84
  def test_unwatch
85
    @request.session[:user_id] = 3
86
    assert_difference('Watcher.count', -1) do
87
      xhr :delete, :unwatch, :object_type => 'issue', :object_id => '2'
88
      assert_response :success
89
      assert_include '$(".issue-2-watcher")', response.body
90
    end
91
    assert !Issue.find(1).watched_by?(User.find(3))
92
  end
93
94
  def test_unwatch_a_collection_with_multiple_objects
95
    @request.session[:user_id] = 3
96
    Watcher.create!(:user_id => 3, :watchable => Issue.find(1))
97
    Watcher.create!(:user_id => 3, :watchable => Issue.find(3))
98
99
    assert_difference('Watcher.count', -2) do
100
      xhr :delete, :unwatch, :object_type => 'issue', :object_id => ['1', '3']
101
      assert_response :success
102
      assert_include '$(".issue-bulk-watcher")', response.body
103
    end
104
    assert !Issue.find(1).watched_by?(User.find(3))
105
    assert !Issue.find(3).watched_by?(User.find(3))
106
  end
107
108
  def test_new
109
    @request.session[:user_id] = 2
110
    xhr :get, :new, :object_type => 'issue', :object_id => '2'
111
    assert_response :success
112
    assert_match /ajax-modal/, response.body
113
  end
114
115
  def test_new_for_new_record_with_project_id
116
    @request.session[:user_id] = 2
117
    xhr :get, :new, :project_id => 1
118
    assert_response :success
119
    assert_equal Project.find(1), assigns(:project)
120
    assert_match /ajax-modal/, response.body
121
  end
122
123
  def test_new_for_new_record_with_project_identifier
124
    @request.session[:user_id] = 2
125
    xhr :get, :new, :project_id => 'ecookbook'
126
    assert_response :success
127
    assert_equal Project.find(1), assigns(:project)
128
    assert_match /ajax-modal/, response.body
129
  end
130
131
  def test_create
132
    @request.session[:user_id] = 2
133
    assert_difference('Watcher.count') do
134
      xhr :post, :create, :object_type => 'issue', :object_id => '2', :watcher => {:user_id => '4'}
135
      assert_response :success
136
      assert_match /watchers/, response.body
137
      assert_match /ajax-modal/, response.body
138
    end
139
    assert Issue.find(2).watched_by?(User.find(4))
140
  end
141
142
  def test_create_multiple
143
    @request.session[:user_id] = 2
144
    assert_difference('Watcher.count', 2) do
145
      xhr :post, :create, :object_type => 'issue', :object_id => '2', :watcher => {:user_ids => ['4', '7']}
146
      assert_response :success
147
      assert_match /watchers/, response.body
148
      assert_match /ajax-modal/, response.body
149
    end
150
    assert Issue.find(2).watched_by?(User.find(4))
151
    assert Issue.find(2).watched_by?(User.find(7))
152
  end
153
154
  def test_autocomplete_on_watchable_creation
155
    @request.session[:user_id] = 2
156
    xhr :get, :autocomplete_for_user, :q => 'mi', :project_id => 'ecookbook'
157
    assert_response :success
158
    assert_select 'input', :count => 4
159
    assert_select 'input[name=?][value=1]', 'watcher[user_ids][]'
160
    assert_select 'input[name=?][value=2]', 'watcher[user_ids][]'
161
    assert_select 'input[name=?][value=8]', 'watcher[user_ids][]'
162
    assert_select 'input[name=?][value=9]', 'watcher[user_ids][]'
163
  end
164
165
  def test_autocomplete_on_watchable_update
166
    @request.session[:user_id] = 2
167
    xhr :get, :autocomplete_for_user, :q => 'mi', :object_id => '2' , :object_type => 'issue', :project_id => 'ecookbook'
168
    assert_response :success
169
    assert_select 'input', :count => 3
170
    assert_select 'input[name=?][value=2]', 'watcher[user_ids][]'
171
    assert_select 'input[name=?][value=8]', 'watcher[user_ids][]'
172
    assert_select 'input[name=?][value=9]', 'watcher[user_ids][]'
173
174
  end
175
176
  def test_append
177
    @request.session[:user_id] = 2
178
    assert_no_difference 'Watcher.count' do
179
      xhr :post, :append, :watcher => {:user_ids => ['4', '7']}, :project_id => 'ecookbook'
180
      assert_response :success
181
      assert_include 'watchers_inputs', response.body
182
      assert_include 'issue[watcher_user_ids][]', response.body
183
    end
184
  end
185
186
  def test_remove_watcher
187
    @request.session[:user_id] = 2
188
    assert_difference('Watcher.count', -1) do
189
      xhr :delete, :destroy, :object_type => 'issue', :object_id => '2', :user_id => '3'
190
      assert_response :success
191
      assert_match /watchers/, response.body
192
    end
193
    assert !Issue.find(2).watched_by?(User.find(3))
194
  end
195
end