From 8c34925869a7679813e9e7fdc220897cbd8df3b0 Mon Sep 17 00:00:00 2001 From: "marius.balteanu" Date: Thu, 19 May 2022 19:40:17 +0200 Subject: [PATCH] Fix chained custom field filter doesn't work for User fields diff --git a/app/models/query.rb b/app/models/query.rb index 7695bc165..2929c8a3d 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -1178,6 +1178,11 @@ class Query < ActiveRecord::Base filter = available_filters[field] target_class = filter[:through].format.target_class + # It target class name is User, filter custom values after the base class which is Principal + if target_class.name == User.name + target_class = filter[:through].format.target_class.base_class + end + "#{queried_table_name}.id #{not_in} IN (" + "SELECT customized_id FROM #{CustomValue.table_name}" + " WHERE customized_type='#{queried_class}' AND custom_field_id=#{custom_field_id}" + diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index dbf95519f..35c6d85dd 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -948,6 +948,24 @@ class QueryTest < ActiveSupport::TestCase assert_equal issue1, result.first end + def test_filter_on_chained_user_custom_field + user = User.find(2) + User.current = user + + user_cf = UserCustomField.find(4) + user_cf.update! is_filter: true + + issue_cf = IssueCustomField.create!(:field_format => 'user', :is_for_all => true, :is_filter => true, :name => 'User custom field', :tracker_ids => [1]) + issue1 = Issue.create!(:project_id => 1, :tracker_id => 1, :custom_field_values => {issue_cf.id.to_s => '2'}, :subject => 'Test', :author_id => 1) + + query = IssueQuery.new(:name => '_', :project => Project.find(1)) + query.filters = {"cf_#{issue_cf.id}.cf_#{user_cf.id}" => {:operator => '~', :values => ['01 42']}} + result = query.issues + + assert_equal 1, result.size + assert_equal issue1, result.first + end + def test_filter_on_me_by_anonymous_user User.current = nil query = -- 2.35.1