From 89f6dab0c4eaa898e648e676a3c27411bd7a5ebf Mon Sep 17 00:00:00 2001 From: ncoronel Date: Tue, 28 Jul 2026 10:42:55 -0300 Subject: [PATCH] feat(seeders): associate categories with tenant codes in seeders and tests --- database/seeders/CategorySeeder.php | 9 ++++++++- .../FiestaFutbolInfantilProductSeeder.php | 12 ++++++++---- .../ProductCatalogFromImagesSeeder.php | 4 ++-- .../FiestaFutbolInfantilProductSeederTest.php | 19 +++++++++++++++++++ .../ProductCatalogFromImagesSeederTest.php | 15 +++++++++++++++ 5 files changed, 52 insertions(+), 7 deletions(-) diff --git a/database/seeders/CategorySeeder.php b/database/seeders/CategorySeeder.php index 4ad5635..7ed4b59 100644 --- a/database/seeders/CategorySeeder.php +++ b/database/seeders/CategorySeeder.php @@ -3,6 +3,7 @@ namespace Database\Seeders; use App\Domains\Catalog\Models\Category; +use App\Domains\Tenant\Models\Tenant; use Illuminate\Database\Seeder; class CategorySeeder extends Seeder @@ -12,6 +13,12 @@ class CategorySeeder extends Seeder */ public function run(): void { + $tenant = Tenant::query()->where('codigo', 'sonder')->first(); + + if (! $tenant instanceof Tenant) { + return; + } + $categories = [ 'Remeras', 'Pantalones', @@ -23,7 +30,7 @@ class CategorySeeder extends Seeder foreach ($categories as $nombre) { Category::firstOrCreate([ 'nombre' => $nombre, - 'tenant_code' => null, + 'tenant_code' => $tenant->codigo, ]); } } diff --git a/database/seeders/FiestaFutbolInfantilProductSeeder.php b/database/seeders/FiestaFutbolInfantilProductSeeder.php index 240615f..b27fed6 100644 --- a/database/seeders/FiestaFutbolInfantilProductSeeder.php +++ b/database/seeders/FiestaFutbolInfantilProductSeeder.php @@ -30,11 +30,15 @@ class FiestaFutbolInfantilProductSeeder extends Seeder $ticketCategory = Category::query()->firstOrCreate([ 'nombre' => 'Entradas', - 'tenant_code' => null, + 'tenant_code' => $tenant->codigo, ]); $foodCategory = Category::query()->firstOrCreate([ 'nombre' => 'Gastronomía', - 'tenant_code' => null, + 'tenant_code' => $tenant->codigo, + ]); + $parkingCategory = Category::query()->firstOrCreate([ + 'nombre' => 'Estacionamiento', + 'tenant_code' => $tenant->codigo, ]); $dates = ['2026-10-09', '2026-10-10', '2026-10-11', '2026-10-12']; @@ -69,8 +73,8 @@ class FiestaFutbolInfantilProductSeeder extends Seeder ['slug' => 'pancho', 'nombre' => 'Pancho', 'precio' => 4000, 'category_id' => $foodCategory->id], ['slug' => 'coca-cola-500ml', 'nombre' => 'Coca Cola 500ml', 'precio' => 3000, 'category_id' => $foodCategory->id], ['slug' => 'agua-mineral-1l', 'nombre' => 'Agua Mineral 1L', 'precio' => 2500, 'category_id' => $foodCategory->id], - ['slug' => 'estacionamiento-auto', 'nombre' => 'Estacionamiento Auto', 'precio' => 5000, 'category_id' => $ticketCategory->id], - ['slug' => 'estacionamiento-moto', 'nombre' => 'Estacionamiento Moto', 'precio' => 2000, 'category_id' => $ticketCategory->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], ]; $createdItems = []; diff --git a/database/seeders/ProductCatalogFromImagesSeeder.php b/database/seeders/ProductCatalogFromImagesSeeder.php index 8df4ef8..b3585c7 100644 --- a/database/seeders/ProductCatalogFromImagesSeeder.php +++ b/database/seeders/ProductCatalogFromImagesSeeder.php @@ -236,11 +236,11 @@ class ProductCatalogFromImagesSeeder extends Seeder $category = Category::query() ->where('nombre', $metadata['category_name']) - ->whereNull('tenant_code') + ->where('tenant_code', $tenant->codigo) ->first(); if (! $category instanceof Category) { - throw new RuntimeException("Category '{$metadata['category_name']}' not found."); + throw new RuntimeException("Category '{$metadata['category_name']}' not found for tenant '{$tenant->codigo}'."); } $attributeCodes = Attribute::query() diff --git a/tests/Feature/Seeders/FiestaFutbolInfantilProductSeederTest.php b/tests/Feature/Seeders/FiestaFutbolInfantilProductSeederTest.php index 9acf98d..90b7429 100644 --- a/tests/Feature/Seeders/FiestaFutbolInfantilProductSeederTest.php +++ b/tests/Feature/Seeders/FiestaFutbolInfantilProductSeederTest.php @@ -9,6 +9,7 @@ use App\Domains\Catalog\Enums\GroupLayout; use App\Domains\Catalog\Enums\ProductLayout; use App\Domains\Catalog\Models\Attribute; use App\Domains\Catalog\Models\CatalogItem; +use App\Domains\Catalog\Models\Category; use App\Domains\Catalog\Models\FeaturedGroup; use App\Domains\Catalog\Models\Inventory; use App\Domains\Tenant\Models\Tenant; @@ -155,6 +156,24 @@ class FiestaFutbolInfantilProductSeederTest extends TestCase ); $this->assertSame(9, CatalogItem::query()->where('tenant_code', $tenant->codigo)->count()); $this->assertSame(10, Inventory::query()->count()); + $this->assertSame( + ['Entradas', 'Estacionamiento', 'Gastronomía'], + Category::query() + ->where('tenant_code', $tenant->codigo) + ->orderBy('nombre') + ->pluck('nombre') + ->all(), + ); + $this->assertSame( + 'Estacionamiento', + CatalogItem::query() + ->where('tenant_code', $tenant->codigo) + ->where('slug', 'estacionamiento-auto') + ->with('category') + ->sole() + ->category + ->nombre, + ); $featuredGroups = FeaturedGroup::query() ->where('tenant_code', $tenant->codigo) diff --git a/tests/Feature/Seeders/ProductCatalogFromImagesSeederTest.php b/tests/Feature/Seeders/ProductCatalogFromImagesSeederTest.php index 8fef115..f04915b 100644 --- a/tests/Feature/Seeders/ProductCatalogFromImagesSeederTest.php +++ b/tests/Feature/Seeders/ProductCatalogFromImagesSeederTest.php @@ -7,6 +7,7 @@ use App\Domains\Attachable\Models\Attachment; use App\Domains\Catalog\Enums\GroupLayout; use App\Domains\Catalog\Enums\ProductLayout; use App\Domains\Catalog\Models\CatalogItem; +use App\Domains\Catalog\Models\Category; use App\Domains\Catalog\Models\FeaturedGroup; use App\Domains\Tenant\Models\Tenant; use Database\Seeders\AttributeSeeder; @@ -91,5 +92,19 @@ class ProductCatalogFromImagesSeederTest extends TestCase ->pluck('catalog_item_id') ->diff($catalogItemIds), ); + $this->assertSame( + ['Accesorios', 'Buzos', 'Pantalones', 'Remeras', 'Zapatillas'], + Category::query() + ->where('tenant_code', $tenant->codigo) + ->orderBy('nombre') + ->pluck('nombre') + ->all(), + ); + $this->assertFalse( + CatalogItem::query() + ->where('tenant_code', $tenant->codigo) + ->whereHas('category', fn ($query) => $query->where('tenant_code', '!=', $tenant->codigo)) + ->exists(), + ); } }