summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/issue_query.rb3
-rw-r--r--test/unit/query_test.rb14
2 files changed, 17 insertions, 0 deletions
diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb
index 7701cbfe2..155462c64 100644
--- a/app/models/issue_query.rb
+++ b/app/models/issue_query.rb
@@ -526,6 +526,9 @@ class IssueQuery < Query
c = sql_contains("a.filename", value.first)
e = (operator == "~" ? "EXISTS" : "NOT EXISTS")
"#{e} (SELECT 1 FROM #{Attachment.table_name} a WHERE a.container_type = 'Issue' AND a.container_id = #{Issue.table_name}.id AND #{c})"
+ when "^", "$"
+ c = sql_contains("a.filename", value.first, (operator == "^" ? :starts_with : :ends_with) => true)
+ "EXISTS (SELECT 1 FROM #{Attachment.table_name} a WHERE a.container_type = 'Issue' AND a.container_id = #{Issue.table_name}.id AND #{c})"
end
end
diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb
index 84bb1e939..9a8bb3c84 100644
--- a/test/unit/query_test.rb
+++ b/test/unit/query_test.rb
@@ -1353,6 +1353,20 @@ class QueryTest < ActiveSupport::TestCase
assert_nil issues.detect {|issue| issue.attachments.any? {|attachment| attachment.filename.include?('error281')}}
end
+ def test_filter_on_attachment_when_starts_with
+ query = IssueQuery.new(:name => '_')
+ query.filters = {"attachment" => {:operator => '^', :values => ['testfile']}}
+ issues = find_issues_with_query(query)
+ assert_equal [14], issues.collect(&:id).sort
+ end
+
+ def test_filter_on_attachment_when_ends_with
+ query = IssueQuery.new(:name => '_')
+ query.filters = {"attachment" => {:operator => '$', :values => ['zip']}}
+ issues = find_issues_with_query(query)
+ assert_equal [3, 4], issues.collect(&:id).sort
+ end
+
def test_filter_on_subject_when_starts_with
query = IssueQuery.new(:name => '_')
query.filters = {'subject' => {:operator => '^', :values => ['issue']}}