diff --git a/app/models/issue.rb b/app/models/issue.rb index 4edf4fa1b8..88c808321a 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -2025,8 +2025,8 @@ class Issue < ActiveRecord::Base end def add_auto_watcher - if author && - author.allowed_to?(:add_issue_watchers, project) && + if author&.active? && + author&.allowed_to?(:add_issue_watchers, project) && author.pref.auto_watch_on?('issue_created') && self.watcher_user_ids.exclude?(author.id) self.set_watcher(author, true) diff --git a/app/models/journal.rb b/app/models/journal.rb index 24c02dfbd3..4b4139a149 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -336,8 +336,8 @@ class Journal < ActiveRecord::Base end def add_watcher - if user && - user.allowed_to?(:add_issue_watchers, project) && + if user&.active? && + user&.allowed_to?(:add_issue_watchers, project) && user.pref.auto_watch_on?('issue_contributed_to') && !Watcher.any_watched?(Array.wrap(journalized), user) journalized.set_watcher(user, true) diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb index 5795d2bb1a..08bc50df86 100644 --- a/test/unit/issue_test.rb +++ b/test/unit/issue_test.rb @@ -3479,6 +3479,21 @@ class IssueTest < ActiveSupport::TestCase end end + def test_create_should_not_add_anonymous_as_watcher + Role.anonymous.add_permission!(:add_issue_watchers) + + user = User.anonymous + assert user.pref.auto_watch_on?('issue_contributed_to') + + journal = Journal.new(:journalized => Issue.first, :notes => 'notes', :user => user) + + assert_no_difference 'Watcher.count' do + assert journal.save + assert journal.valid? + assert journal.journalized.valid? + end + end + def test_like_should_escape_query issue = Issue.generate!(:subject => "asdf") r = Issue.like('as_f') diff --git a/test/unit/journal_test.rb b/test/unit/journal_test.rb index 511b164153..373de93a21 100644 --- a/test/unit/journal_test.rb +++ b/test/unit/journal_test.rb @@ -142,6 +142,21 @@ class JournalTest < ActiveSupport::TestCase end end + def test_create_should_not_add_anonymous_as_watcher + Role.anonymous.add_permission!(:add_issue_watchers) + + user = User.anonymous + assert user.pref.auto_watch_on?('issue_contributed_to') + + journal = Journal.new(:journalized => Issue.first, :notes => 'notes', :user => user) + + assert_no_difference 'Watcher.count' do + assert journal.save + assert journal.valid? + assert journal.journalized.valid? + end + end + def test_visible_scope_for_anonymous # Anonymous user should see issues of public projects only journals = Journal.visible(User.anonymous).to_a