From f1df6a59180993983f307d4ae5a8f7960cd5ba0a Mon Sep 17 00:00:00 2001 From: ncoronel Date: Mon, 3 Aug 2026 09:07:49 -0300 Subject: [PATCH] feat(seeder): update MenuSeeder and tests to reflect new admin menu structure; change border color in WebsiteTypeSeeder --- database/seeders/MenuSeeder.php | 73 +++++++++++++++++-- database/seeders/WebsiteTypeSeeder.php | 2 +- tests/Feature/Seeders/MenuSeederTest.php | 54 ++++++++++++-- .../Feature/Seeders/WebsiteTypeSeederTest.php | 2 +- 4 files changed, 115 insertions(+), 16 deletions(-) diff --git a/database/seeders/MenuSeeder.php b/database/seeders/MenuSeeder.php index 075b9bc..034d35f 100644 --- a/database/seeders/MenuSeeder.php +++ b/database/seeders/MenuSeeder.php @@ -23,16 +23,54 @@ class MenuSeeder extends Seeder 'route' => '/product/:id', ], ['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', + 'parent_menu_code' => 'main.adminapp', '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', 'label' => 'Mi cuenta', @@ -135,9 +173,30 @@ class MenuSeeder extends Seeder ->whereIn('code', ['profile', 'purchases', 'tickets']) ->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'); + $adminAppMenuCodes = Menu::query() + ->where('code', 'main.adminapp') + ->orWhere('parent_menu_code', 'main.adminapp') + ->pluck('code'); $userMenuCodes = Menu::query() - ->where('code', 'not like', 'admin.%') + ->whereNotIn('code', $adminAppMenuCodes) ->pluck('code'); Role::query() diff --git a/database/seeders/WebsiteTypeSeeder.php b/database/seeders/WebsiteTypeSeeder.php index 95b0889..556fe7d 100644 --- a/database/seeders/WebsiteTypeSeeder.php +++ b/database/seeders/WebsiteTypeSeeder.php @@ -19,7 +19,7 @@ class WebsiteTypeSeeder extends Seeder 'darker_body_color' => '#333333', 'surface_color' => '#ffffff', 'background_color' => '#f8f8f8', - 'border_color' => '#f8f8f8', + 'border_color' => '#EAEAEA', ]; public function __construct(private readonly WebsiteTypeService $websiteTypeService) {} diff --git a/tests/Feature/Seeders/MenuSeederTest.php b/tests/Feature/Seeders/MenuSeederTest.php index 25924a5..7c84f7e 100644 --- a/tests/Feature/Seeders/MenuSeederTest.php +++ b/tests/Feature/Seeders/MenuSeederTest.php @@ -24,14 +24,30 @@ class MenuSeederTest extends TestCase $this->seed(MenuSeeder::class); $expectedMenus = [ - 'admin.catalog' => ['Catálogo', '/admin/catalog'], - 'admin.categories' => ['Categorías', '/admin/categories'], - 'admin.combos' => ['Combos', '/admin/combos'], - 'admin.event' => ['Eventos', '/admin/event'], - 'admin.staff' => ['Staff', '/admin/staff'], - 'admin.ventas' => ['Ventas', '/admin/ventas'], + 'adminapp.catalog' => ['Catálogo', '/admin/catalog'], + 'adminapp.categories' => ['Categorías', '/admin/categories'], + 'adminapp.combos' => ['Combos', '/admin/combos'], + 'adminapp.event' => ['Eventos', '/admin/event'], + 'adminapp.staff' => ['Staff', '/admin/staff'], + '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() ->whereIn('code', array_keys($expectedMenus)) ->get() @@ -42,10 +58,28 @@ class MenuSeederTest extends TestCase foreach ($expectedMenus as $code => [$label, $route]) { $this->assertSame($label, $adminMenus->get($code)?->label); $this->assertSame($route, $adminMenus->get($code)?->route); + $this->assertSame('main.adminapp', $adminMenus->get($code)?->parent_menu_code); $this->assertTrue( $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 @@ -57,8 +91,12 @@ class MenuSeederTest extends TestCase ->orderBy('code') ->pluck('code') ->all(); + $adminAppMenuCodes = Menu::query() + ->where('code', 'main.adminapp') + ->orWhere('parent_menu_code', 'main.adminapp') + ->pluck('code'); $userMenuCodes = Menu::query() - ->where('code', 'not like', 'admin.%') + ->whereNotIn('code', $adminAppMenuCodes) ->orderBy('code') ->pluck('code') ->all(); @@ -84,6 +122,8 @@ class MenuSeederTest extends TestCase ->all(); $this->assertSame($userMenuCodes, $userRoleMenuCodes); + $this->assertNotContains('main.adminapp', $userRoleMenuCodes); + $this->assertNotContains('adminapp.catalog', $userRoleMenuCodes); $this->assertDatabaseCount( 'roles_menues', (count($allMenuCodes) * 2) + count($userMenuCodes) diff --git a/tests/Feature/Seeders/WebsiteTypeSeederTest.php b/tests/Feature/Seeders/WebsiteTypeSeederTest.php index e2747e3..4cffc3a 100644 --- a/tests/Feature/Seeders/WebsiteTypeSeederTest.php +++ b/tests/Feature/Seeders/WebsiteTypeSeederTest.php @@ -33,7 +33,7 @@ class WebsiteTypeSeederTest extends TestCase 'darker_body_color' => '#333333', 'surface_color' => '#ffffff', 'background_color' => '#f8f8f8', - 'border_color' => '#f8f8f8', + 'border_color' => '#EAEAEA', ]; $shopIt = WebsiteType::query()