99use EasyCorp \Bundle \EasyAdminBundle \Router \AdminRouteGenerator ;
1010use EasyCorp \Bundle \EasyAdminBundle \Router \AdminUrlGenerator ;
1111use Symfony \Bundle \FrameworkBundle \Test \KernelTestCase ;
12- use Symfony \Component \HttpFoundation \InputBag ;
1312use Symfony \Component \HttpFoundation \Request ;
1413
1514class MenuItemMatcherTest extends KernelTestCase
1615{
1716 public function testIsSelectedWhenContextIsNull ()
1817 {
19- $ request = $ this ->getRequestMock ();
18+ $ request = $ this ->createRequest ();
2019
2120 self ::bootKernel ();
2221 $ adminUrlGenerator = self ::getContainer ()->get (AdminUrlGenerator::class);
@@ -31,7 +30,7 @@ public function testIsSelectedWhenContextIsNull()
3130
3231 public function testIsSelectedWhenMenuItemIsSection ()
3332 {
34- $ request = $ this ->getRequestMock ();
33+ $ request = $ this ->createRequest ();
3534
3635 self ::bootKernel ();
3736 $ adminUrlGenerator = self ::getContainer ()->get (AdminUrlGenerator::class);
@@ -47,8 +46,8 @@ public function testIsSelectedWhenMenuItemIsSection()
4746
4847 public function testIsSelectedWithCrudControllers ()
4948 {
50- $ request = $ this ->getRequestMock (
51- getControllerFqcn : 'App\Controller\Admin\SomeController ' ,
49+ $ request = $ this ->createRequest (
50+ crudControllerFqcn : 'App\Controller\Admin\SomeController ' ,
5251 );
5352
5453 self ::bootKernel ();
@@ -68,10 +67,10 @@ public function testIsSelectedWithCrudControllers()
6867 $ menuItemMatcher ->markSelectedMenuItem ([$ menuItemDto ], $ request );
6968 $ this ->assertTrue ($ menuItemDto ->isSelected (), 'The CRUD controller matches ' );
7069
71- $ request = $ this ->getRequestMock (
72- getControllerFqcn : 'App\Controller\Admin\SomeController ' ,
73- getPrimaryKeyValue : '57 ' ,
74- getCurrentAction : 'edit ' ,
70+ $ request = $ this ->createRequest (
71+ crudControllerFqcn : 'App\Controller\Admin\SomeController ' ,
72+ entityId : '57 ' ,
73+ action : 'edit ' ,
7574 );
7675
7776 $ menuItemDto = $ this ->getMenuItemDto (crudControllerFqcn: 'App\Controller\Admin\SomeController ' , action: 'edit ' , entityId: '57 ' );
@@ -82,10 +81,10 @@ public function testIsSelectedWithCrudControllers()
8281 $ menuItemMatcher ->markSelectedMenuItem ([$ menuItemDto ], $ request );
8382 $ this ->assertFalse ($ menuItemDto ->isSelected (), 'The entity ID of the menu item does not match ' );
8483
85- $ request = $ this ->getRequestMock (
86- getControllerFqcn : 'App\Controller\Admin\SomeController ' ,
87- getPrimaryKeyValue : '57 ' ,
88- getCurrentAction : 'detail ' ,
84+ $ request = $ this ->createRequest (
85+ crudControllerFqcn : 'App\Controller\Admin\SomeController ' ,
86+ entityId : '57 ' ,
87+ action : 'detail ' ,
8988 );
9089
9190 $ menuItemDto = $ this ->getMenuItemDto (crudControllerFqcn: 'App\Controller\Admin\SomeController ' , action: Crud::PAGE_DETAIL , entityId: '57 ' );
@@ -99,7 +98,7 @@ public function testIsSelectedWithCrudControllers()
9998
10099 public function testIsSelectedWithRoutes ()
101100 {
102- $ request = $ this ->getRequestMock (
101+ $ request = $ this ->createRequest (
103102 routeName: 'some_route ' ,
104103 );
105104
@@ -117,7 +116,7 @@ public function testIsSelectedWithRoutes()
117116 $ menuItemMatcher ->markSelectedMenuItem ([$ menuItemDto ], $ request );
118117 $ this ->assertFalse ($ menuItemDto ->isSelected ());
119118
120- $ request = $ this ->getRequestMock (
119+ $ request = $ this ->createRequest (
121120 routeName: 'some_route ' ,
122121 routeParameters: ['foo1 ' => 'bar1 ' , 'foo2 ' => 'bar2 ' ],
123122 );
@@ -141,8 +140,9 @@ public function testIsSelectedWithRoutes()
141140
142141 public function testIsSelectedWithUrls ()
143142 {
144- $ request = $ this ->getRequestMock (
145- getUri: 'https://example.com/foo?bar=baz ' ,
143+ $ request = $ this ->createRequest (
144+ requestPath: '/foo ' ,
145+ queryParameters: ['bar ' => 'baz ' ],
146146 );
147147
148148 self ::bootKernel ();
@@ -182,7 +182,7 @@ public function testMenuWithDashboardItem()
182182 $ this ->getMenuItemDto (label: 'item2 ' , routeName: 'item2 ' ),
183183 ];
184184
185- $ request = $ this ->getRequestMock (
185+ $ request = $ this ->createRequest (
186186 routeName: 'item2 ' ,
187187 );
188188
@@ -198,8 +198,8 @@ public function testMenuWithDashboardItem()
198198 public function testComplexMenu ()
199199 {
200200 $ menuItems = $ this ->getComplexMenuItems ();
201- $ request = $ this ->getRequestMock (
202- getControllerFqcn : 'App\Controller\Admin\Controller1 ' ,
201+ $ request = $ this ->createRequest (
202+ crudControllerFqcn : 'App\Controller\Admin\Controller1 ' ,
203203 );
204204
205205 self ::bootKernel ();
@@ -214,9 +214,9 @@ public function testComplexMenu()
214214
215215 unset($ menuItems );
216216 $ menuItems = $ this ->getComplexMenuItems ();
217- $ request = $ this ->getRequestMock (
218- getControllerFqcn : 'App\Controller\Admin\Controller1 ' ,
219- getCurrentAction : 'edit ' ,
217+ $ request = $ this ->createRequest (
218+ crudControllerFqcn : 'App\Controller\Admin\Controller1 ' ,
219+ action : 'edit ' ,
220220 // the primary key value is missing on purpose in this example
221221 );
222222 $ menuItems = $ menuItemMatcher ->markSelectedMenuItem ($ menuItems , $ request );
@@ -225,40 +225,40 @@ public function testComplexMenu()
225225
226226 unset($ menuItems );
227227 $ menuItems = $ this ->getComplexMenuItems ();
228- $ request = $ this ->getRequestMock (
229- getControllerFqcn : 'App\Controller\Admin\Controller1 ' ,
230- getCurrentAction : 'new ' ,
228+ $ request = $ this ->createRequest (
229+ crudControllerFqcn : 'App\Controller\Admin\Controller1 ' ,
230+ action : 'new ' ,
231231 );
232232 $ menuItems = $ menuItemMatcher ->markSelectedMenuItem ($ menuItems , $ request );
233233 $ this ->assertSame ('item5 ' , $ this ->getSelectedMenuItemLabel ($ menuItems ), 'Perfect match: CRUD controller and action ' );
234234 $ this ->assertSame ('item4 ' , $ this ->getExpandedMenuItemLabel ($ menuItems ), 'A submenu item is matched, so its parent item must be marked as expanded ' );
235235
236236 unset($ menuItems );
237237 $ menuItems = $ this ->getComplexMenuItems ();
238- $ request = $ this ->getRequestMock (
239- getControllerFqcn : 'App\Controller\Admin\Controller2 ' ,
240- getCurrentAction : 'new ' ,
238+ $ request = $ this ->createRequest (
239+ crudControllerFqcn : 'App\Controller\Admin\Controller2 ' ,
240+ action : 'new ' ,
241241 );
242242 $ menuItems = $ menuItemMatcher ->markSelectedMenuItem ($ menuItems , $ request );
243243 $ this ->assertSame ('item3 ' , $ this ->getSelectedMenuItemLabel ($ menuItems ), 'Approximate match: controller matches, action doesn \'t match; the item with the INDEX action is selected by default ' );
244244 $ this ->assertNull ($ this ->getExpandedMenuItemLabel ($ menuItems ), 'No menu item is marked as expanded ' );
245245
246246 unset($ menuItems );
247247 $ menuItems = $ this ->getComplexMenuItems ();
248- $ request = $ this ->getRequestMock (
249- getControllerFqcn : 'App\Controller\Admin\Controller2 ' ,
250- getCurrentAction : 'edit ' ,
251- getPrimaryKeyValue : 'NOT_57 ' ,
248+ $ request = $ this ->createRequest (
249+ crudControllerFqcn : 'App\Controller\Admin\Controller2 ' ,
250+ action : 'edit ' ,
251+ entityId : 'NOT_57 ' ,
252252 );
253253 $ menuItems = $ menuItemMatcher ->markSelectedMenuItem ($ menuItems , $ request );
254254 $ this ->assertNull ($ this ->getSelectedMenuItemLabel ($ menuItems ), 'No match: controller and action match, but query parameters don \'t ' );
255255 $ this ->assertNull ($ this ->getExpandedMenuItemLabel ($ menuItems ), 'No menu item is marked as expanded ' );
256256
257257 unset($ menuItems );
258258 $ menuItems = $ this ->getComplexMenuItems ();
259- $ request = $ this ->getRequestMock (
260- getControllerFqcn : 'App\Controller\Admin\Controller3 ' ,
261- getCurrentAction : 'new ' ,
259+ $ request = $ this ->createRequest (
260+ crudControllerFqcn : 'App\Controller\Admin\Controller3 ' ,
261+ action : 'new ' ,
262262 );
263263 $ menuItems = $ menuItemMatcher ->markSelectedMenuItem ($ menuItems , $ request );
264264 $ this ->assertSame ('item7 ' , $ this ->getSelectedMenuItemLabel ($ menuItems ), 'Approximate match: only the controller matches; the item with the INDEX action is selected ' );
@@ -356,38 +356,25 @@ private function getMenuItemDto(?string $crudControllerFqcn = null, ?string $act
356356 return $ menuItemDto ;
357357 }
358358
359- private function getRequestMock (?string $ getControllerFqcn = null , ?string $ getPrimaryKeyValue = null , ?string $ getCurrentAction = null , ?string $ routeName = null , ?array $ routeParameters = null , ?string $ getUri = null ): Request
359+ private function createRequest (?string $ crudControllerFqcn = null , ?string $ entityId = null , ?string $ action = null , ?string $ routeName = null , ?array $ routeParameters = null , ?string $ requestPath = null , array $ queryParameters = [] ): Request
360360 {
361- $ queryParameters = [];
362-
363- if (null !== $ getControllerFqcn ) {
364- $ queryParameters [EA ::CRUD_CONTROLLER_FQCN ] = $ getControllerFqcn ;
365- }
366- if (null !== $ getCurrentAction ) {
367- $ queryParameters [EA ::CRUD_ACTION ] = $ getCurrentAction ;
368- }
369-
370- if (null !== $ getPrimaryKeyValue ) {
371- $ queryParameters [EA ::ENTITY_ID ] = $ getPrimaryKeyValue ;
372- }
373-
374- if (null !== $ routeName ) {
375- $ queryParameters [EA ::ROUTE_NAME ] = $ routeName ;
376- }
377- if (null !== $ routeParameters ) {
378- $ queryParameters [EA ::ROUTE_PARAMS ] = $ routeParameters ;
379- }
380-
381- $ request = $ this ->getMockBuilder (Request::class)->getMock ();
382- $ request ->query = new InputBag ($ queryParameters );
383- $ request ->attributes = new InputBag ($ queryParameters );
384-
385- if (null !== $ getUri ) {
386- $ request ->method ('getUri ' )->willReturn ($ getUri );
387- } else {
388- $ request ->method ('getUri ' )->willReturn ('/? ' .http_build_query ($ queryParameters ));
361+ $ queryParameters [EA ::CRUD_CONTROLLER_FQCN ] = $ crudControllerFqcn ;
362+ $ queryParameters [EA ::CRUD_ACTION ] = $ action ;
363+ $ queryParameters [EA ::ENTITY_ID ] = $ entityId ;
364+ $ queryParameters [EA ::ROUTE_NAME ] = $ routeName ;
365+ $ queryParameters [EA ::ROUTE_PARAMS ] = $ routeParameters ;
366+
367+ $ queryParameters = array_filter ($ queryParameters , static fn ($ value ) => null !== $ value );
368+
369+ $ serverParameters = [
370+ 'HTTPS ' => 'On ' ,
371+ 'HTTP_HOST ' => 'example.com ' ,
372+ 'QUERY_STRING ' => http_build_query ($ queryParameters ),
373+ ];
374+ if (null !== $ requestPath ) {
375+ $ serverParameters ['REQUEST_URI ' ] = '/ ' .ltrim ($ requestPath , '/ ' );
389376 }
390377
391- return $ request ;
378+ return new Request (query: $ queryParameters , attributes: $ queryParameters , server: $ serverParameters ) ;
392379 }
393380}
0 commit comments