summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/issue_query.rb6
-rw-r--r--test/unit/query_test.rb15
2 files changed, 19 insertions, 2 deletions
diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb
index 5ff0e5530..81d9cdff2 100644
--- a/app/models/issue_query.rb
+++ b/app/models/issue_query.rb
@@ -550,7 +550,8 @@ class IssueQuery < Query
def sql_for_fixed_version_status_field(field, operator, value)
where = sql_for_field(field, operator, value, Version.table_name, "status")
- version_ids = versions(:conditions => [where]).map(&:id)
+ version_id_scope = project ? project.shared_versions : Version.visible
+ version_ids = version_id_scope.where(where).pluck(:id)
nl = operator == "!" ? "#{Issue.table_name}.fixed_version_id IS NULL OR" : ''
"(#{nl} #{sql_for_field("fixed_version_id", "=", version_ids, Issue.table_name, "fixed_version_id")})"
@@ -558,7 +559,8 @@ class IssueQuery < Query
def sql_for_fixed_version_due_date_field(field, operator, value)
where = sql_for_field(field, operator, value, Version.table_name, "effective_date")
- version_ids = versions(:conditions => [where]).map(&:id)
+ version_id_scope = project ? project.shared_versions : Version.visible
+ version_ids = version_id_scope.where(where).pluck(:id)
nl = operator == "!*" ? "#{Issue.table_name}.fixed_version_id IS NULL OR" : ''
"(#{nl} #{sql_for_field("fixed_version_id", "=", version_ids, Issue.table_name, "fixed_version_id")})"
diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb
index 0c8f68c94..86f3a1e14 100644
--- a/test/unit/query_test.rb
+++ b/test/unit/query_test.rb
@@ -1194,6 +1194,21 @@ class QueryTest < ActiveSupport::TestCase
assert_equal [1, 3, 7, 8], find_issues_with_query(query).map(&:id).uniq.sort
end
+ def test_filter_on_fixed_version_status_respects_sharing
+ issue = Issue.generate!(:project_id => 1, :fixed_version_id => 7)
+
+ filter_name = "fixed_version.status"
+
+ query = IssueQuery.new(:name => '_', :project => Project.find(1))
+ assert_include filter_name, query.available_filters.keys
+ query.filters = {filter_name => {:operator => '=', :values => ['open']}}
+ assert_include issue, find_issues_with_query(query)
+
+ query = IssueQuery.new(:name => '_', :project => Project.find(1))
+ query.filters = {filter_name => {:operator => '=', :values => ['closed']}}
+ assert_not_includes find_issues_with_query(query), issue
+ end
+
def test_filter_on_version_custom_field
field = IssueCustomField.generate!(:field_format => 'version', :is_filter => true)
issue = Issue.generate!(:project_id => 1, :tracker_id => 1, :custom_field_values => {field.id.to_s => '2'})