feat(seeders): associate categories with tenant codes in seeders and tests
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
namespace Database\Seeders;
|
namespace Database\Seeders;
|
||||||
|
|
||||||
use App\Domains\Catalog\Models\Category;
|
use App\Domains\Catalog\Models\Category;
|
||||||
|
use App\Domains\Tenant\Models\Tenant;
|
||||||
use Illuminate\Database\Seeder;
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
class CategorySeeder extends Seeder
|
class CategorySeeder extends Seeder
|
||||||
@@ -12,6 +13,12 @@ class CategorySeeder extends Seeder
|
|||||||
*/
|
*/
|
||||||
public function run(): void
|
public function run(): void
|
||||||
{
|
{
|
||||||
|
$tenant = Tenant::query()->where('codigo', 'sonder')->first();
|
||||||
|
|
||||||
|
if (! $tenant instanceof Tenant) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$categories = [
|
$categories = [
|
||||||
'Remeras',
|
'Remeras',
|
||||||
'Pantalones',
|
'Pantalones',
|
||||||
@@ -23,7 +30,7 @@ class CategorySeeder extends Seeder
|
|||||||
foreach ($categories as $nombre) {
|
foreach ($categories as $nombre) {
|
||||||
Category::firstOrCreate([
|
Category::firstOrCreate([
|
||||||
'nombre' => $nombre,
|
'nombre' => $nombre,
|
||||||
'tenant_code' => null,
|
'tenant_code' => $tenant->codigo,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,11 +30,15 @@ class FiestaFutbolInfantilProductSeeder extends Seeder
|
|||||||
|
|
||||||
$ticketCategory = Category::query()->firstOrCreate([
|
$ticketCategory = Category::query()->firstOrCreate([
|
||||||
'nombre' => 'Entradas',
|
'nombre' => 'Entradas',
|
||||||
'tenant_code' => null,
|
'tenant_code' => $tenant->codigo,
|
||||||
]);
|
]);
|
||||||
$foodCategory = Category::query()->firstOrCreate([
|
$foodCategory = Category::query()->firstOrCreate([
|
||||||
'nombre' => 'Gastronomía',
|
'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'];
|
$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' => 'pancho', 'nombre' => 'Pancho', 'precio' => 4000, 'category_id' => $foodCategory->id],
|
||||||
['slug' => 'coca-cola-500ml', 'nombre' => 'Coca Cola 500ml', 'precio' => 3000, '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' => '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-auto', 'nombre' => 'Estacionamiento Auto', 'precio' => 5000, 'category_id' => $parkingCategory->id],
|
||||||
['slug' => 'estacionamiento-moto', 'nombre' => 'Estacionamiento Moto', 'precio' => 2000, 'category_id' => $ticketCategory->id],
|
['slug' => 'estacionamiento-moto', 'nombre' => 'Estacionamiento Moto', 'precio' => 2000, 'category_id' => $parkingCategory->id],
|
||||||
];
|
];
|
||||||
|
|
||||||
$createdItems = [];
|
$createdItems = [];
|
||||||
|
|||||||
@@ -236,11 +236,11 @@ class ProductCatalogFromImagesSeeder extends Seeder
|
|||||||
|
|
||||||
$category = Category::query()
|
$category = Category::query()
|
||||||
->where('nombre', $metadata['category_name'])
|
->where('nombre', $metadata['category_name'])
|
||||||
->whereNull('tenant_code')
|
->where('tenant_code', $tenant->codigo)
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
if (! $category instanceof Category) {
|
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()
|
$attributeCodes = Attribute::query()
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ use App\Domains\Catalog\Enums\GroupLayout;
|
|||||||
use App\Domains\Catalog\Enums\ProductLayout;
|
use App\Domains\Catalog\Enums\ProductLayout;
|
||||||
use App\Domains\Catalog\Models\Attribute;
|
use App\Domains\Catalog\Models\Attribute;
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Catalog\Models\CatalogItem;
|
||||||
|
use App\Domains\Catalog\Models\Category;
|
||||||
use App\Domains\Catalog\Models\FeaturedGroup;
|
use App\Domains\Catalog\Models\FeaturedGroup;
|
||||||
use App\Domains\Catalog\Models\Inventory;
|
use App\Domains\Catalog\Models\Inventory;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
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(9, CatalogItem::query()->where('tenant_code', $tenant->codigo)->count());
|
||||||
$this->assertSame(10, Inventory::query()->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()
|
$featuredGroups = FeaturedGroup::query()
|
||||||
->where('tenant_code', $tenant->codigo)
|
->where('tenant_code', $tenant->codigo)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ use App\Domains\Attachable\Models\Attachment;
|
|||||||
use App\Domains\Catalog\Enums\GroupLayout;
|
use App\Domains\Catalog\Enums\GroupLayout;
|
||||||
use App\Domains\Catalog\Enums\ProductLayout;
|
use App\Domains\Catalog\Enums\ProductLayout;
|
||||||
use App\Domains\Catalog\Models\CatalogItem;
|
use App\Domains\Catalog\Models\CatalogItem;
|
||||||
|
use App\Domains\Catalog\Models\Category;
|
||||||
use App\Domains\Catalog\Models\FeaturedGroup;
|
use App\Domains\Catalog\Models\FeaturedGroup;
|
||||||
use App\Domains\Tenant\Models\Tenant;
|
use App\Domains\Tenant\Models\Tenant;
|
||||||
use Database\Seeders\AttributeSeeder;
|
use Database\Seeders\AttributeSeeder;
|
||||||
@@ -91,5 +92,19 @@ class ProductCatalogFromImagesSeederTest extends TestCase
|
|||||||
->pluck('catalog_item_id')
|
->pluck('catalog_item_id')
|
||||||
->diff($catalogItemIds),
|
->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(),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user