From 198be19e4bdc0d78ea75767cfab543a915d2ec6f Mon Sep 17 00:00:00 2001 From: Ko Nagase Date: Fri, 27 May 2022 13:23:29 +0000 Subject: Patch for task/58 --- app/models/issue_query.rb | 14 ++++++++++++++ test/functional/issues_controller_test.rb | 3 ++- test/unit/query_test.rb | 16 ++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb index 45ffcb57c..e8c953ce5 100644 --- a/app/models/issue_query.rb +++ b/app/models/issue_query.rb @@ -709,6 +709,20 @@ class IssueQuery < Query end end + def sql_for_tracker_id_field(field, operator, value) + if operator == "=" + # accepts a comma separated list of ids + ids = value.join(",").scan(/\d+/).map(&:to_i) + if ids.present? + "tracker_id IN (#{ids.join(",")})" + else + "1=0" + end + else + sql_for_field("tracker_id", operator, value, Issue.table_name, "tracker_id") + end + end + def sql_for_relations(field, operator, value, options={}) relation_options = IssueRelation::TYPES[field] return relation_options unless relation_options diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index 9b1842e0d..3d8c5a1ee 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -227,7 +227,8 @@ class IssuesControllerTest < Redmine::ControllerTest }, 'tracker_id' => { '3' => {:op => '=', :values => ['3']}, - '=3' => {:op => '=', :values => ['3']} + '=3' => {:op => '=', :values => ['3']}, + '=1,2,3' => {:op => '=', :values => ['1,2,3']} }, 'start_date' => { '2011-10-12' => {:op => '=', :values => ['2011-10-12']}, diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index d6f7922a1..6044a03bb 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -769,6 +769,22 @@ class QueryTest < ActiveSupport::TestCase query.statement end + def test_filter_on_tracker_id + query = IssueQuery.new(:name => '_') + + query.filters = {'tracker_id' => {:operator => '=', :values => ['1']}} + assert_equal 13, find_issues_with_query(query).size + + query.filters = {'tracker_id' => {:operator => '=', :values => ['2']}} + assert_equal 1, find_issues_with_query(query).size + + query.filters = {'tracker_id' => {:operator => '=', :values => ['3']}} + assert_equal 0, find_issues_with_query(query).size + + query.filters = {'tracker_id' => {:operator => '=', :values => ['1,2,3']}} + assert_equal 14, find_issues_with_query(query).size + end + def test_filter_assigned_to_me user = User.find(2) group = Group.find(10) -- 2.36.1