]> source.dussan.org Git - redmine.git/commitdiff
Filtering issues on "related to" may ignore other filters (#14401).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 28 Jul 2013 15:29:31 +0000 (15:29 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 28 Jul 2013 15:29:31 +0000 (15:29 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@12058 e93f8b46-1217-0410-a6f0-8f06a7374b81

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

index bc2ca7abeae2da216b11eda82ba9493167a2d3be..56ef9f08e2d3c0ab89df6a6f58d0d20286ace4c2 100644 (file)
@@ -467,10 +467,9 @@ class IssueQuery < Query
 
     if relation_options[:sym] == field && !options[:reverse]
       sqls = [sql, sql_for_relations(field, operator, value, :reverse => true)]
-      sqls.join(["!", "!*", "!p"].include?(operator) ? " AND " : " OR ")
-    else
-      sql
+      sql = sqls.join(["!", "!*", "!p"].include?(operator) ? " AND " : " OR ")
     end
+    "(#{sql})"
   end
 
   IssueRelation::TYPES.keys.each do |relation_type|
index 4ec430cf743ccf6236e7aaeb15ab46d2138bc035..12580bfd0c627299c9c1c71277b1bf0bf67aec11 100644 (file)
@@ -791,6 +791,21 @@ class QueryTest < ActiveSupport::TestCase
     assert_equal [1, 2, 3], find_issues_with_query(query).map(&:id).sort
   end
 
+  def test_filter_on_relations_should_not_ignore_other_filter
+    issue = Issue.generate!
+    issue1 = Issue.generate!(:status_id => 1)
+    issue2 = Issue.generate!(:status_id => 2)
+    IssueRelation.create!(:relation_type => "relates", :issue_from => issue, :issue_to => issue1)
+    IssueRelation.create!(:relation_type => "relates", :issue_from => issue, :issue_to => issue2)
+
+    query = IssueQuery.new(:name => '_')
+    query.filters = {
+      "status_id" => {:operator => '=', :values => ['1']},
+      "relates" => {:operator => '=', :values => [issue.id.to_s]}
+    }
+    assert_equal [issue1], find_issues_with_query(query)
+  end
+
   def test_statement_should_be_nil_with_no_filters
     q = IssueQuery.new(:name => '_')
     q.filters = {}