@@ -200,4 +200,53 @@ function testTargetNotModel()
200200 $ requestParser = new RequestParser ($ request );
201201 $ requestParser ->getBuilder ();
202202 }
203+
204+ function testFilterWithOr ()
205+ {
206+
207+ //Create Request
208+ $ uri = 'some_model ' ;
209+ $ controllerClass = MockModelController::class;
210+ $ query = new ParameterBag ([
211+ "filter " => [
212+ "x|y " => [
213+ "is " => "1 "
214+ ],
215+ "z " => [
216+ "in " => "1,2,3 "
217+ ]
218+ ]
219+ ]);
220+ $ requestParserOptions = [
221+ 'model_namespaces ' => [
222+ 'LIQRGV\QueryFilter\Mocks ' ,
223+ ]
224+ ];
225+
226+ $ request = $ this ->createControllerRequest ($ uri , $ controllerClass , $ query , $ requestParserOptions );
227+ $ requestParser = new RequestParser ($ request );
228+ $ builder = $ requestParser ->getBuilder ();
229+
230+ $ query = $ builder ->getQuery ();
231+
232+ $ this ->assertEquals ("mock_models " , $ query ->from );
233+
234+ //Assert subquery exists
235+ $ this ->assertArrayHasKey ('query ' , $ query ->wheres [0 ]);
236+ $ subquery = $ query ->wheres [0 ]['query ' ];
237+
238+ //Assert subquery components
239+ $ this ->assertEquals ("x " , $ subquery ->wheres [0 ]['column ' ]);
240+ $ this ->assertEquals ("= " , strtolower ($ subquery ->wheres [0 ]['operator ' ]));
241+
242+ $ this ->assertEquals ("y " , $ subquery ->wheres [1 ]['column ' ]);
243+ $ this ->assertEquals ("= " , strtolower ($ subquery ->wheres [1 ]['operator ' ]));
244+ $ this ->assertEquals ("or " , strtolower ($ subquery ->wheres [1 ]['boolean ' ]));
245+
246+ //Assert second where term of the main query
247+ $ this ->assertEquals ("z " , $ query ->wheres [1 ]['column ' ]);
248+ $ this ->assertEquals ("in " , strtolower ($ query ->wheres [1 ]['type ' ]));
249+
250+ $ this ->assertEquals (['1 ' , '1 ' , '1 ' , '2 ' , '3 ' ], $ builder ->getBindings ());
251+ }
203252}
0 commit comments