end
def sql_for_issue_id_field(field, operator, value)
- ids = value.first.to_s.scan(/\d+/).map(&:to_i).join(",")
- if ids.present?
- "#{Issue.table_name}.id IN (#{ids})"
+ if operator == "="
+ # accepts a comma separated list of ids
+ ids = value.first.to_s.scan(/\d+/).map(&:to_i)
+ if ids.present?
+ "#{Issue.table_name}.id IN (#{ids.join(",")})"
+ else
+ "1=0"
+ end
else
- "1=0"
+ sql_for_field("id", operator, value, Issue.table_name, "id")
end
end
assert_equal 2, issues.first.id
end
- def test_operator_is_on_integer_should_accept_comma_separated_values
+ def test_operator_is_on_issue_id_should_accept_comma_separated_values
query = IssueQuery.new(:name => '_')
query.add_filter("issue_id", '=', ['1,3'])
issues = find_issues_with_query(query)
assert_equal [1,3], issues.map(&:id).sort
end
+ def test_operator_between_on_issue_id_should_return_range
+ query = IssueQuery.new(:name => '_')
+ query.add_filter("issue_id", '><', ['2','3'])
+ issues = find_issues_with_query(query)
+ assert_equal 2, issues.size
+ assert_equal [2,3], issues.map(&:id).sort
+ end
+
def test_operator_is_on_integer_custom_field
f = IssueCustomField.create!(:name => 'filter', :field_format => 'int', :is_for_all => true, :is_filter => true, :trackers => Tracker.all)
CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => '7')