annotate test/unit/watcher_test.rb @ 1480:75fd8eace091 issue_556

Close obsolete branch issue_556
author Chris Cannam
date Sat, 13 Jul 2013 15:26:30 +0100
parents 433d4f72a19b
children 622f24f53b42 261b3d9a4903
rev   line source
Chris@0 1 # Redmine - project management software
Chris@1115 2 # Copyright (C) 2006-2012 Jean-Philippe Lang
Chris@0 3 #
Chris@0 4 # This program is free software; you can redistribute it and/or
Chris@0 5 # modify it under the terms of the GNU General Public License
Chris@0 6 # as published by the Free Software Foundation; either version 2
Chris@0 7 # of the License, or (at your option) any later version.
Chris@909 8 #
Chris@0 9 # This program is distributed in the hope that it will be useful,
Chris@0 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0 12 # GNU General Public License for more details.
Chris@909 13 #
Chris@0 14 # You should have received a copy of the GNU General Public License
Chris@0 15 # along with this program; if not, write to the Free Software
Chris@0 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Chris@0 17
Chris@119 18 require File.expand_path('../../test_helper', __FILE__)
Chris@0 19
Chris@0 20 class WatcherTest < ActiveSupport::TestCase
Chris@0 21 fixtures :projects, :users, :members, :member_roles, :roles, :enabled_modules,
Chris@1115 22 :issues, :issue_statuses, :enumerations, :trackers, :projects_trackers,
Chris@0 23 :boards, :messages,
Chris@0 24 :wikis, :wiki_pages,
Chris@0 25 :watchers
Chris@0 26
Chris@0 27 def setup
Chris@0 28 @user = User.find(1)
Chris@0 29 @issue = Issue.find(1)
Chris@0 30 end
Chris@909 31
Chris@1115 32 def test_validate
Chris@1115 33 user = User.find(5)
Chris@1115 34 assert !user.active?
Chris@1115 35 watcher = Watcher.new(:user_id => user.id)
Chris@1115 36 assert !watcher.save
Chris@1115 37 end
Chris@1115 38
Chris@0 39 def test_watch
Chris@0 40 assert @issue.add_watcher(@user)
Chris@0 41 @issue.reload
Chris@0 42 assert @issue.watchers.detect { |w| w.user == @user }
Chris@0 43 end
Chris@909 44
Chris@0 45 def test_cant_watch_twice
Chris@0 46 assert @issue.add_watcher(@user)
Chris@0 47 assert !@issue.add_watcher(@user)
Chris@0 48 end
Chris@909 49
Chris@0 50 def test_watched_by
Chris@0 51 assert @issue.add_watcher(@user)
Chris@0 52 @issue.reload
Chris@0 53 assert @issue.watched_by?(@user)
Chris@0 54 assert Issue.watched_by(@user).include?(@issue)
Chris@0 55 end
Chris@909 56
Chris@441 57 def test_watcher_users
Chris@441 58 watcher_users = Issue.find(2).watcher_users
Chris@441 59 assert_kind_of Array, watcher_users
Chris@441 60 assert_kind_of User, watcher_users.first
Chris@441 61 end
Chris@909 62
Chris@441 63 def test_watcher_users_should_not_validate_user
Chris@441 64 User.update_all("firstname = ''", "id=1")
Chris@441 65 @user.reload
Chris@441 66 assert !@user.valid?
Chris@909 67
Chris@441 68 issue = Issue.new(:project => Project.find(1), :tracker_id => 1, :subject => "test", :author => User.find(2))
Chris@441 69 issue.watcher_users << @user
Chris@441 70 issue.save!
Chris@441 71 assert issue.watched_by?(@user)
Chris@441 72 end
Chris@909 73
Chris@0 74 def test_watcher_user_ids
Chris@441 75 assert_equal [1, 3], Issue.find(2).watcher_user_ids.sort
Chris@441 76 end
Chris@909 77
Chris@441 78 def test_watcher_user_ids=
Chris@0 79 issue = Issue.new
Chris@0 80 issue.watcher_user_ids = ['1', '3']
Chris@0 81 assert issue.watched_by?(User.find(1))
Chris@0 82 end
Chris@909 83
Chris@1115 84 def test_watcher_user_ids_should_make_ids_uniq
Chris@1115 85 issue = Issue.new(:project => Project.find(1), :tracker_id => 1, :subject => "test", :author => User.find(2))
Chris@1115 86 issue.watcher_user_ids = ['1', '3', '1']
Chris@1115 87 issue.save!
Chris@1115 88 assert_equal 2, issue.watchers.count
Chris@1115 89 end
Chris@1115 90
Chris@441 91 def test_addable_watcher_users
Chris@441 92 addable_watcher_users = @issue.addable_watcher_users
Chris@441 93 assert_kind_of Array, addable_watcher_users
Chris@441 94 assert_kind_of User, addable_watcher_users.first
Chris@441 95 end
Chris@909 96
Chris@441 97 def test_addable_watcher_users_should_not_include_user_that_cannot_view_the_object
Chris@441 98 issue = Issue.new(:project => Project.find(1), :is_private => true)
Chris@441 99 assert_nil issue.addable_watcher_users.detect {|user| !issue.visible?(user)}
Chris@441 100 end
Chris@909 101
Chris@0 102 def test_recipients
Chris@0 103 @issue.watchers.delete_all
Chris@0 104 @issue.reload
Chris@909 105
Chris@0 106 assert @issue.watcher_recipients.empty?
Chris@0 107 assert @issue.add_watcher(@user)
Chris@0 108
Chris@441 109 @user.mail_notification = 'all'
Chris@441 110 @user.save!
Chris@0 111 @issue.reload
Chris@0 112 assert @issue.watcher_recipients.include?(@user.mail)
Chris@0 113
Chris@441 114 @user.mail_notification = 'none'
Chris@441 115 @user.save!
Chris@0 116 @issue.reload
Chris@441 117 assert !@issue.watcher_recipients.include?(@user.mail)
Chris@0 118 end
Chris@909 119
Chris@0 120 def test_unwatch
Chris@0 121 assert @issue.add_watcher(@user)
Chris@0 122 @issue.reload
Chris@909 123 assert_equal 1, @issue.remove_watcher(@user)
Chris@0 124 end
Chris@909 125
Chris@0 126 def test_prune
Chris@0 127 Watcher.delete_all("user_id = 9")
Chris@0 128 user = User.find(9)
Chris@909 129
Chris@0 130 # public
Chris@0 131 Watcher.create!(:watchable => Issue.find(1), :user => user)
Chris@0 132 Watcher.create!(:watchable => Issue.find(2), :user => user)
Chris@0 133 Watcher.create!(:watchable => Message.find(1), :user => user)
Chris@0 134 Watcher.create!(:watchable => Wiki.find(1), :user => user)
Chris@0 135 Watcher.create!(:watchable => WikiPage.find(2), :user => user)
Chris@909 136
Chris@0 137 # private project (id: 2)
Chris@0 138 Member.create!(:project => Project.find(2), :principal => user, :role_ids => [1])
Chris@0 139 Watcher.create!(:watchable => Issue.find(4), :user => user)
Chris@0 140 Watcher.create!(:watchable => Message.find(7), :user => user)
Chris@0 141 Watcher.create!(:watchable => Wiki.find(2), :user => user)
Chris@0 142 Watcher.create!(:watchable => WikiPage.find(3), :user => user)
Chris@909 143
Chris@0 144 assert_no_difference 'Watcher.count' do
Chris@0 145 Watcher.prune(:user => User.find(9))
Chris@0 146 end
Chris@909 147
Chris@0 148 Member.delete_all
Chris@909 149
Chris@0 150 assert_difference 'Watcher.count', -4 do
Chris@0 151 Watcher.prune(:user => User.find(9))
Chris@0 152 end
Chris@909 153
Chris@0 154 assert Issue.find(1).watched_by?(user)
Chris@0 155 assert !Issue.find(4).watched_by?(user)
Chris@0 156 end
Chris@1115 157
Chris@1115 158 def test_prune_all
Chris@1115 159 user = User.find(9)
Chris@1115 160 Watcher.new(:watchable => Issue.find(4), :user => User.find(9)).save(:validate => false)
Chris@1115 161
Chris@1115 162 assert Watcher.prune > 0
Chris@1115 163 assert !Issue.find(4).watched_by?(user)
Chris@1115 164 end
Chris@0 165 end