search_query_parser_spec.rb 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. # frozen_string_literal: true
  2. require 'rails_helper'
  3. require 'parslet/rig/rspec'
  4. describe SearchQueryParser do
  5. let(:parser) { described_class.new }
  6. context 'with term' do
  7. it 'consumes "hello"' do
  8. expect(parser.term).to parse('hello')
  9. end
  10. end
  11. context 'with prefix' do
  12. it 'consumes "foo:"' do
  13. expect(parser.prefix).to parse('foo:')
  14. end
  15. end
  16. context 'with operator' do
  17. it 'consumes "+"' do
  18. expect(parser.operator).to parse('+')
  19. end
  20. it 'consumes "-"' do
  21. expect(parser.operator).to parse('-')
  22. end
  23. end
  24. context 'with shortcode' do
  25. it 'consumes ":foo:"' do
  26. expect(parser.shortcode).to parse(':foo:')
  27. end
  28. end
  29. context 'with phrase' do
  30. it 'consumes "hello world"' do
  31. expect(parser.phrase).to parse('"hello world"')
  32. end
  33. end
  34. context 'with clause' do
  35. it 'consumes "foo"' do
  36. expect(parser.clause).to parse('foo')
  37. end
  38. it 'consumes "-foo"' do
  39. expect(parser.clause).to parse('-foo')
  40. end
  41. it 'consumes "foo:bar"' do
  42. expect(parser.clause).to parse('foo:bar')
  43. end
  44. it 'consumes "-foo:bar"' do
  45. expect(parser.clause).to parse('-foo:bar')
  46. end
  47. it 'consumes \'foo:"hello world"\'' do
  48. expect(parser.clause).to parse('foo:"hello world"')
  49. end
  50. it 'consumes \'-foo:"hello world"\'' do
  51. expect(parser.clause).to parse('-foo:"hello world"')
  52. end
  53. it 'consumes "foo:"' do
  54. expect(parser.clause).to parse('foo:')
  55. end
  56. it 'consumes \'"\'' do
  57. expect(parser.clause).to parse('"')
  58. end
  59. end
  60. context 'with query' do
  61. it 'consumes "hello -world"' do
  62. expect(parser.query).to parse('hello -world')
  63. end
  64. it 'consumes \'foo "hello world"\'' do
  65. expect(parser.query).to parse('foo "hello world"')
  66. end
  67. it 'consumes "foo:bar hello"' do
  68. expect(parser.query).to parse('foo:bar hello')
  69. end
  70. it 'consumes \'"hello" world "\'' do
  71. expect(parser.query).to parse('"hello" world "')
  72. end
  73. it 'consumes "foo:bar bar: hello"' do
  74. expect(parser.query).to parse('foo:bar bar: hello')
  75. end
  76. end
  77. end