Fix search operators sometimes getting lost (#35190)

This commit is contained in:
Claire 2025-06-26 12:35:49 +02:00 committed by GitHub
parent a9f2ec45da
commit 2e0a00ab46
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 21 additions and 1 deletions

View File

@ -35,7 +35,7 @@ class SearchQueryTransformer < Parslet::Transform
private
def clauses_by_operator
@clauses_by_operator ||= @clauses.compact.chunk(&:operator).to_h
@clauses_by_operator ||= @clauses.compact.group_by(&:operator)
end
def flags_from_clauses!

View File

@ -129,4 +129,24 @@ RSpec.describe SearchQueryTransformer do
end
end
end
context 'with multiple prefix clauses before a search term' do
let(:query) { 'from:me has:media foo' }
it 'transforms clauses' do
expect(subject.send(:must_clauses).map(&:term)).to contain_exactly('foo')
expect(subject.send(:must_not_clauses)).to be_empty
expect(subject.send(:filter_clauses).map(&:prefix)).to contain_exactly('from', 'has')
end
end
context 'with a search term between two prefix clauses' do
let(:query) { 'from:me foo has:media' }
it 'transforms clauses' do
expect(subject.send(:must_clauses).map(&:term)).to contain_exactly('foo')
expect(subject.send(:must_not_clauses)).to be_empty
expect(subject.send(:filter_clauses).map(&:prefix)).to contain_exactly('from', 'has')
end
end
end