feat(seeder): update MenuSeeder and tests to reflect new admin menu structure; change border color in WebsiteTypeSeeder

This commit is contained in:
2026-08-03 09:07:49 -03:00
parent dbeaf19513
commit f1df6a5918
4 changed files with 115 additions and 16 deletions

View File

@@ -23,16 +23,54 @@ class MenuSeeder extends Seeder
'route' => '/product/:id', 'route' => '/product/:id',
], ],
['code' => 'checkout', 'label' => 'Finalizar compra', 'route' => '/checkout'], ['code' => 'checkout', 'label' => 'Finalizar compra', 'route' => '/checkout'],
['code' => 'admin.event', 'label' => 'Eventos', 'route' => '/admin/event'],
['code' => 'admin.catalog', 'label' => 'Catálogo', 'route' => '/admin/catalog'],
['code' => 'admin.combos', 'label' => 'Combos', 'route' => '/admin/combos'],
[ [
'code' => 'admin.categories', 'code' => 'main.adminapp',
'label' => 'Administración',
'content_type' => Menu::CONTENT_TYPE_DYNAMIC,
'route' => '/',
],
[
'code' => 'adminapp.event',
'label' => 'Eventos',
'parent_menu_code' => 'main.adminapp',
'route' => '/admin/event',
],
[
'code' => 'adminapp.inicio',
'label' => 'Inicio',
'parent_menu_code' => 'main.adminapp',
'route' => '/admin/inicio',
],
[
'code' => 'adminapp.catalog',
'label' => 'Catálogo',
'parent_menu_code' => 'main.adminapp',
'route' => '/admin/catalog',
],
[
'code' => 'adminapp.combos',
'label' => 'Combos',
'parent_menu_code' => 'main.adminapp',
'route' => '/admin/combos',
],
[
'code' => 'adminapp.categories',
'label' => 'Categorías', 'label' => 'Categorías',
'parent_menu_code' => 'main.adminapp',
'route' => '/admin/categories', 'route' => '/admin/categories',
], ],
['code' => 'admin.ventas', 'label' => 'Ventas', 'route' => '/admin/ventas'], [
['code' => 'admin.staff', 'label' => 'Staff', 'route' => '/admin/staff'], 'code' => 'adminapp.ventas',
'label' => 'Ventas',
'parent_menu_code' => 'main.adminapp',
'route' => '/admin/ventas',
],
[
'code' => 'adminapp.staff',
'label' => 'Staff',
'parent_menu_code' => 'main.adminapp',
'route' => '/admin/staff',
],
[ [
'code' => 'account', 'code' => 'account',
'label' => 'Mi cuenta', 'label' => 'Mi cuenta',
@@ -135,9 +173,30 @@ class MenuSeeder extends Seeder
->whereIn('code', ['profile', 'purchases', 'tickets']) ->whereIn('code', ['profile', 'purchases', 'tickets'])
->delete(); ->delete();
Menu::query()
->whereIn('code', [
'admin.event',
'admin.catalog',
'admin.combos',
'admin.categories',
'admin.ventas',
'admin.staff',
'event',
'catalog',
'combos',
'categories',
'ventas',
'staff',
])
->delete();
$allRoleMenuCodes = Menu::query()->pluck('code'); $allRoleMenuCodes = Menu::query()->pluck('code');
$adminAppMenuCodes = Menu::query()
->where('code', 'main.adminapp')
->orWhere('parent_menu_code', 'main.adminapp')
->pluck('code');
$userMenuCodes = Menu::query() $userMenuCodes = Menu::query()
->where('code', 'not like', 'admin.%') ->whereNotIn('code', $adminAppMenuCodes)
->pluck('code'); ->pluck('code');
Role::query() Role::query()

View File

@@ -19,7 +19,7 @@ class WebsiteTypeSeeder extends Seeder
'darker_body_color' => '#333333', 'darker_body_color' => '#333333',
'surface_color' => '#ffffff', 'surface_color' => '#ffffff',
'background_color' => '#f8f8f8', 'background_color' => '#f8f8f8',
'border_color' => '#f8f8f8', 'border_color' => '#EAEAEA',
]; ];
public function __construct(private readonly WebsiteTypeService $websiteTypeService) {} public function __construct(private readonly WebsiteTypeService $websiteTypeService) {}

View File

@@ -24,14 +24,30 @@ class MenuSeederTest extends TestCase
$this->seed(MenuSeeder::class); $this->seed(MenuSeeder::class);
$expectedMenus = [ $expectedMenus = [
'admin.catalog' => ['Catálogo', '/admin/catalog'], 'adminapp.catalog' => ['Catálogo', '/admin/catalog'],
'admin.categories' => ['Categorías', '/admin/categories'], 'adminapp.categories' => ['Categorías', '/admin/categories'],
'admin.combos' => ['Combos', '/admin/combos'], 'adminapp.combos' => ['Combos', '/admin/combos'],
'admin.event' => ['Eventos', '/admin/event'], 'adminapp.event' => ['Eventos', '/admin/event'],
'admin.staff' => ['Staff', '/admin/staff'], 'adminapp.staff' => ['Staff', '/admin/staff'],
'admin.ventas' => ['Ventas', '/admin/ventas'], 'adminapp.ventas' => ['Ventas', '/admin/ventas'],
]; ];
$adminApp = Menu::query()
->with('children')
->where('code', 'main.adminapp')
->firstOrFail();
$this->assertSame('Administración', $adminApp->label);
$this->assertSame(Menu::CONTENT_TYPE_DYNAMIC, $adminApp->content_type);
$this->assertSame('/', $adminApp->route);
$this->assertSame(
array_keys($expectedMenus),
$adminApp->children->pluck('code')->sort()->values()->all()
);
$this->assertTrue(
$tenant->menues()->where('menues.code', 'main.adminapp')->exists()
);
$adminMenus = Menu::query() $adminMenus = Menu::query()
->whereIn('code', array_keys($expectedMenus)) ->whereIn('code', array_keys($expectedMenus))
->get() ->get()
@@ -42,10 +58,28 @@ class MenuSeederTest extends TestCase
foreach ($expectedMenus as $code => [$label, $route]) { foreach ($expectedMenus as $code => [$label, $route]) {
$this->assertSame($label, $adminMenus->get($code)?->label); $this->assertSame($label, $adminMenus->get($code)?->label);
$this->assertSame($route, $adminMenus->get($code)?->route); $this->assertSame($route, $adminMenus->get($code)?->route);
$this->assertSame('main.adminapp', $adminMenus->get($code)?->parent_menu_code);
$this->assertTrue( $this->assertTrue(
$tenant->menues()->where('menues.code', $code)->exists() $tenant->menues()->where('menues.code', $code)->exists()
); );
} }
$this->assertFalse(
Menu::query()->whereIn('code', [
'admin.event',
'admin.catalog',
'admin.combos',
'admin.categories',
'admin.ventas',
'admin.staff',
'event',
'catalog',
'combos',
'categories',
'ventas',
'staff',
])->exists()
);
} }
public function test_it_assigns_menus_to_the_expected_roles(): void public function test_it_assigns_menus_to_the_expected_roles(): void
@@ -57,8 +91,12 @@ class MenuSeederTest extends TestCase
->orderBy('code') ->orderBy('code')
->pluck('code') ->pluck('code')
->all(); ->all();
$adminAppMenuCodes = Menu::query()
->where('code', 'main.adminapp')
->orWhere('parent_menu_code', 'main.adminapp')
->pluck('code');
$userMenuCodes = Menu::query() $userMenuCodes = Menu::query()
->where('code', 'not like', 'admin.%') ->whereNotIn('code', $adminAppMenuCodes)
->orderBy('code') ->orderBy('code')
->pluck('code') ->pluck('code')
->all(); ->all();
@@ -84,6 +122,8 @@ class MenuSeederTest extends TestCase
->all(); ->all();
$this->assertSame($userMenuCodes, $userRoleMenuCodes); $this->assertSame($userMenuCodes, $userRoleMenuCodes);
$this->assertNotContains('main.adminapp', $userRoleMenuCodes);
$this->assertNotContains('adminapp.catalog', $userRoleMenuCodes);
$this->assertDatabaseCount( $this->assertDatabaseCount(
'roles_menues', 'roles_menues',
(count($allMenuCodes) * 2) + count($userMenuCodes) (count($allMenuCodes) * 2) + count($userMenuCodes)

View File

@@ -33,7 +33,7 @@ class WebsiteTypeSeederTest extends TestCase
'darker_body_color' => '#333333', 'darker_body_color' => '#333333',
'surface_color' => '#ffffff', 'surface_color' => '#ffffff',
'background_color' => '#f8f8f8', 'background_color' => '#f8f8f8',
'border_color' => '#f8f8f8', 'border_color' => '#EAEAEA',
]; ];
$shopIt = WebsiteType::query() $shopIt = WebsiteType::query()