Initial commit
This commit is contained in:
68
spec/support/ts_search_scope_shared_examples.rb
Normal file
68
spec/support/ts_search_scope_shared_examples.rb
Normal file
@@ -0,0 +1,68 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
shared_examples 'pg_search' do |mock_class, scope_method = 'scope_search'|
|
||||
describe 'searchable fields' do
|
||||
let!(:record) { mock_class.create name: 'something', value: 'amazing' }
|
||||
|
||||
it { expect(mock_class.send(scope_method, record.id)).to include(record) }
|
||||
it { expect(mock_class.send(scope_method, 'something')).to include(record) }
|
||||
it { expect(mock_class.send(scope_method, 'amazing')).to include(record) }
|
||||
it { expect(mock_class.send(scope_method, 'candy')).not_to include(record) }
|
||||
end
|
||||
|
||||
describe 'operators' do
|
||||
before do
|
||||
mock_class.create(name: 'uno', value: 'one')
|
||||
mock_class.create(name: 'dos', value: 'two')
|
||||
mock_class.create(name: 'tres', value: 'three')
|
||||
mock_class.create(name: 'cuatro', value: 'four')
|
||||
mock_class.create(name: 'cuatro', value: 'five')
|
||||
mock_class.create(name: 'cinco', value: 'one-two-three')
|
||||
end
|
||||
|
||||
it 'returns all records if search query is blank' do
|
||||
expect(mock_class.send(scope_method, ' ').first).not_to be_blank
|
||||
end
|
||||
|
||||
describe 'AND searches' do
|
||||
it { expect(mock_class.send(scope_method, 'uno one').count).to eq(1) }
|
||||
it { expect(mock_class.send(scope_method, 'uno&one').count).to eq(1) }
|
||||
it { expect(mock_class.send(scope_method, 'uno&&one').count).to eq(1) }
|
||||
it { expect(mock_class.send(scope_method, 'uno & one').count).to eq(1) }
|
||||
it { expect(mock_class.send(scope_method, 'uno one').count).to eq(1) }
|
||||
it { expect(mock_class.send(scope_method, 'uno and one').count).to eq(1) }
|
||||
it { expect(mock_class.send(scope_method, 'dos AND two').count).to eq(1) }
|
||||
it { expect(mock_class.send(scope_method, 'uno dos').count).to eq(0) }
|
||||
end
|
||||
|
||||
describe 'OR searches' do
|
||||
it { expect(mock_class.send(scope_method, 'uno or dos').count).to eq(2) }
|
||||
it { expect(mock_class.send(scope_method, 'uno or dos').count).to eq(2) }
|
||||
it { expect(mock_class.send(scope_method, 'uno or or dos').count).to eq(2) }
|
||||
it { expect(mock_class.send(scope_method, 'uno or or dos').count).to eq(2) }
|
||||
it { expect(mock_class.send(scope_method, 'one OR two').count).to eq(3) }
|
||||
it { expect(mock_class.send(scope_method, 'uno or two').count).to eq(3) }
|
||||
end
|
||||
|
||||
describe 'AND and OR searches' do
|
||||
it { expect(mock_class.send(scope_method, 'uno or dos two').count).to eq(2) }
|
||||
it { expect(mock_class.send(scope_method, 'uno or dos one').count).to eq(1) }
|
||||
end
|
||||
|
||||
describe 'NOT searches' do
|
||||
it { expect(mock_class.send(scope_method, '!cuatro').count).to eq(4) }
|
||||
it { expect(mock_class.send(scope_method, 'cuatro !four').count).to eq(1) }
|
||||
end
|
||||
|
||||
describe 'exact match' do
|
||||
it { expect(mock_class.send(scope_method, '"cinco"').count).to eq(1) }
|
||||
it { expect(mock_class.send(scope_method, '"one-two-three"').count).to eq(1) }
|
||||
it { expect(mock_class.send(scope_method, '"one two"').count).to eq(1) }
|
||||
it { expect(mock_class.send(scope_method, '"one&two"').count).to eq(1) }
|
||||
it { expect(mock_class.send(scope_method, '"one|two"').count).to eq(1) }
|
||||
it { expect(mock_class.send(scope_method, '"one-two-three" or two').count).to eq(2) }
|
||||
it { expect(mock_class.send(scope_method, '"one-two"').count).to eq(0) }
|
||||
it { expect(mock_class.send(scope_method, '"cinco one"').count).to eq(1) }
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user