@labdigital/commercetools-mock 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/README.md +5 -4
  2. package/dist/index.cjs +105 -17
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +29 -7
  5. package/dist/index.d.ts +29 -7
  6. package/dist/index.js +105 -17
  7. package/dist/index.js.map +1 -1
  8. package/package.json +4 -3
  9. package/src/constants.ts +2 -2
  10. package/src/ctMock.ts +176 -176
  11. package/src/exceptions.ts +10 -10
  12. package/src/helpers.ts +26 -26
  13. package/src/index.test.ts +173 -173
  14. package/src/index.ts +3 -3
  15. package/src/lib/expandParser.ts +19 -19
  16. package/src/lib/haversine.test.ts +13 -13
  17. package/src/lib/haversine.ts +14 -14
  18. package/src/lib/masking.ts +15 -15
  19. package/src/lib/parser.ts +2 -2
  20. package/src/lib/predicateParser.test.ts +204 -204
  21. package/src/lib/predicateParser.ts +398 -398
  22. package/src/lib/projectionSearchFilter.test.ts +168 -168
  23. package/src/lib/projectionSearchFilter.ts +272 -269
  24. package/src/lib/proxy.ts +8 -8
  25. package/src/oauth/errors.ts +4 -4
  26. package/src/oauth/helpers.ts +6 -6
  27. package/src/oauth/server.ts +103 -101
  28. package/src/oauth/store.ts +27 -27
  29. package/src/priceSelector.test.ts +68 -68
  30. package/src/priceSelector.ts +70 -70
  31. package/src/product-projection-search.ts +296 -296
  32. package/src/projectAPI.test.ts +3 -3
  33. package/src/projectAPI.ts +46 -46
  34. package/src/repositories/abstract.ts +190 -190
  35. package/src/repositories/associate-role.ts +10 -7
  36. package/src/repositories/attribute-group.ts +63 -8
  37. package/src/repositories/business-unit.ts +10 -7
  38. package/src/repositories/cart-discount.ts +134 -134
  39. package/src/repositories/cart.ts +517 -514
  40. package/src/repositories/category.ts +170 -167
  41. package/src/repositories/channel.ts +114 -111
  42. package/src/repositories/custom-object.ts +66 -63
  43. package/src/repositories/customer-group.ts +72 -69
  44. package/src/repositories/customer.ts +90 -90
  45. package/src/repositories/discount-code.ts +171 -168
  46. package/src/repositories/errors.ts +15 -15
  47. package/src/repositories/extension.ts +79 -76
  48. package/src/repositories/helpers.ts +180 -180
  49. package/src/repositories/index.ts +39 -39
  50. package/src/repositories/inventory-entry.ts +98 -95
  51. package/src/repositories/my-order.ts +11 -11
  52. package/src/repositories/order-edit.ts +29 -29
  53. package/src/repositories/order.test.ts +191 -191
  54. package/src/repositories/order.ts +393 -393
  55. package/src/repositories/payment.ts +155 -155
  56. package/src/repositories/product-discount.ts +149 -149
  57. package/src/repositories/product-projection.ts +116 -52
  58. package/src/repositories/product-selection.ts +31 -31
  59. package/src/repositories/product-type.ts +156 -156
  60. package/src/repositories/product.ts +600 -597
  61. package/src/repositories/project.ts +136 -135
  62. package/src/repositories/quote-request.ts +19 -19
  63. package/src/repositories/quote.ts +19 -19
  64. package/src/repositories/review.ts +24 -24
  65. package/src/repositories/shipping-method.ts +217 -217
  66. package/src/repositories/shopping-list.ts +49 -49
  67. package/src/repositories/staged-quote.ts +20 -20
  68. package/src/repositories/standalone-price.ts +72 -61
  69. package/src/repositories/state.ts +84 -84
  70. package/src/repositories/store.ts +114 -114
  71. package/src/repositories/subscription.ts +40 -40
  72. package/src/repositories/tax-category.ts +98 -98
  73. package/src/repositories/type.ts +157 -157
  74. package/src/repositories/zone.ts +71 -71
  75. package/src/server.ts +2 -2
  76. package/src/services/abstract.ts +173 -173
  77. package/src/services/attribute-group.ts +16 -0
  78. package/src/services/cart-discount.ts +8 -8
  79. package/src/services/cart.test.ts +409 -409
  80. package/src/services/cart.ts +50 -50
  81. package/src/services/category.test.ts +25 -25
  82. package/src/services/category.ts +8 -8
  83. package/src/services/channel.ts +8 -8
  84. package/src/services/custom-object.test.ts +184 -184
  85. package/src/services/custom-object.ts +48 -48
  86. package/src/services/customer-group.ts +8 -8
  87. package/src/services/customer.test.ts +151 -151
  88. package/src/services/customer.ts +27 -27
  89. package/src/services/discount-code.ts +8 -8
  90. package/src/services/extension.ts +8 -8
  91. package/src/services/index.ts +52 -44
  92. package/src/services/inventory-entry.test.ts +162 -162
  93. package/src/services/inventory-entry.ts +8 -8
  94. package/src/services/my-cart.test.ts +78 -78
  95. package/src/services/my-cart.ts +28 -28
  96. package/src/services/my-customer.test.ts +44 -44
  97. package/src/services/my-customer.ts +53 -53
  98. package/src/services/my-order.ts +20 -20
  99. package/src/services/my-payment.test.ts +65 -65
  100. package/src/services/my-payment.ts +8 -8
  101. package/src/services/order.test.ts +527 -527
  102. package/src/services/order.ts +31 -31
  103. package/src/services/payment.test.ts +65 -65
  104. package/src/services/payment.ts +8 -8
  105. package/src/services/product-discount.ts +8 -8
  106. package/src/services/product-projection.test.ts +492 -428
  107. package/src/services/product-projection.ts +32 -18
  108. package/src/services/product-type.test.ts +56 -56
  109. package/src/services/product-type.ts +8 -8
  110. package/src/services/product.test.ts +510 -510
  111. package/src/services/product.ts +8 -8
  112. package/src/services/project.ts +34 -34
  113. package/src/services/shipping-method.test.ts +81 -81
  114. package/src/services/shipping-method.ts +12 -12
  115. package/src/services/shopping-list.ts +8 -8
  116. package/src/services/standalone-price.test.ts +256 -256
  117. package/src/services/standalone-price.ts +8 -8
  118. package/src/services/state.test.ts +42 -42
  119. package/src/services/state.ts +8 -8
  120. package/src/services/store.test.ts +57 -57
  121. package/src/services/store.ts +8 -8
  122. package/src/services/subscription.ts +8 -8
  123. package/src/services/tax-category.test.ts +61 -61
  124. package/src/services/tax-category.ts +8 -8
  125. package/src/services/type.ts +8 -8
  126. package/src/services/zone.ts +8 -8
  127. package/src/storage/abstract.ts +58 -58
  128. package/src/storage/in-memory.ts +419 -419
  129. package/src/types.ts +82 -82
@@ -3,211 +3,211 @@ import { describe, expect, test } from 'vitest'
3
3
  import { parseQueryExpression, PredicateError } from './predicateParser.js'
4
4
 
5
5
  describe('Predicate filter', () => {
6
- const exampleObject = {
7
- stringProperty: 'foobar',
8
- numberProperty: 1234,
9
- arrayProperty: ['foo', 'bar', 'nar'],
10
- notDefined: undefined,
11
- emptyArrayProperty: [],
12
- booleanProperty: true,
13
- nested: {
14
- numberProperty: 1234,
15
- objectProperty: {
16
- stringProperty: 'foobar',
17
- booleanProperty: true,
18
- },
19
- },
20
-
21
- // Longitude, latitude
22
- geoLocation: [5.110230209615395, 52.06969591642097],
23
- }
24
-
25
- const match = (pattern: string | string[], vars?: VariableMap) => {
26
- const matchFunc = parseQueryExpression(pattern)
27
- return matchFunc(exampleObject, vars || {})
28
- }
29
-
30
- test('stringProperty = "foobar"', async () => {
31
- expect(match(`stringProperty="foobar"`)).toBeTruthy()
32
- expect(match(`stringProperty!="foobar"`)).toBeFalsy()
33
-
34
- expect(match(`stringProperty=:val`, { val: 'foobar' })).toBeTruthy()
35
- })
36
-
37
- test('booleanProperty = true', async () => {
38
- expect(match(`booleanProperty != true`)).toBeFalsy()
39
- expect(match(`booleanProperty = true`)).toBeTruthy()
40
-
41
- expect(match(`booleanProperty=:val`, { val: true })).toBeTruthy()
42
- })
43
-
44
- test('stringProperty matches ignore case "foobar"', async () => {
45
- expect(match(`stringProperty="FOObar"`)).toBeFalsy()
46
- expect(match(`stringProperty matches ignore case "FOObar"`)).toBeTruthy()
47
- expect(
48
- match(`stringProperty matches ignore case :val`, { val: 'fooBar' })
49
- ).toBeTruthy()
50
- })
51
-
52
- test('numberProperty = 1234', async () => {
53
- expect(match(`numberProperty=1234`)).toBeTruthy()
54
- expect(match(`numberProperty = 1234`)).toBeTruthy()
55
- expect(match(`numberProperty=1230`)).toBeFalsy()
56
- expect(match(`numberProperty = 1230`)).toBeFalsy()
57
-
58
- expect(match(`numberProperty=:val`, { val: 1234 })).toBeTruthy()
59
- })
60
-
61
- test('numberProperty > ...', async () => {
62
- expect(match(`numberProperty > 1233`)).toBeTruthy()
63
- expect(match(`numberProperty > 1234`)).toBeFalsy()
64
- })
65
-
66
- test('numberProperty >= ...', async () => {
67
- expect(match(`numberProperty >= 1234`)).toBeTruthy()
68
- expect(match(`numberProperty >= 1235`)).toBeFalsy()
69
- })
70
- test('numberProperty < ...', async () => {
71
- expect(match(`numberProperty < 1235`)).toBeTruthy()
72
- expect(match(`numberProperty < 1234`)).toBeFalsy()
73
- })
74
-
75
- test('numberProperty <= ...', async () => {
76
- expect(match(`numberProperty <= 1235`)).toBeTruthy()
77
- expect(match(`numberProperty <= 1234`)).toBeTruthy()
78
- expect(match(`numberProperty <= 1233`)).toBeFalsy()
79
- })
80
-
81
- test('numberPropery in (...)', async () => {
82
- expect(match(`numberProperty in (1233, 1234, 1235)`)).toBeTruthy()
83
- })
84
-
85
- test('numberPropery in (...) single value', async () => {
86
- expect(match(`numberProperty in (1234)`)).toBeTruthy()
87
- })
88
-
89
- test('arrayProperty contains all (...)', async () => {
90
- expect(match(`arrayProperty contains all ("foo", "bar")`)).toBeTruthy()
91
- expect(
92
- match(`arrayProperty contains all ("foo", "bar", "no!")`)
93
- ).toBeFalsy()
94
- })
95
-
96
- test('arrayProperty is empty', async () => {
97
- expect(match(`arrayProperty is empty`)).toBeFalsy()
98
- expect(match(`arrayProperty is not empty`)).toBeTruthy()
99
- expect(match(`emptyArrayProperty is empty`)).toBeTruthy()
100
- })
101
-
102
- test('property is defined', async () => {
103
- expect(match(`notDefined is defined`)).toBeFalsy()
104
- expect(match(`notDefined is not defined`)).toBeTruthy()
105
-
106
- expect(match(`arrayProperty is defined`)).toBeTruthy()
107
- expect(match(`arrayProperty is not defined`)).toBeFalsy()
108
- })
109
-
110
- test('arrayProperty contains any (...)', async () => {
111
- expect(match(`arrayProperty contains any ("NO!")`)).toBeFalsy()
112
- expect(match(`arrayProperty contains any ("foo", "bar")`)).toBeTruthy()
113
- expect(
114
- match(`arrayProperty contains any ("foo", "bar", "no!")`)
115
- ).toBeTruthy()
116
- })
117
-
118
- test('geolocation within circle (...)', async () => {
119
- expect(
120
- match(
121
- `geoLocation within circle(5.121310867198959, 52.09068804569714, 2500)`
122
- )
123
- ).toBeTruthy()
124
- expect(
125
- match(
126
- `geoLocation within circle(5.121310867198959, 52.09068804569714, 2400)`
127
- )
128
- ).toBeFalsy()
129
- })
130
-
131
- test('negate any other conditional expression', async () => {
132
- expect(match(`numberProperty = 1234`)).toBeTruthy()
133
- expect(match(`not (numberProperty = 1234)`)).toBeFalsy()
134
- expect(match(`not (numberProperty = 1235)`)).toBeTruthy()
135
- expect(match(`not (numberProperty = 1235)`)).toBeTruthy()
136
-
137
- expect(match(`nested(numberProperty=1234))`)).toBeTruthy()
138
- expect(match(`nested(not(numberProperty=1230)))`)).toBeTruthy()
139
- expect(match(`nested(not(numberProperty=1234)))`)).toBeFalsy()
140
- })
141
-
142
- test('and clause (implicit)', async () => {
143
- expect(
144
- match([`stringProperty="foobar"`, `numberProperty=1234`])
145
- ).toBeTruthy()
146
-
147
- expect(
148
- match([`stringProperty="foobar"`, `numberProperty=1111`])
149
- ).toBeFalsy()
150
- })
151
-
152
- test('and clause (explicit)', async () => {
153
- expect(match(`numberProperty>1233 and numberProperty<1235`)).toBeTruthy()
154
- expect(match(`numberProperty>1233 and numberProperty<1234`)).toBeFalsy()
155
- })
156
-
157
- test('or clause', async () => {
158
- expect(
159
- match(
160
- `numberProperty=1231 or numberProperty>54312 or numberProperty=1234`
161
- )
162
- ).toBeTruthy()
163
- expect(match(`numberProperty=1231 or numberProperty=1234`)).toBeTruthy()
164
- expect(match(`numberProperty=1231 or (numberProperty=1234)`)).toBeTruthy()
165
- expect(match(`numberProperty=1233 or numberProperty=1235`)).toBeFalsy()
166
- })
167
-
168
- test('or / and clause mixed', async () => {
169
- expect(
170
- match(
171
- `numberProperty=1234 and (numberProperty=1230 or (numberProperty=1234 or numberProperty=1235))`
172
- )
173
- ).toBeTruthy()
174
- })
175
- test('nested attribute access', async () => {
176
- expect(
177
- match(`nested(objectProperty(stringProperty="foobar"))`)
178
- ).toBeTruthy()
179
- })
180
-
181
- test('nested attribute access', async () => {
182
- expect(match(`nested(objectProperty(booleanProperty != true))`)).toBeFalsy()
183
- expect(
184
- match(`nested(objectProperty(booleanProperty != false))`)
185
- ).toBeTruthy()
186
- })
187
-
188
- test('lexer confusion', async () => {
189
- expect(() => match(`orSomething="foobar"`)).toThrow(PredicateError)
190
- expect(() => match(`orSomething="foobar"`)).toThrow(
191
- "The field 'orSomething' does not exist."
192
- )
193
-
194
- expect(() => match(`andSomething="foobar"`)).toThrow(PredicateError)
195
- expect(() => match(`andSomething="foobar"`)).toThrow(
196
- "The field 'andSomething' does not exist."
197
- )
198
- })
199
-
200
- test('invalid predicate', async () => {
201
- expect(() => match(`stringProperty=nomatch`)).toThrow(PredicateError)
202
- expect(() => match(`stringProperty=nomatch`)).toThrow(
203
- "Invalid input 'n', expected input parameter or primitive value (line 1, column 16)"
204
- )
205
- expect(() => match(`stringProperty`)).toThrow(PredicateError)
206
- })
6
+ const exampleObject = {
7
+ stringProperty: 'foobar',
8
+ numberProperty: 1234,
9
+ arrayProperty: ['foo', 'bar', 'nar'],
10
+ notDefined: undefined,
11
+ emptyArrayProperty: [],
12
+ booleanProperty: true,
13
+ nested: {
14
+ numberProperty: 1234,
15
+ objectProperty: {
16
+ stringProperty: 'foobar',
17
+ booleanProperty: true,
18
+ },
19
+ },
20
+
21
+ // Longitude, latitude
22
+ geoLocation: [5.110230209615395, 52.06969591642097],
23
+ }
24
+
25
+ const match = (pattern: string | string[], vars?: VariableMap) => {
26
+ const matchFunc = parseQueryExpression(pattern)
27
+ return matchFunc(exampleObject, vars || {})
28
+ }
29
+
30
+ test('stringProperty = "foobar"', async () => {
31
+ expect(match(`stringProperty="foobar"`)).toBeTruthy()
32
+ expect(match(`stringProperty!="foobar"`)).toBeFalsy()
33
+
34
+ expect(match(`stringProperty=:val`, { val: 'foobar' })).toBeTruthy()
35
+ })
36
+
37
+ test('booleanProperty = true', async () => {
38
+ expect(match(`booleanProperty != true`)).toBeFalsy()
39
+ expect(match(`booleanProperty = true`)).toBeTruthy()
40
+
41
+ expect(match(`booleanProperty=:val`, { val: true })).toBeTruthy()
42
+ })
43
+
44
+ test('stringProperty matches ignore case "foobar"', async () => {
45
+ expect(match(`stringProperty="FOObar"`)).toBeFalsy()
46
+ expect(match(`stringProperty matches ignore case "FOObar"`)).toBeTruthy()
47
+ expect(
48
+ match(`stringProperty matches ignore case :val`, { val: 'fooBar' })
49
+ ).toBeTruthy()
50
+ })
51
+
52
+ test('numberProperty = 1234', async () => {
53
+ expect(match(`numberProperty=1234`)).toBeTruthy()
54
+ expect(match(`numberProperty = 1234`)).toBeTruthy()
55
+ expect(match(`numberProperty=1230`)).toBeFalsy()
56
+ expect(match(`numberProperty = 1230`)).toBeFalsy()
57
+
58
+ expect(match(`numberProperty=:val`, { val: 1234 })).toBeTruthy()
59
+ })
60
+
61
+ test('numberProperty > ...', async () => {
62
+ expect(match(`numberProperty > 1233`)).toBeTruthy()
63
+ expect(match(`numberProperty > 1234`)).toBeFalsy()
64
+ })
65
+
66
+ test('numberProperty >= ...', async () => {
67
+ expect(match(`numberProperty >= 1234`)).toBeTruthy()
68
+ expect(match(`numberProperty >= 1235`)).toBeFalsy()
69
+ })
70
+ test('numberProperty < ...', async () => {
71
+ expect(match(`numberProperty < 1235`)).toBeTruthy()
72
+ expect(match(`numberProperty < 1234`)).toBeFalsy()
73
+ })
74
+
75
+ test('numberProperty <= ...', async () => {
76
+ expect(match(`numberProperty <= 1235`)).toBeTruthy()
77
+ expect(match(`numberProperty <= 1234`)).toBeTruthy()
78
+ expect(match(`numberProperty <= 1233`)).toBeFalsy()
79
+ })
80
+
81
+ test('numberPropery in (...)', async () => {
82
+ expect(match(`numberProperty in (1233, 1234, 1235)`)).toBeTruthy()
83
+ })
84
+
85
+ test('numberPropery in (...) single value', async () => {
86
+ expect(match(`numberProperty in (1234)`)).toBeTruthy()
87
+ })
88
+
89
+ test('arrayProperty contains all (...)', async () => {
90
+ expect(match(`arrayProperty contains all ("foo", "bar")`)).toBeTruthy()
91
+ expect(
92
+ match(`arrayProperty contains all ("foo", "bar", "no!")`)
93
+ ).toBeFalsy()
94
+ })
95
+
96
+ test('arrayProperty is empty', async () => {
97
+ expect(match(`arrayProperty is empty`)).toBeFalsy()
98
+ expect(match(`arrayProperty is not empty`)).toBeTruthy()
99
+ expect(match(`emptyArrayProperty is empty`)).toBeTruthy()
100
+ })
101
+
102
+ test('property is defined', async () => {
103
+ expect(match(`notDefined is defined`)).toBeFalsy()
104
+ expect(match(`notDefined is not defined`)).toBeTruthy()
105
+
106
+ expect(match(`arrayProperty is defined`)).toBeTruthy()
107
+ expect(match(`arrayProperty is not defined`)).toBeFalsy()
108
+ })
109
+
110
+ test('arrayProperty contains any (...)', async () => {
111
+ expect(match(`arrayProperty contains any ("NO!")`)).toBeFalsy()
112
+ expect(match(`arrayProperty contains any ("foo", "bar")`)).toBeTruthy()
113
+ expect(
114
+ match(`arrayProperty contains any ("foo", "bar", "no!")`)
115
+ ).toBeTruthy()
116
+ })
117
+
118
+ test('geolocation within circle (...)', async () => {
119
+ expect(
120
+ match(
121
+ `geoLocation within circle(5.121310867198959, 52.09068804569714, 2500)`
122
+ )
123
+ ).toBeTruthy()
124
+ expect(
125
+ match(
126
+ `geoLocation within circle(5.121310867198959, 52.09068804569714, 2400)`
127
+ )
128
+ ).toBeFalsy()
129
+ })
130
+
131
+ test('negate any other conditional expression', async () => {
132
+ expect(match(`numberProperty = 1234`)).toBeTruthy()
133
+ expect(match(`not (numberProperty = 1234)`)).toBeFalsy()
134
+ expect(match(`not (numberProperty = 1235)`)).toBeTruthy()
135
+ expect(match(`not (numberProperty = 1235)`)).toBeTruthy()
136
+
137
+ expect(match(`nested(numberProperty=1234))`)).toBeTruthy()
138
+ expect(match(`nested(not(numberProperty=1230)))`)).toBeTruthy()
139
+ expect(match(`nested(not(numberProperty=1234)))`)).toBeFalsy()
140
+ })
141
+
142
+ test('and clause (implicit)', async () => {
143
+ expect(
144
+ match([`stringProperty="foobar"`, `numberProperty=1234`])
145
+ ).toBeTruthy()
146
+
147
+ expect(
148
+ match([`stringProperty="foobar"`, `numberProperty=1111`])
149
+ ).toBeFalsy()
150
+ })
151
+
152
+ test('and clause (explicit)', async () => {
153
+ expect(match(`numberProperty>1233 and numberProperty<1235`)).toBeTruthy()
154
+ expect(match(`numberProperty>1233 and numberProperty<1234`)).toBeFalsy()
155
+ })
156
+
157
+ test('or clause', async () => {
158
+ expect(
159
+ match(
160
+ `numberProperty=1231 or numberProperty>54312 or numberProperty=1234`
161
+ )
162
+ ).toBeTruthy()
163
+ expect(match(`numberProperty=1231 or numberProperty=1234`)).toBeTruthy()
164
+ expect(match(`numberProperty=1231 or (numberProperty=1234)`)).toBeTruthy()
165
+ expect(match(`numberProperty=1233 or numberProperty=1235`)).toBeFalsy()
166
+ })
167
+
168
+ test('or / and clause mixed', async () => {
169
+ expect(
170
+ match(
171
+ `numberProperty=1234 and (numberProperty=1230 or (numberProperty=1234 or numberProperty=1235))`
172
+ )
173
+ ).toBeTruthy()
174
+ })
175
+ test('nested attribute access', async () => {
176
+ expect(
177
+ match(`nested(objectProperty(stringProperty="foobar"))`)
178
+ ).toBeTruthy()
179
+ })
180
+
181
+ test('nested attribute access', async () => {
182
+ expect(match(`nested(objectProperty(booleanProperty != true))`)).toBeFalsy()
183
+ expect(
184
+ match(`nested(objectProperty(booleanProperty != false))`)
185
+ ).toBeTruthy()
186
+ })
187
+
188
+ test('lexer confusion', async () => {
189
+ expect(() => match(`orSomething="foobar"`)).toThrow(PredicateError)
190
+ expect(() => match(`orSomething="foobar"`)).toThrow(
191
+ "The field 'orSomething' does not exist."
192
+ )
193
+
194
+ expect(() => match(`andSomething="foobar"`)).toThrow(PredicateError)
195
+ expect(() => match(`andSomething="foobar"`)).toThrow(
196
+ "The field 'andSomething' does not exist."
197
+ )
198
+ })
199
+
200
+ test('invalid predicate', async () => {
201
+ expect(() => match(`stringProperty=nomatch`)).toThrow(PredicateError)
202
+ expect(() => match(`stringProperty=nomatch`)).toThrow(
203
+ "Invalid input 'n', expected input parameter or primitive value (line 1, column 16)"
204
+ )
205
+ expect(() => match(`stringProperty`)).toThrow(PredicateError)
206
+ })
207
207
  })
208
208
 
209
209
  describe('Report parse errors', () => {
210
- test('unexpect input', () => {
211
- expect(() => parseQueryExpression('foo=bar')).toThrow(PredicateError)
212
- })
210
+ test('unexpect input', () => {
211
+ expect(() => parseQueryExpression('foo=bar')).toThrow(PredicateError)
212
+ })
213
213
  })