]> source.dussan.org Git - redmine.git/commitdiff
Merged r15609 (#23278).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 11 Jul 2016 18:10:01 +0000 (18:10 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 11 Jul 2016 18:10:01 +0000 (18:10 +0000)
git-svn-id: http://svn.redmine.org/redmine/branches/3.2-stable@15638 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 271586f493c27daa99db4d52544297c3a1dbe370..0afc524c6e23d3b17b45a636c037a1a17d33b0ed 100644 (file)
@@ -266,12 +266,13 @@ class MailHandlerTest < ActiveSupport::TestCase
   end
 
   def test_add_issue_with_cc
+    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