]> source.dussan.org Git - redmine.git/commitdiff
When creating issues by receiving an email, watchers created via CC in the mail don...
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 9 Jul 2016 03:15:32 +0000 (03:15 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 9 Jul 2016 03:15:32 +0000 (03:15 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@15609 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/plugins/acts_as_watchable/lib/acts_as_watchable.rb
test/unit/mail_handler_test.rb
test/unit/watcher_test.rb

index 19af8e56cb72974ed81d0b1137812dacb0b4bfd5..4bbba854a7ef9aacf27d6ede3e800d81d21f29e7 100644 (file)
@@ -40,12 +40,16 @@ module Redmine
 
         # Adds user as a watcher
         def add_watcher(user)
+          # Rails does not reset the has_many :through association
+          watcher_users.reset
           self.watchers << Watcher.new(:user => user)
         end
 
         # Removes user from the watchers list
         def remove_watcher(user)
           return nil unless user && user.is_a?(User)
+          # Rails does not reset the has_many :through association
+          watcher_users.reset
           watchers.where(:user_id => user.id).delete_all
         end
 
index 07d579a5dec0c3c5a25a787a1c22089ba2c735bd..c1afdaebd1a2bdda93ab1cb41504afe0570ddda9 100644 (file)
@@ -277,12 +277,13 @@ class MailHandlerTest < ActiveSupport::TestCase
   end
 
   def test_add_issue_should_add_cc_as_watchers
+    user = User.find_by_mail('dlopper@somenet.foo')
     issue = submit_email('ticket_with_cc.eml', :issue => {:project => 'ecookbook'})
     assert issue.is_a?(Issue)
     assert !issue.new_record?
-    issue.reload
-    assert issue.watched_by?(User.find_by_mail('dlopper@somenet.foo'))
+    assert issue.watched_by?(user)
     assert_equal 1, issue.watcher_user_ids.size
+    assert_include user, issue.watcher_users.to_a
   end
 
   def test_add_issue_from_additional_email_address
index f4d91794d6e8d611bb8c8f37e6feac8170db4692..8ffca148ac02d7ec5b2b56f3683f83a11d2509ca 100644 (file)
@@ -60,6 +60,15 @@ class WatcherTest < ActiveSupport::TestCase
     assert_kind_of User, watcher_users.first
   end
 
+  def test_watcher_users_should_be_reloaded_after_adding_a_watcher
+    issue = Issue.find(2)
+    user = User.generate!
+
+    assert_difference 'issue.watcher_users.to_a.size' do
+      issue.add_watcher user
+    end
+  end
+
   def test_watcher_users_should_not_validate_user
     User.where(:id => 1).update_all("firstname = ''")
     @user.reload