9
9
use EasyCorp \Bundle \EasyAdminBundle \Router \AdminRouteGenerator ;
10
10
use EasyCorp \Bundle \EasyAdminBundle \Router \AdminUrlGenerator ;
11
11
use Symfony \Bundle \FrameworkBundle \Test \KernelTestCase ;
12
- use Symfony \Component \HttpFoundation \InputBag ;
13
12
use Symfony \Component \HttpFoundation \Request ;
14
13
15
14
class MenuItemMatcherTest extends KernelTestCase
16
15
{
17
16
public function testIsSelectedWhenContextIsNull ()
18
17
{
19
- $ request = $ this ->getRequestMock ();
18
+ $ request = $ this ->createRequest ();
20
19
21
20
self ::bootKernel ();
22
21
$ adminUrlGenerator = self ::getContainer ()->get (AdminUrlGenerator::class);
@@ -31,7 +30,7 @@ public function testIsSelectedWhenContextIsNull()
31
30
32
31
public function testIsSelectedWhenMenuItemIsSection ()
33
32
{
34
- $ request = $ this ->getRequestMock ();
33
+ $ request = $ this ->createRequest ();
35
34
36
35
self ::bootKernel ();
37
36
$ adminUrlGenerator = self ::getContainer ()->get (AdminUrlGenerator::class);
@@ -47,8 +46,8 @@ public function testIsSelectedWhenMenuItemIsSection()
47
46
48
47
public function testIsSelectedWithCrudControllers ()
49
48
{
50
- $ request = $ this ->getRequestMock (
51
- getControllerFqcn : 'App\Controller\Admin\SomeController ' ,
49
+ $ request = $ this ->createRequest (
50
+ crudControllerFqcn : 'App\Controller\Admin\SomeController ' ,
52
51
);
53
52
54
53
self ::bootKernel ();
@@ -68,10 +67,10 @@ public function testIsSelectedWithCrudControllers()
68
67
$ menuItemMatcher ->markSelectedMenuItem ([$ menuItemDto ], $ request );
69
68
$ this ->assertTrue ($ menuItemDto ->isSelected (), 'The CRUD controller matches ' );
70
69
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 ' ,
75
74
);
76
75
77
76
$ menuItemDto = $ this ->getMenuItemDto (crudControllerFqcn: 'App\Controller\Admin\SomeController ' , action: 'edit ' , entityId: '57 ' );
@@ -82,10 +81,10 @@ public function testIsSelectedWithCrudControllers()
82
81
$ menuItemMatcher ->markSelectedMenuItem ([$ menuItemDto ], $ request );
83
82
$ this ->assertFalse ($ menuItemDto ->isSelected (), 'The entity ID of the menu item does not match ' );
84
83
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 ' ,
89
88
);
90
89
91
90
$ menuItemDto = $ this ->getMenuItemDto (crudControllerFqcn: 'App\Controller\Admin\SomeController ' , action: Crud::PAGE_DETAIL , entityId: '57 ' );
@@ -99,7 +98,7 @@ public function testIsSelectedWithCrudControllers()
99
98
100
99
public function testIsSelectedWithRoutes ()
101
100
{
102
- $ request = $ this ->getRequestMock (
101
+ $ request = $ this ->createRequest (
103
102
routeName: 'some_route ' ,
104
103
);
105
104
@@ -117,7 +116,7 @@ public function testIsSelectedWithRoutes()
117
116
$ menuItemMatcher ->markSelectedMenuItem ([$ menuItemDto ], $ request );
118
117
$ this ->assertFalse ($ menuItemDto ->isSelected ());
119
118
120
- $ request = $ this ->getRequestMock (
119
+ $ request = $ this ->createRequest (
121
120
routeName: 'some_route ' ,
122
121
routeParameters: ['foo1 ' => 'bar1 ' , 'foo2 ' => 'bar2 ' ],
123
122
);
@@ -141,8 +140,9 @@ public function testIsSelectedWithRoutes()
141
140
142
141
public function testIsSelectedWithUrls ()
143
142
{
144
- $ request = $ this ->getRequestMock (
145
- getUri: 'https://example.com/foo?bar=baz ' ,
143
+ $ request = $ this ->createRequest (
144
+ requestPath: '/foo ' ,
145
+ queryParameters: ['bar ' => 'baz ' ],
146
146
);
147
147
148
148
self ::bootKernel ();
@@ -182,7 +182,7 @@ public function testMenuWithDashboardItem()
182
182
$ this ->getMenuItemDto (label: 'item2 ' , routeName: 'item2 ' ),
183
183
];
184
184
185
- $ request = $ this ->getRequestMock (
185
+ $ request = $ this ->createRequest (
186
186
routeName: 'item2 ' ,
187
187
);
188
188
@@ -198,8 +198,8 @@ public function testMenuWithDashboardItem()
198
198
public function testComplexMenu ()
199
199
{
200
200
$ menuItems = $ this ->getComplexMenuItems ();
201
- $ request = $ this ->getRequestMock (
202
- getControllerFqcn : 'App\Controller\Admin\Controller1 ' ,
201
+ $ request = $ this ->createRequest (
202
+ crudControllerFqcn : 'App\Controller\Admin\Controller1 ' ,
203
203
);
204
204
205
205
self ::bootKernel ();
@@ -214,9 +214,9 @@ public function testComplexMenu()
214
214
215
215
unset($ menuItems );
216
216
$ 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 ' ,
220
220
// the primary key value is missing on purpose in this example
221
221
);
222
222
$ menuItems = $ menuItemMatcher ->markSelectedMenuItem ($ menuItems , $ request );
@@ -225,40 +225,40 @@ public function testComplexMenu()
225
225
226
226
unset($ menuItems );
227
227
$ 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 ' ,
231
231
);
232
232
$ menuItems = $ menuItemMatcher ->markSelectedMenuItem ($ menuItems , $ request );
233
233
$ this ->assertSame ('item5 ' , $ this ->getSelectedMenuItemLabel ($ menuItems ), 'Perfect match: CRUD controller and action ' );
234
234
$ this ->assertSame ('item4 ' , $ this ->getExpandedMenuItemLabel ($ menuItems ), 'A submenu item is matched, so its parent item must be marked as expanded ' );
235
235
236
236
unset($ menuItems );
237
237
$ 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 ' ,
241
241
);
242
242
$ menuItems = $ menuItemMatcher ->markSelectedMenuItem ($ menuItems , $ request );
243
243
$ this ->assertSame ('item3 ' , $ this ->getSelectedMenuItemLabel ($ menuItems ), 'Approximate match: controller matches, action doesn \'t match; the item with the INDEX action is selected by default ' );
244
244
$ this ->assertNull ($ this ->getExpandedMenuItemLabel ($ menuItems ), 'No menu item is marked as expanded ' );
245
245
246
246
unset($ menuItems );
247
247
$ 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 ' ,
252
252
);
253
253
$ menuItems = $ menuItemMatcher ->markSelectedMenuItem ($ menuItems , $ request );
254
254
$ this ->assertNull ($ this ->getSelectedMenuItemLabel ($ menuItems ), 'No match: controller and action match, but query parameters don \'t ' );
255
255
$ this ->assertNull ($ this ->getExpandedMenuItemLabel ($ menuItems ), 'No menu item is marked as expanded ' );
256
256
257
257
unset($ menuItems );
258
258
$ 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 ' ,
262
262
);
263
263
$ menuItems = $ menuItemMatcher ->markSelectedMenuItem ($ menuItems , $ request );
264
264
$ 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
356
356
return $ menuItemDto ;
357
357
}
358
358
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
360
360
{
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 , '/ ' );
389
376
}
390
377
391
- return $ request ;
378
+ return new Request (query: $ queryParameters , attributes: $ queryParameters , server: $ serverParameters ) ;
392
379
}
393
380
}
0 commit comments