From 18b4cc865f4c6c9b7da05b8b044aeb562e097ecb Mon Sep 17 00:00:00 2001 From: ishikawa999 <14245262+ishikawa999@users.noreply.github.com> Date: Mon, 11 May 2026 16:22:05 +0900 Subject: [PATCH] Fix watchers section in sidebar incorrectly updated when watching a different issue via context menu. --- app/views/issues/show.html.erb | 2 +- app/views/watchers/_set_watcher.js.erb | 4 ++++ test/functional/watchers_controller_test.rb | 15 +++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/app/views/issues/show.html.erb b/app/views/issues/show.html.erb index d9524fbc1b..13d35cc82a 100644 --- a/app/views/issues/show.html.erb +++ b/app/views/issues/show.html.erb @@ -166,7 +166,7 @@ end %> <% if User.current.allowed_to?(:add_issue_watchers, @project) || (@issue.watchers.present? && User.current.allowed_to?(:view_issue_watchers, @project)) %> -
+
<%= render :partial => 'watchers/watchers', :locals => {:watched => @issue} %>
<% end %> diff --git a/app/views/watchers/_set_watcher.js.erb b/app/views/watchers/_set_watcher.js.erb index 4090ef6ce4..e57670d7f8 100644 --- a/app/views/watchers/_set_watcher.js.erb +++ b/app/views/watchers/_set_watcher.js.erb @@ -1,3 +1,7 @@ <% selector = ".#{watcher_css(watched)}" %> $("<%= selector %>").each(function(){$(this).replaceWith("<%= escape_javascript watcher_link(watched, user) %>")}); +<% if watched.first.is_a?(Issue) %> +$('#watchers[data-watchable-id="<%= watched.first.id %>"]').html('<%= escape_javascript(render(:partial => 'watchers/watchers', :locals => {:watched => watched.first})) %>'); +<% else %> $('#watchers').html('<%= escape_javascript(render(:partial => 'watchers/watchers', :locals => {:watched => watched.first})) %>'); +<% end %> diff --git a/test/functional/watchers_controller_test.rb b/test/functional/watchers_controller_test.rb index c73b847022..78983f63be 100644 --- a/test/functional/watchers_controller_test.rb +++ b/test/functional/watchers_controller_test.rb @@ -65,6 +65,21 @@ class WatchersControllerTest < Redmine::ControllerTest assert Issue.find(3).watched_by?(User.find(3)) end + def test_watch_an_issue_should_use_data_attribute_selector_for_watchers_sidebar + @request.session[:user_id] = 2 + post :watch, :params => {:object_type => 'issue', :object_id => '1'}, :xhr => true + assert_response :success + assert_include "$('#watchers[data-watchable-id=\"1\"]')", response.body + assert_not_include "$('#watchers').html(", response.body + end + + def test_watch_a_message_should_not_use_data_attribute_selector_for_watchers_sidebar + @request.session[:user_id] = 2 + post :watch, :params => {:object_type => 'message', :object_id => '1'}, :xhr => true + assert_response :success + assert_include "$('#watchers').html(", response.body + end + def test_watch_a_news_module_should_add_watcher @request.session[:user_id] = 7 assert_not_nil m = Project.find(1).enabled_module('news') -- 2.50.1 (Apple Git-155)