@@ -203,13 +203,12 @@ function testTargetNotModel()
203203
204204 function testFilterWithOr ()
205205 {
206-
207206 //Create Request
208207 $ uri = 'some_model ' ;
209208 $ controllerClass = MockModelController::class;
210209 $ query = new ParameterBag ([
211210 "filter " => [
212- "x|y " => [
211+ "x|y " => [
213212 "is " => "1 "
214213 ],
215214 "z " => [
@@ -249,4 +248,160 @@ function testFilterWithOr()
249248
250249 $ this ->assertEquals (['1 ' , '1 ' , '1 ' , '2 ' , '3 ' ], $ builder ->getBindings ());
251250 }
251+
252+ function testFilterWithOrUsingInQueryKeyword ()
253+ {
254+ $ uri = 'some_model ' ;
255+ $ controllerClass = MockModelController::class;
256+ $ query = new ParameterBag ([
257+ "filter " => [
258+ "c|d " => [
259+ "in " => "1,2,3 "
260+ ],
261+ "i " => [
262+ "between " => "9,10 "
263+ ]
264+ ]
265+ ]);
266+ $ requestParserOptions = [
267+ 'model_namespaces ' => [
268+ 'LIQRGV\QueryFilter\Mocks ' ,
269+ ]
270+ ];
271+
272+ $ request = $ this ->createControllerRequest ($ uri , $ controllerClass , $ query , $ requestParserOptions );
273+ $ requestParser = new RequestParser ($ request );
274+ $ builder = $ requestParser ->getBuilder ();
275+
276+ $ query = $ builder ->getQuery ();
277+
278+ $ this ->assertEquals ("mock_models " , $ query ->from );
279+
280+ $ this ->assertArrayHasKey ('query ' , $ query ->wheres [0 ]);
281+ $ this ->assertEquals ('Nested ' , $ query ->wheres [0 ]['type ' ]);
282+
283+ $ subquery1 = $ query ->wheres [0 ]['query ' ];
284+
285+ $ this ->assertEquals ("c " , $ subquery1 ->wheres [0 ]['column ' ]);
286+ $ this ->assertEquals ("in " , strtolower ($ subquery1 ->wheres [0 ]['type ' ]));
287+
288+ $ this ->assertEquals ("d " , $ subquery1 ->wheres [1 ]['column ' ]);
289+ $ this ->assertEquals ("in " , strtolower ($ subquery1 ->wheres [1 ]['type ' ]));
290+ $ this ->assertEquals ("or " , strtolower ($ subquery1 ->wheres [1 ]['boolean ' ]));
291+
292+ $ this ->assertEquals ("i " , $ query ->wheres [1 ]['column ' ]);
293+ $ this ->assertEquals ("between " , strtolower ($ query ->wheres [1 ]['type ' ]));
294+
295+ $ this ->assertEquals (
296+ [
297+ '1 ' , '2 ' , '3 ' , '1 ' , '2 ' , '3 ' ,
298+ '9 ' , '10 '
299+ ],
300+ $ builder ->getBindings ()
301+ );
302+ }
303+
304+ function testFilterWithOrUsingNotInQueryKeyword ()
305+ {
306+ $ uri = 'some_model ' ;
307+ $ controllerClass = MockModelController::class;
308+ $ query = new ParameterBag ([
309+ "filter " => [
310+ "e|f " => [
311+ "!in " => "4,5,6 "
312+ ],
313+ "i " => [
314+ "between " => "9,10 "
315+ ]
316+ ]
317+ ]);
318+ $ requestParserOptions = [
319+ 'model_namespaces ' => [
320+ 'LIQRGV\QueryFilter\Mocks ' ,
321+ ]
322+ ];
323+
324+ $ request = $ this ->createControllerRequest ($ uri , $ controllerClass , $ query , $ requestParserOptions );
325+ $ requestParser = new RequestParser ($ request );
326+ $ builder = $ requestParser ->getBuilder ();
327+
328+ $ query = $ builder ->getQuery ();
329+
330+ $ this ->assertEquals ("mock_models " , $ query ->from );
331+
332+ $ this ->assertArrayHasKey ('query ' , $ query ->wheres [0 ]);
333+ $ this ->assertEquals ('Nested ' , $ query ->wheres [0 ]['type ' ]);
334+
335+ $ subquery1 = $ query ->wheres [0 ]['query ' ];
336+
337+ $ this ->assertEquals ("e " , $ subquery1 ->wheres [0 ]['column ' ]);
338+ $ this ->assertEquals ("NotIn " , $ subquery1 ->wheres [0 ]['type ' ]);
339+
340+ $ this ->assertEquals ("f " , $ subquery1 ->wheres [1 ]['column ' ]);
341+ $ this ->assertEquals ("NotIn " , $ subquery1 ->wheres [1 ]['type ' ]);
342+ $ this ->assertEquals ("or " , strtolower ($ subquery1 ->wheres [1 ]['boolean ' ]));
343+
344+ $ this ->assertEquals ("i " , $ query ->wheres [1 ]['column ' ]);
345+ $ this ->assertEquals ("between " , strtolower ($ query ->wheres [1 ]['type ' ]));
346+
347+ $ this ->assertEquals (
348+ [
349+ '4 ' , '5 ' , '6 ' , '4 ' , '5 ' , '6 ' ,
350+ '9 ' , '10 '
351+ ],
352+ $ builder ->getBindings ()
353+ );
354+ }
355+
356+ function testFilterWithOrUsingBetweenQueryKeyword ()
357+ {
358+ $ uri = 'some_model ' ;
359+ $ controllerClass = MockModelController::class;
360+ $ query = new ParameterBag ([
361+ "filter " => [
362+ "g|h " => [
363+ "between " => "7,8 "
364+ ],
365+ "i " => [
366+ "between " => "9,10 "
367+ ]
368+ ]
369+ ]);
370+ $ requestParserOptions = [
371+ 'model_namespaces ' => [
372+ 'LIQRGV\QueryFilter\Mocks ' ,
373+ ]
374+ ];
375+
376+ $ request = $ this ->createControllerRequest ($ uri , $ controllerClass , $ query , $ requestParserOptions );
377+ $ requestParser = new RequestParser ($ request );
378+ $ builder = $ requestParser ->getBuilder ();
379+
380+ $ query = $ builder ->getQuery ();
381+
382+ $ this ->assertEquals ("mock_models " , $ query ->from );
383+
384+ $ this ->assertArrayHasKey ('query ' , $ query ->wheres [0 ]);
385+ $ this ->assertEquals ('Nested ' , $ query ->wheres [0 ]['type ' ]);
386+
387+ $ subquery1 = $ query ->wheres [0 ]['query ' ];
388+
389+ $ this ->assertEquals ("g " , $ subquery1 ->wheres [0 ]['column ' ]);
390+ $ this ->assertEquals ("between " , strtolower ($ subquery1 ->wheres [0 ]['type ' ]));
391+
392+ $ this ->assertEquals ("h " , $ subquery1 ->wheres [1 ]['column ' ]);
393+ $ this ->assertEquals ("between " , strtolower ($ subquery1 ->wheres [1 ]['type ' ]));
394+ $ this ->assertEquals ("or " , strtolower ($ subquery1 ->wheres [1 ]['boolean ' ]));
395+
396+ $ this ->assertEquals ("i " , $ query ->wheres [1 ]['column ' ]);
397+ $ this ->assertEquals ("between " , strtolower ($ query ->wheres [1 ]['type ' ]));
398+
399+ $ this ->assertEquals (
400+ [
401+ '7 ' , '8 ' , '7 ' , '8 ' ,
402+ '9 ' , '10 '
403+ ],
404+ $ builder ->getBindings ()
405+ );
406+ }
252407}
0 commit comments