FIX: non tag/category # searches should be passed through

This commit is contained in:
Sam 2017-08-01 18:15:04 -04:00
parent 53e78edbef
commit 97fa64d846
2 changed files with 28 additions and 6 deletions

View File

@ -425,12 +425,22 @@ class Search
end
posts.where("topics.category_id IN (?)", category_ids)
else
posts.where("topics.id IN (
SELECT DISTINCT(tt.topic_id)
FROM topic_tags tt, tags
WHERE tt.tag_id = tags.id
AND tags.name = ?
)", slug[0])
# try a possible tag match
tag_id = Tag.where(name: slug[0]).pluck(:id).first
if (tag_id)
posts.where("topics.id IN (
SELECT DISTINCT(tt.topic_id)
FROM topic_tags tt
WHERE tt.tag_id = ?
)", tag_id)
else
# a bit yucky but we got to add the term back in
if match.to_s.length >= SiteSetting.min_search_term_length
posts.where("posts.id IN (
SELECT post_id FROM post_search_data pd1
WHERE pd1.search_data @@ #{Search.ts_query("##{match}")})")
end
end
end
end

View File

@ -730,6 +730,18 @@ describe Search do
expect(Search.execute('this is a test #beta').posts.size).to eq(0)
end
it 'correctly handles #symbol when no tag or category match' do
Fabricate(:post, raw: 'testing #1 #9998')
results = Search.new('testing #1').execute
expect(results.posts.length).to eq(1)
results = Search.new('#9998').execute
expect(results.posts.length).to eq(1)
results = Search.new('#777').execute
expect(results.posts.length).to eq(0)
end
context 'tags' do
let(:tag1) { Fabricate(:tag, name: 'lunch') }
let(:tag2) { Fabricate(:tag, name: 'eggs') }