mirror of
https://github.com/discourse/discourse.git
synced 2025-05-31 06:58:31 +08:00
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:
@ -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
|
||||
|
Reference in New Issue
Block a user