Feature #38402 » any-searchable-text-should-perform-AND-search.patch
app/models/issue_query.rb | ||
---|---|---|
792 | 792 |
end |
793 | 793 | |
794 | 794 |
fetcher = Redmine::Search::Fetcher.new( |
795 |
question, User.current, ['issue'], projects, attachments: '0' |
|
795 |
question, User.current, ['issue'], projects, all_words: (operator != '!~'), attachments: '0'
|
|
796 | 796 |
) |
797 | 797 |
ids = fetcher.result_ids.map(&:last) |
798 | 798 |
if ids.present? |
test/unit/query_test.rb | ||
---|---|---|
859 | 859 |
assert_equal [1, 2, 3], result.map(&:id).sort |
860 | 860 |
end |
861 | 861 | |
862 |
def test_filter_any_searchable_with_multiple_words |
|
863 |
User.current = User.find(1) |
|
864 |
query = IssueQuery.new( |
|
865 |
:name => '_', |
|
866 |
:filters => { |
|
867 |
'any_searchable' => { |
|
868 |
:operator => '~', |
|
869 |
:values => ['recipe categories'] |
|
870 |
} |
|
871 |
} |
|
872 |
) |
|
873 |
result = find_issues_with_query(query) |
|
874 |
assert_equal [2], result.map(&:id) |
|
875 |
end |
|
876 | ||
877 |
def test_filter_any_searchable_with_multiple_words_negative |
|
878 |
User.current = User.find(1) |
|
879 | ||
880 |
query_result_ids = ->(op, value) do |
|
881 |
query = IssueQuery.new( |
|
882 |
:name => '_', |
|
883 |
:filters => {'any_searchable' => {:operator => op, :values => [value]}} |
|
884 |
) |
|
885 |
find_issues_with_query(query).map(&:id).sort |
|
886 |
end |
|
887 | ||
888 |
ids_word1 = query_result_ids.call('~', 'recipe') |
|
889 |
ids_word2 = query_result_ids.call('~', 'categories') |
|
890 |
ids = query_result_ids.call('!~', 'recipe categories') |
|
891 | ||
892 |
# Neither "recipe" nor "categories" are in the subject, description, notes, etc. |
|
893 |
assert ids, Issue.ids.sort - ids_word1 - ids_word2 |
|
894 |
end |
|
895 | ||
862 | 896 |
def test_filter_any_searchable_no_matches |
863 | 897 |
User.current = User.find(1) |
864 | 898 |
query = IssueQuery.new( |