annotate test/unit/watcher_test.rb @ 1628:9c5f8e24dadc live tip

Quieten this cron script
author Chris Cannam
date Tue, 25 Aug 2020 11:38:49 +0100
parents dffacf8a6908
children
rev   line source
Chris@0 1 # Redmine - project management software
Chris@1494 2 # Copyright (C) 2006-2014 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@1517 59 assert_kind_of Array, watcher_users.collect{|w| w}
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@1517 64 User.where(:id => 1).update_all("firstname = ''")
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@1464 102 def test_any_watched_should_return_false_if_no_object_is_watched
Chris@1464 103 objects = (0..2).map {Issue.generate!}
Chris@1464 104
Chris@1464 105 assert_equal false, Watcher.any_watched?(objects, @user)
Chris@1464 106 end
Chris@1464 107
Chris@1464 108 def test_any_watched_should_return_true_if_one_object_is_watched
Chris@1464 109 objects = (0..2).map {Issue.generate!}
Chris@1464 110 objects.last.add_watcher(@user)
Chris@1464 111
Chris@1464 112 assert_equal true, Watcher.any_watched?(objects, @user)
Chris@1464 113 end
Chris@1464 114
Chris@1464 115 def test_any_watched_should_return_false_with_no_object
Chris@1464 116 assert_equal false, Watcher.any_watched?([], @user)
Chris@1464 117 end
Chris@1464 118
Chris@0 119 def test_recipients
Chris@0 120 @issue.watchers.delete_all
Chris@0 121 @issue.reload
Chris@909 122
Chris@0 123 assert @issue.watcher_recipients.empty?
Chris@0 124 assert @issue.add_watcher(@user)
Chris@0 125
Chris@441 126 @user.mail_notification = 'all'
Chris@441 127 @user.save!
Chris@0 128 @issue.reload
Chris@0 129 assert @issue.watcher_recipients.include?(@user.mail)
Chris@0 130
Chris@441 131 @user.mail_notification = 'none'
Chris@441 132 @user.save!
Chris@0 133 @issue.reload
Chris@441 134 assert !@issue.watcher_recipients.include?(@user.mail)
Chris@0 135 end
Chris@909 136
Chris@0 137 def test_unwatch
Chris@0 138 assert @issue.add_watcher(@user)
Chris@0 139 @issue.reload
Chris@909 140 assert_equal 1, @issue.remove_watcher(@user)
Chris@0 141 end
Chris@909 142
Chris@0 143 def test_prune
Chris@0 144 Watcher.delete_all("user_id = 9")
Chris@0 145 user = User.find(9)
Chris@909 146
Chris@0 147 # public
Chris@0 148 Watcher.create!(:watchable => Issue.find(1), :user => user)
Chris@0 149 Watcher.create!(:watchable => Issue.find(2), :user => user)
Chris@0 150 Watcher.create!(:watchable => Message.find(1), :user => user)
Chris@0 151 Watcher.create!(:watchable => Wiki.find(1), :user => user)
Chris@0 152 Watcher.create!(:watchable => WikiPage.find(2), :user => user)
Chris@909 153
Chris@0 154 # private project (id: 2)
Chris@0 155 Member.create!(:project => Project.find(2), :principal => user, :role_ids => [1])
Chris@0 156 Watcher.create!(:watchable => Issue.find(4), :user => user)
Chris@0 157 Watcher.create!(:watchable => Message.find(7), :user => user)
Chris@0 158 Watcher.create!(:watchable => Wiki.find(2), :user => user)
Chris@0 159 Watcher.create!(:watchable => WikiPage.find(3), :user => user)
Chris@909 160
Chris@0 161 assert_no_difference 'Watcher.count' do
Chris@0 162 Watcher.prune(:user => User.find(9))
Chris@0 163 end
Chris@909 164
Chris@0 165 Member.delete_all
Chris@909 166
Chris@0 167 assert_difference 'Watcher.count', -4 do
Chris@0 168 Watcher.prune(:user => User.find(9))
Chris@0 169 end
Chris@909 170
Chris@0 171 assert Issue.find(1).watched_by?(user)
Chris@0 172 assert !Issue.find(4).watched_by?(user)
Chris@0 173 end
Chris@1115 174
Chris@1115 175 def test_prune_all
Chris@1115 176 user = User.find(9)
Chris@1115 177 Watcher.new(:watchable => Issue.find(4), :user => User.find(9)).save(:validate => false)
Chris@1115 178
Chris@1115 179 assert Watcher.prune > 0
Chris@1115 180 assert !Issue.find(4).watched_by?(user)
Chris@1115 181 end
Chris@0 182 end