]> source.dussan.org Git - redmine.git/commitdiff
Fixes issue list filter "Watched by: me" only shows issues watched via group for...
authorMarius Balteanu <marius.balteanu@zitec.com>
Sat, 11 May 2024 08:35:27 +0000 (08:35 +0000)
committerMarius Balteanu <marius.balteanu@zitec.com>
Sat, 11 May 2024 08:35:27 +0000 (08:35 +0000)
git-svn-id: https://svn.redmine.org/redmine/trunk@22819 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/issue_query.rb
test/unit/query_test.rb

index 0895e80749c4139917748b35fd98dbdb7f758f73..687a8bdba90d7e6e2ba36e66ed51f4548b6e00e8 100644 (file)
@@ -551,7 +551,9 @@ class IssueQuery < Query
 
   def sql_for_watcher_id_field(field, operator, value)
     db_table = Watcher.table_name
-    me, others = value.partition {|id| ['0', User.current.id.to_s].include?(id)}
+    me_ids = [0, User.current.id]
+    me_ids = me_ids.concat(User.current.groups.pluck(:id))
+    me, others = value.partition {|id| me_ids.include?(id.to_i)}
     sql =
       if others.any?
         "SELECT #{Issue.table_name}.id FROM #{Issue.table_name} " +
index cf11bf10e4c4e7d7c5a066743ff6afafaee502d3..2aa10c5e99f3e6af00d22f560d4b9c157b303093 100644 (file)
@@ -1376,7 +1376,7 @@ class QueryTest < ActiveSupport::TestCase
     assert_equal Project.where(parent_id: bookmarks).ids.sort, result.map(&:id).sort
   end
 
-  def test_filter_watched_issues
+  def test_filter_watched_issues_by_user
     User.current = User.find(1)
     query =
       IssueQuery.new(
@@ -1384,7 +1384,7 @@ class QueryTest < ActiveSupport::TestCase
         :filters => {
           'watcher_id' => {
             :operator => '=',
-            :values => ['me']
+            :values => [User.current.id]
           }
         }
       )
@@ -1394,13 +1394,17 @@ class QueryTest < ActiveSupport::TestCase
     assert_equal Issue.visible.watched_by(User.current).sort_by(&:id), result.sort_by(&:id)
   end
 
-  def test_filter_watched_issues_with_groups_also
+  def test_filter_watched_issues_by_me_should_include_user_groups
     user = User.find(2)
     group = Group.find(10)
     group.users << user
     Issue.find(3).add_watcher(user)
     Issue.find(7).add_watcher(group)
+    manager = Role.find(1)
+    # view_issue_watchers permission is not required to see watched issues by current user or user groups
+    manager.remove_permission! :view_issue_watchers
     User.current = user
+
     query =
       IssueQuery.new(
         :name => '_',
@@ -1412,6 +1416,7 @@ class QueryTest < ActiveSupport::TestCase
         }
       )
     result = find_issues_with_query(query)
+
     assert_not_nil result
     assert !result.empty?
     assert_equal [3, 7], result.sort_by(&:id).pluck(:id)