1212use LIQRGV \QueryFilter \Mocks \MockModelController ;
1313use LIQRGV \QueryFilter \RequestParser ;
1414use Symfony \Component \HttpFoundation \ParameterBag ;
15+ use function foo \func ;
1516
1617class RequestParserTest extends TestCase
1718{
@@ -455,7 +456,8 @@ function testPagination()
455456 $ this ->assertEquals (50 , $ query ->offset );
456457 }
457458
458- function testPaginationIgnoreOffset (){
459+ function testPaginationIgnoreOffset ()
460+ {
459461 $ uri = 'some_model ' ;
460462 $ controllerClass = MockModelController::class;
461463 $ query = new ParameterBag ([
@@ -478,7 +480,8 @@ function testPaginationIgnoreOffset(){
478480 $ this ->assertNull ($ query ->offset );
479481 }
480482
481- function testPaginationUsingZeroAsDefaultOffset (){
483+ function testPaginationUsingZeroAsDefaultOffset ()
484+ {
482485 $ uri = 'some_model ' ;
483486 $ controllerClass = MockModelController::class;
484487 $ query = new ParameterBag ([
@@ -500,4 +503,130 @@ function testPaginationUsingZeroAsDefaultOffset(){
500503 $ this ->assertEquals (50 , $ query ->limit );
501504 $ this ->assertEquals (0 , $ query ->offset );
502505 }
506+
507+ function testFilterOnlyAllowedFilter ()
508+ {
509+ $ uri = 'some_model ' ;
510+ $ controllerClass = MockModelController::class;
511+ $ ignoredKey = "ignored_key " ;
512+ $ nameKey = "name " ;
513+ $ valueKey = "value " ;
514+ $ query = new ParameterBag ([
515+ "filter " => [
516+ $ nameKey => [
517+ "in " => "2,3,4 "
518+ ],
519+ $ valueKey => [
520+ "is " => "5 "
521+ ],
522+ $ ignoredKey => [
523+ "is " => "6 "
524+ ],
525+ ],
526+ ]);
527+ $ requestParserOptions = [
528+ 'model_namespaces ' => [
529+ 'LIQRGV\QueryFilter\Mocks ' ,
530+ ]
531+ ];
532+
533+ $ request = $ this ->createControllerRequest ($ uri , $ controllerClass , $ query , $ requestParserOptions );
534+
535+ $ requestParser = new RequestParser ($ request );
536+ $ requestParser ->setAllowedFilters (["name " , "value " ]);
537+ $ builder = $ requestParser ->getBuilder ();
538+
539+ $ query = $ builder ->getQuery ();
540+
541+ $ this ->assertEmpty (array_filter ($ query ->wheres , function ($ where ) use ($ ignoredKey ) {
542+ return $ where ["column " ] == $ ignoredKey ;
543+ }));
544+
545+ $ nameAndValueColumn = array_filter ($ query ->wheres , function ($ where ) use ($ nameKey , $ valueKey ) {
546+ return in_array ($ where ["column " ], [$ nameKey , $ valueKey ]);
547+ });
548+ $ this ->assertEquals (2 , count ($ nameAndValueColumn ));
549+ }
550+
551+ function testFilterIgnoreIgnoredFilter ()
552+ {
553+ $ uri = 'some_model ' ;
554+ $ controllerClass = MockModelController::class;
555+ $ ignoredKey = "omnisearch " ;
556+ $ notIgnoredKey = "selected_value " ;
557+ $ query = new ParameterBag ([
558+ "filter " => [
559+ $ notIgnoredKey => [
560+ "is " => "6 "
561+ ],
562+ $ ignoredKey => [
563+ "is " => "something "
564+ ],
565+ ],
566+ ]);
567+ $ requestParserOptions = [
568+ 'model_namespaces ' => [
569+ 'LIQRGV\QueryFilter\Mocks ' ,
570+ ]
571+ ];
572+
573+ $ request = $ this ->createControllerRequest ($ uri , $ controllerClass , $ query , $ requestParserOptions );
574+
575+ $ requestParser = new RequestParser ($ request );
576+ $ requestParser ->setIgnoredFilters ([$ ignoredKey ]);
577+ $ builder = $ requestParser ->getBuilder ();
578+
579+ $ query = $ builder ->getQuery ();
580+
581+ $ this ->assertEmpty (array_filter ($ query ->wheres , function ($ where ) use ($ ignoredKey ) {
582+ return $ where ["column " ] == $ ignoredKey ;
583+ }));
584+ $ this ->assertNotEmpty (array_filter ($ query ->wheres , function ($ where ) use ($ notIgnoredKey ) {
585+ return $ where ["column " ] == $ notIgnoredKey ;
586+ }));
587+ }
588+
589+ function testFilterIgnoredFilterShouldTakePrecedenceOverAllowedFilter ()
590+ {
591+ $ uri = 'some_model ' ;
592+ $ controllerClass = MockModelController::class;
593+ $ ignoredKey = "ignored_key " ;
594+ $ nameKey = "name " ;
595+ $ valueKey = "value " ;
596+ $ query = new ParameterBag ([
597+ "filter " => [
598+ $ nameKey => [
599+ "in " => "2,3,4 "
600+ ],
601+ $ valueKey => [
602+ "is " => "5 "
603+ ],
604+ $ ignoredKey => [
605+ "is " => "6 "
606+ ],
607+ ],
608+ ]);
609+ $ requestParserOptions = [
610+ 'model_namespaces ' => [
611+ 'LIQRGV\QueryFilter\Mocks ' ,
612+ ]
613+ ];
614+
615+ $ request = $ this ->createControllerRequest ($ uri , $ controllerClass , $ query , $ requestParserOptions );
616+
617+ $ requestParser = new RequestParser ($ request );
618+ $ requestParser ->setIgnoredFilters ([$ ignoredKey ]);
619+ $ requestParser ->setAllowedFilters ([$ nameKey , $ valueKey , $ ignoredKey ]);
620+ $ builder = $ requestParser ->getBuilder ();
621+
622+ $ query = $ builder ->getQuery ();
623+
624+ $ nameAndValueColumn = array_filter ($ query ->wheres , function ($ where ) use ($ nameKey , $ valueKey ) {
625+ return in_array ($ where ["column " ], [$ nameKey , $ valueKey ]);
626+ });
627+ $ this ->assertEquals (2 , count ($ nameAndValueColumn ));
628+ $ this ->assertEmpty (array_filter ($ query ->wheres , function ($ where ) use ($ ignoredKey ) {
629+ return $ where ["column " ] == $ ignoredKey ;
630+ }));
631+ }
503632}
0 commit comments