MenuTest.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. use Illuminate\Support\Collection;
  3. use Webkul\Core\Menu;
  4. use Webkul\Core\Menu\MenuItem;
  5. /**
  6. * Create config for menu items.
  7. */
  8. beforeEach(function () {
  9. config()->set('menu.admin', [
  10. [
  11. 'key' => 'dashboard',
  12. 'name' => 'admin::app.components.layouts.sidebar.dashboard',
  13. 'route' => 'admin.dashboard.index',
  14. 'sort' => 1,
  15. 'icon' => 'icon-dashboard',
  16. ], [
  17. 'key' => 'sales',
  18. 'name' => 'admin::app.components.layouts.sidebar.sales',
  19. 'route' => 'admin.sales.orders.index',
  20. 'sort' => 2,
  21. 'icon' => 'icon-sales',
  22. ], [
  23. 'key' => 'sales.orders',
  24. 'name' => 'admin::app.components.layouts.sidebar.orders',
  25. 'route' => 'admin.sales.orders.index',
  26. 'sort' => 1,
  27. 'icon' => '',
  28. ],
  29. ]);
  30. });
  31. it('should add and get menu items', function () {
  32. // Arrange.
  33. $menu = new Menu;
  34. foreach (config('menu.admin') as $menuItem) {
  35. $menu->addItem(new MenuItem(
  36. key: $menuItem['key'],
  37. name: trans($menuItem['name']),
  38. route: $menuItem['route'],
  39. sort: $menuItem['sort'],
  40. icon: $menuItem['icon'],
  41. children: collect([]),
  42. ));
  43. }
  44. $menuItems = $menu->getItems('admin');
  45. // Act and Assert.
  46. expect($menuItems->first()->key)->toBe('dashboard');
  47. expect($menuItems->first()->name)->toBe(trans('admin::app.components.layouts.sidebar.dashboard'));
  48. expect($menuItems->first()->route)->toBe('admin.dashboard.index');
  49. expect($menuItems->first()->sort)->toBe(1);
  50. expect($menuItems->first()->icon)->toBe('icon-dashboard');
  51. expect($menuItems->last()->key)->toBe('sales');
  52. });
  53. it('should process sub menu items', function () {
  54. // Arrange.
  55. $menu = new Menu;
  56. $class = new ReflectionClass(Menu::class);
  57. $method = $class->getMethod('processSubMenuItems');
  58. $subMenuItems = $method->invoke($menu, config('menu.admin'));
  59. // Act and Assert.
  60. expect($subMenuItems)->toBeInstanceOf(Collection::class);
  61. expect($subMenuItems->count())->toBe(3);
  62. expect($subMenuItems->first())->toBeInstanceOf(MenuItem::class);
  63. expect($subMenuItems->first()->key)->toBe('dashboard');
  64. expect($subMenuItems->first()->name)->toBe(trans('admin::app.components.layouts.sidebar.dashboard'));
  65. expect($subMenuItems->first()->route)->toBe('admin.dashboard.index');
  66. expect($subMenuItems->first()->sort)->toBe(1);
  67. expect($subMenuItems->first()->icon)->toBe('icon-dashboard');
  68. expect($subMenuItems->last()->key)->toBe('sales');
  69. expect($subMenuItems->last()->name)->toBe(trans('admin::app.components.layouts.sidebar.sales'));
  70. });