Merge pull request #4896 from dmacjam/multiple-tags-logical-and-search

FEATURE: Advanced search supports logical AND of multiple tags
This commit is contained in:
Neil Lalonde
2017-06-14 14:39:23 -04:00
committed by GitHub
5 changed files with 56 additions and 15 deletions

View File

@ -706,15 +706,35 @@ describe Search do
expect(Search.execute('this is a test #beta').posts.size).to eq(0)
end
it "can find with tag" do
topic1 = Fabricate(:topic, title: 'Could not, would not, on a boat')
topic1.tags = [Fabricate(:tag, name: 'eggs'), Fabricate(:tag, name: 'ham')]
Fabricate(:post, topic: topic1)
post2 = Fabricate(:post, topic: topic1, raw: "It probably doesn't help that they're green...")
context 'tags' do
let(:tag1) { Fabricate(:tag, name: 'lunch') }
let(:tag2) { Fabricate(:tag, name: 'eggs') }
let(:topic1) { Fabricate(:topic, tags: [tag2, Fabricate(:tag)]) }
let(:topic2) { Fabricate(:topic, tags: [tag2]) }
let(:topic3) { Fabricate(:topic, tags: [tag1, tag2]) }
let!(:post1) { Fabricate(:post, topic: topic1)}
let!(:post2) { Fabricate(:post, topic: topic2)}
let!(:post3) { Fabricate(:post, topic: topic3)}
expect(Search.execute('green tags:eggs').posts.map(&:id)).to eq([post2.id])
expect(Search.execute('green tags:plants').posts.size).to eq(0)
it 'can find posts with tag' do
post4 = Fabricate(:post, topic: topic3, raw: "It probably doesn't help that they're green...")
expect(Search.execute('green tags:eggs').posts.map(&:id)).to eq([post4.id])
expect(Search.execute('tags:plants').posts.size).to eq(0)
end
it 'can find posts with any tag from multiple tags' do
Fabricate(:post)
expect(Search.execute('tags:eggs,lunch').posts.map(&:id).sort).to eq([post1.id, post2.id, post3.id].sort)
end
it 'can find posts which contains all provided tags' do
expect(Search.execute('tags:lunch+eggs').posts.map(&:id)).to eq([post3.id])
expect(Search.execute('tags:eggs+lunch').posts.map(&:id)).to eq([post3.id])
end
end
end
it 'can parse complex strings using ts_query helper' do