summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Balteanu <marius.balteanu@zitec.com>2024-05-11 08:35:27 +0000
committerMarius Balteanu <marius.balteanu@zitec.com>2024-05-11 08:35:27 +0000
commit47099ccd3a6aa54c59541f87e98a88358021be2a (patch)
treec330c337e7a73e50b7d8f890feb3792e40f20d53
parent6d89e6a9ed6c2b62e84cacf3fabc856bb71da154 (diff)
downloadredmine-47099ccd3a6aa54c59541f87e98a88358021be2a.tar.gz
redmine-47099ccd3a6aa54c59541f87e98a88358021be2a.zip
Fixes issue list filter "Watched by: me" only shows issues watched via group for projects with the @view_issue_watchers@ permission (#40412).
git-svn-id: https://svn.redmine.org/redmine/trunk@22819 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/issue_query.rb4
-rw-r--r--test/unit/query_test.rb11
2 files changed, 11 insertions, 4 deletions
diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb
index 0895e8074..687a8bdba 100644
--- a/app/models/issue_query.rb
+++ b/app/models/issue_query.rb
@@ -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} " +
diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb
index cf11bf10e..2aa10c5e9 100644
--- a/test/unit/query_test.rb
+++ b/test/unit/query_test.rb
@@ -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)