From 7f01adab739f96390ba9d054db4fad31391030bb Mon Sep 17 00:00:00 2001 From: ncoronel Date: Thu, 6 Aug 2026 14:12:58 -0300 Subject: [PATCH] feat(seeders): update FiestaFutbolInfantil seeders and tests to include new categories and menu items --- .../FiestaFutbolInfantilProductSeeder.php | 59 +++++++++---------- database/seeders/MenuSeeder.php | 34 +++++++++++ .../FiestaFutbolInfantilProductSeederTest.php | 18 +++--- tests/Feature/Seeders/MenuSeederTest.php | 19 +++++- 4 files changed, 88 insertions(+), 42 deletions(-) diff --git a/database/seeders/FiestaFutbolInfantilProductSeeder.php b/database/seeders/FiestaFutbolInfantilProductSeeder.php index 5797c0b..6a947ba 100644 --- a/database/seeders/FiestaFutbolInfantilProductSeeder.php +++ b/database/seeders/FiestaFutbolInfantilProductSeeder.php @@ -30,6 +30,11 @@ class FiestaFutbolInfantilProductSeeder extends Seeder } $this->deleteExistingCatalog($tenant); + FeaturedGroup::query()->where('tenant_code', $tenant->codigo)->delete(); + Category::query() + ->where('tenant_code', $tenant->codigo) + ->update(['categoria_id' => null]); + Category::query()->where('tenant_code', $tenant->codigo)->delete(); $event = Event::query()->updateOrCreate( [ @@ -58,24 +63,16 @@ class FiestaFutbolInfantilProductSeeder extends Seeder 'nombre' => 'Entradas', 'tenant_code' => $tenant->codigo, ]); + $accommodationCategory = Category::query()->firstOrCreate([ + 'nombre' => 'Alojamientos', + 'tenant_code' => $tenant->codigo, + ]); + $merchandisingCategory = Category::query()->firstOrCreate([ + 'nombre' => 'Merchandising', + 'tenant_code' => $tenant->codigo, + ]); $foodCategory = Category::query()->firstOrCreate([ - 'nombre' => 'Gastronomía', - 'tenant_code' => $tenant->codigo, - ]); - $mealCategory = Category::query()->updateOrCreate([ - 'nombre' => 'Comidas', - 'tenant_code' => $tenant->codigo, - ], [ - 'categoria_id' => $foodCategory->id, - ]); - $drinkCategory = Category::query()->updateOrCreate([ - 'nombre' => 'Bebidas', - 'tenant_code' => $tenant->codigo, - ], [ - 'categoria_id' => $foodCategory->id, - ]); - $parkingCategory = Category::query()->firstOrCreate([ - 'nombre' => 'Estacionamiento', + 'nombre' => 'Comida', 'tenant_code' => $tenant->codigo, ]); @@ -106,12 +103,12 @@ class FiestaFutbolInfantilProductSeeder extends Seeder ]); $items = [ - ['slug' => 'hamburguesa-papa-frita', 'nombre' => 'Hamburguesa con papa frita', 'precio' => 8000, 'category_id' => $mealCategory->id], - ['slug' => 'pancho', 'nombre' => 'Pancho', 'precio' => 4000, 'category_id' => $mealCategory->id], - ['slug' => 'coca-cola-500ml', 'nombre' => 'Coca Cola 500ml', 'precio' => 3000, 'category_id' => $drinkCategory->id], - ['slug' => 'agua-mineral-1l', 'nombre' => 'Agua Mineral 1L', 'precio' => 2500, 'category_id' => $drinkCategory->id], - ['slug' => 'estacionamiento-auto', 'nombre' => 'Estacionamiento Auto', 'precio' => 5000, 'category_id' => $parkingCategory->id], - ['slug' => 'estacionamiento-moto', 'nombre' => 'Estacionamiento Moto', 'precio' => 2000, 'category_id' => $parkingCategory->id], + ['slug' => 'alojamiento-por-noche', 'nombre' => 'Alojamiento por noche', 'precio' => 35000, 'category_id' => $accommodationCategory->id], + ['slug' => 'alojamiento-fin-de-semana', 'nombre' => 'Alojamiento fin de semana', 'precio' => 90000, 'category_id' => $accommodationCategory->id], + ['slug' => 'remera-oficial', 'nombre' => 'Remera oficial', 'precio' => 18000, 'category_id' => $merchandisingCategory->id], + ['slug' => 'gorra-oficial', 'nombre' => 'Gorra oficial', 'precio' => 12000, 'category_id' => $merchandisingCategory->id], + ['slug' => 'hamburguesa-papa-frita', 'nombre' => 'Hamburguesa con papa frita', 'precio' => 8000, 'category_id' => $foodCategory->id], + ['slug' => 'pancho', 'nombre' => 'Pancho', 'precio' => 4000, 'category_id' => $foodCategory->id], ]; $createdItems = []; @@ -157,7 +154,7 @@ class FiestaFutbolInfantilProductSeeder extends Seeder 'nombre' => 'Combo 2 Panchos + 2 Hamburguesas', 'descripcion' => 'Incluye 2 panchos y 2 hamburguesas con papa frita.', 'precio' => 24000, - 'category_id' => $mealCategory->id, + 'category_id' => $foodCategory->id, 'components' => [ [ 'catalog_item_id' => $createdItems['pancho']->id, @@ -172,9 +169,9 @@ class FiestaFutbolInfantilProductSeeder extends Seeder $this->seedFeaturedGroups($tenant, [ 'Entradas' => $ticketCategory, - 'Estacionamiento' => $parkingCategory, - 'Comidas' => $mealCategory, - 'Bebidas' => $drinkCategory, + 'Alojamientos' => $accommodationCategory, + 'Merchandising' => $merchandisingCategory, + 'Comida' => $foodCategory, ]); } @@ -194,22 +191,20 @@ class FiestaFutbolInfantilProductSeeder extends Seeder /** @param array $categories */ private function seedFeaturedGroups(Tenant $tenant, array $categories): void { - FeaturedGroup::query()->where('tenant_code', $tenant->codigo)->delete(); - $groups = [ 'Entradas' => [ 'product_layout' => ProductLayout::Row, 'group_layout' => GroupLayout::SimpleVertical, ], - 'Estacionamiento' => [ + 'Alojamientos' => [ 'product_layout' => ProductLayout::ColumnWithCart, 'group_layout' => GroupLayout::Simple, ], - 'Comidas' => [ + 'Merchandising' => [ 'product_layout' => ProductLayout::ColumnWithCart, 'group_layout' => GroupLayout::Simple, ], - 'Bebidas' => [ + 'Comida' => [ 'product_layout' => ProductLayout::ColumnWithCart, 'group_layout' => GroupLayout::Simple, ], diff --git a/database/seeders/MenuSeeder.php b/database/seeders/MenuSeeder.php index 034d35f..2605b1a 100644 --- a/database/seeders/MenuSeeder.php +++ b/database/seeders/MenuSeeder.php @@ -71,6 +71,30 @@ class MenuSeeder extends Seeder 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/staff', ], + [ + 'code' => 'adminapp.fiesta-futbol-infantil.entradas', + 'label' => 'Entradas', + 'parent_menu_code' => 'main.adminapp', + 'route' => '/admin/entradas', + ], + [ + 'code' => 'adminapp.fiesta-futbol-infantil.alojamientos', + 'label' => 'Alojamientos', + 'parent_menu_code' => 'main.adminapp', + 'route' => '/admin/alojamientos', + ], + [ + 'code' => 'adminapp.fiesta-futbol-infantil.merchandising', + 'label' => 'Merchandising', + 'parent_menu_code' => 'main.adminapp', + 'route' => '/admin/merchandising', + ], + [ + 'code' => 'adminapp.fiesta-futbol-infantil.comida', + 'label' => 'Comida', + 'parent_menu_code' => 'main.adminapp', + 'route' => '/admin/comidas', + ], [ 'code' => 'account', 'label' => 'Mi cuenta', @@ -222,6 +246,12 @@ class MenuSeeder extends Seeder 'sonder', 'fiesta_futbol_infantil', ]; + $fiestaCategoryMenuCodes = [ + 'adminapp.fiesta-futbol-infantil.entradas', + 'adminapp.fiesta-futbol-infantil.alojamientos', + 'adminapp.fiesta-futbol-infantil.merchandising', + 'adminapp.fiesta-futbol-infantil.comida', + ]; $frequentlyAskedQuestions = [ [ 'pregunta' => '¿Hay algún límite de compra?', @@ -279,6 +309,10 @@ class MenuSeeder extends Seeder $menuCodes = array_diff($menuCodes, $helpMenuCodes); } + if ($tenant->codigo !== 'fiesta_futbol_infantil') { + $menuCodes = array_diff($menuCodes, $fiestaCategoryMenuCodes); + } + // Usar sync para asociar los menues al tenant $tenant->menues()->sync($menuCodes); diff --git a/tests/Feature/Seeders/FiestaFutbolInfantilProductSeederTest.php b/tests/Feature/Seeders/FiestaFutbolInfantilProductSeederTest.php index edf87ce..8eb8c1e 100644 --- a/tests/Feature/Seeders/FiestaFutbolInfantilProductSeederTest.php +++ b/tests/Feature/Seeders/FiestaFutbolInfantilProductSeederTest.php @@ -175,7 +175,7 @@ class FiestaFutbolInfantilProductSeederTest extends TestCase $this->assertSame(9, CatalogItem::query()->where('tenant_code', $tenant->codigo)->count()); $this->assertSame(10, Inventory::query()->count()); $this->assertSame( - ['Bebidas', 'Comidas', 'Entradas', 'Estacionamiento', 'Gastronomía'], + ['Alojamientos', 'Comida', 'Entradas', 'Merchandising'], Category::query() ->where('tenant_code', $tenant->codigo) ->orderBy('nombre') @@ -183,10 +183,10 @@ class FiestaFutbolInfantilProductSeederTest extends TestCase ->all(), ); $this->assertSame( - 'Estacionamiento', + 'Merchandising', CatalogItem::query() ->where('tenant_code', $tenant->codigo) - ->where('slug', 'estacionamiento-auto') + ->where('slug', 'remera-oficial') ->with('category') ->sole() ->category @@ -202,9 +202,9 @@ class FiestaFutbolInfantilProductSeederTest extends TestCase $this->assertSame( [ 'Entradas' => ['entrada-general', 'entrada-general-todos-los-dias'], - 'Estacionamiento' => ['estacionamiento-auto', 'estacionamiento-moto'], - 'Comidas' => ['hamburguesa-papa-frita', 'pancho', 'combo-2-panchos-2-hamburguesas'], - 'Bebidas' => ['coca-cola-500ml', 'agua-mineral-1l'], + 'Alojamientos' => ['alojamiento-por-noche', 'alojamiento-fin-de-semana'], + 'Merchandising' => ['remera-oficial', 'gorra-oficial'], + 'Comida' => ['hamburguesa-papa-frita', 'pancho', 'combo-2-panchos-2-hamburguesas'], ], $featuredGroups ->mapWithKeys(fn (FeaturedGroup $group): array => [ @@ -216,9 +216,9 @@ class FiestaFutbolInfantilProductSeederTest extends TestCase $this->assertSame( [ ['Entradas', FeaturedGroupSource::Category, 'Entradas', ProductLayout::Row, GroupLayout::SimpleVertical, 0], - ['Estacionamiento', FeaturedGroupSource::Category, 'Estacionamiento', ProductLayout::ColumnWithCart, GroupLayout::Simple, 1], - ['Comidas', FeaturedGroupSource::Category, 'Comidas', ProductLayout::ColumnWithCart, GroupLayout::Simple, 2], - ['Bebidas', FeaturedGroupSource::Category, 'Bebidas', ProductLayout::ColumnWithCart, GroupLayout::Simple, 3], + ['Alojamientos', FeaturedGroupSource::Category, 'Alojamientos', ProductLayout::ColumnWithCart, GroupLayout::Simple, 1], + ['Merchandising', FeaturedGroupSource::Category, 'Merchandising', ProductLayout::ColumnWithCart, GroupLayout::Simple, 2], + ['Comida', FeaturedGroupSource::Category, 'Comida', ProductLayout::ColumnWithCart, GroupLayout::Simple, 3], ], $featuredGroups ->map(fn (FeaturedGroup $group): array => [ diff --git a/tests/Feature/Seeders/MenuSeederTest.php b/tests/Feature/Seeders/MenuSeederTest.php index 7c84f7e..ffbc56c 100644 --- a/tests/Feature/Seeders/MenuSeederTest.php +++ b/tests/Feature/Seeders/MenuSeederTest.php @@ -20,6 +20,7 @@ class MenuSeederTest extends TestCase public function test_it_seeds_the_admin_menus(): void { $tenant = $this->createTenant('admin_tenant'); + $fiestaTenant = $this->createTenant('fiesta_futbol_infantil'); $this->seed(MenuSeeder::class); @@ -31,6 +32,12 @@ class MenuSeederTest extends TestCase 'adminapp.staff' => ['Staff', '/admin/staff'], 'adminapp.ventas' => ['Ventas', '/admin/ventas'], ]; + $fiestaCategoryMenus = [ + 'adminapp.fiesta-futbol-infantil.entradas' => ['Entradas', '/admin/entradas'], + 'adminapp.fiesta-futbol-infantil.alojamientos' => ['Alojamientos', '/admin/alojamientos'], + 'adminapp.fiesta-futbol-infantil.merchandising' => ['Merchandising', '/admin/merchandising'], + 'adminapp.fiesta-futbol-infantil.comida' => ['Comida', '/admin/comidas'], + ]; $adminApp = Menu::query() ->with('children') @@ -41,7 +48,7 @@ class MenuSeederTest extends TestCase $this->assertSame(Menu::CONTENT_TYPE_DYNAMIC, $adminApp->content_type); $this->assertSame('/', $adminApp->route); $this->assertSame( - array_keys($expectedMenus), + array_keys([...$expectedMenus, ...$fiestaCategoryMenus]), $adminApp->children->pluck('code')->sort()->values()->all() ); $this->assertTrue( @@ -64,6 +71,16 @@ class MenuSeederTest extends TestCase ); } + foreach ($fiestaCategoryMenus as $code => [$label, $route]) { + $menu = Menu::query()->where('code', $code)->firstOrFail(); + + $this->assertSame($label, $menu->label); + $this->assertSame($route, $menu->route); + $this->assertSame('main.adminapp', $menu->parent_menu_code); + $this->assertFalse($tenant->menues()->where('menues.code', $code)->exists()); + $this->assertTrue($fiestaTenant->menues()->where('menues.code', $code)->exists()); + } + $this->assertFalse( Menu::query()->whereIn('code', [ 'admin.event',