From 42f7700189f8542e12f8ccd301fc65b87370a71c Mon Sep 17 00:00:00 2001
From: Ivan Kabluchkov <ikabluchkov@gmail.com>
Date: Sun, 25 Oct 2026 11:07:16 +0300
Subject: [PATCH] Set assignee as watcher based on issue_assigned_to_me
 preference

---
 app/models/issue.rb     |  7 +++++++
 test/unit/issue_test.rb | 43 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 50 insertions(+)

diff --git a/app/models/issue.rb b/app/models/issue.rb
index ba1f97e29..90ca33a13 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -2116,6 +2116,13 @@ class Issue < ApplicationRecord
         self.watcher_user_ids.exclude?(author.id)
       self.set_watcher(author, true)
     end
+
+    if assigned_to.is_a?(User) &&
+        assigned_to.active? &&
+        assigned_to.pref.auto_watch_on?('issue_assigned_to_me') &&
+        self.watcher_user_ids.exclude?(assigned_to.id)
+      self.set_watcher(assigned_to, true)
+    end
   end
 
   def send_notification
diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb
index c9475b5da..dc12ce7e1 100644
--- a/test/unit/issue_test.rb
+++ b/test/unit/issue_test.rb
@@ -3658,6 +3658,49 @@ class IssueTest < ActiveSupport::TestCase
     end
   end
 
+  def test_create_should_add_assignee_as_watcher
+    user = User.first
+    user.pref.auto_watch_on = []
+    user.pref.save
+    assignee = User.find(2)
+    assignee.pref.auto_watch_on = ['issue_assigned_to_me']
+    assignee.pref.save
+
+    issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => user.id, :assigned_to => assignee, :subject => 'test_create_should_add_assignee_as_watcher')
+
+    assert_difference 'Watcher.count', 1 do
+      assert_equal true, issue.save
+    end
+    assert issue.watched_by?(assignee)
+  end
+
+  def test_create_should_not_add_assignee_as_watcher_without_preference
+    user = User.first
+    user.pref.auto_watch_on = []
+    user.pref.save
+    assignee = User.find(2)
+    assignee.pref.auto_watch_on = []
+    assignee.pref.save
+
+    issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => user.id, :assigned_to => assignee, :subject => 'test_create_should_not_add_assignee_as_watcher')
+
+    assert_no_difference 'Watcher.count' do
+      assert_equal true, issue.save
+    end
+  end
+
+  def test_create_should_add_assignee_watcher_only_once_when_author_is_assignee
+    user = User.first
+    user.pref.auto_watch_on = %w[issue_created issue_assigned_to_me]
+    user.pref.save
+
+    issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => user.id, :assigned_to => user, :subject => 'test_create_should_add_assignee_watcher_only_once')
+
+    assert_difference 'Watcher.count', 1 do
+      assert_equal true, issue.save
+    end
+  end
+
   def test_change_of_project_parent_should_update_shared_versions_with_derived_priorities
     with_settings('parent_issue_priority' => 'derived') do
       parent = Project.find 1
-- 
2.53.0

