feat: Introduce source type for featured groups; add category association and implement FeaturedGroupService for item sourcing

This commit is contained in:
2026-08-04 13:17:00 -03:00
parent 8aa3a26ee7
commit 84e45bb964
13 changed files with 260 additions and 136 deletions

View File

@@ -6,6 +6,7 @@ use App\Domains\Attachable\Enums\AttachmentType;
use App\Domains\Attachable\Models\Attachment;
use App\Domains\Catalog\Enums\CatalogItemType;
use App\Domains\Catalog\Enums\EventProductType;
use App\Domains\Catalog\Enums\FeaturedGroupSource;
use App\Domains\Catalog\Enums\GroupLayout;
use App\Domains\Catalog\Enums\ProductLayout;
use App\Domains\Catalog\Models\Attribute;
@@ -174,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(
['Entradas', 'Estacionamiento', 'Gastronomía'],
['Bebidas', 'Comidas', 'Entradas', 'Estacionamiento', 'Gastronomía'],
Category::query()
->where('tenant_code', $tenant->codigo)
->orderBy('nombre')
@@ -194,7 +195,7 @@ class FiestaFutbolInfantilProductSeederTest extends TestCase
$featuredGroups = FeaturedGroup::query()
->where('tenant_code', $tenant->codigo)
->with('featuredItems.catalogItem')
->with('category.catalogItems')
->orderBy('group_order')
->get();
@@ -207,21 +208,23 @@ class FiestaFutbolInfantilProductSeederTest extends TestCase
],
$featuredGroups
->mapWithKeys(fn (FeaturedGroup $group): array => [
$group->group_name => $group->featuredItems->pluck('catalogItem.slug')->all(),
$group->group_name => $group->category->catalogItems->pluck('slug')->all(),
])
->all()
);
$this->assertSame(
[
['Entradas', ProductLayout::Row, GroupLayout::SimpleVertical, 0],
['Estacionamiento', ProductLayout::ColumnWithCart, GroupLayout::Simple, 1],
['Comidas', ProductLayout::ColumnWithCart, GroupLayout::Simple, 2],
['Bebidas', ProductLayout::ColumnWithCart, GroupLayout::Simple, 3],
['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],
],
$featuredGroups
->map(fn (FeaturedGroup $group): array => [
$group->group_name,
$group->source_type,
$group->category->nombre,
$group->product_layout,
$group->group_layout,
$group->group_order,

View File

@@ -4,6 +4,7 @@ namespace Tests\Feature\Seeders;
use App\Domains\Attachable\Enums\AttachmentType;
use App\Domains\Attachable\Models\Attachment;
use App\Domains\Catalog\Enums\FeaturedGroupSource;
use App\Domains\Catalog\Enums\GroupLayout;
use App\Domains\Catalog\Enums\ProductLayout;
use App\Domains\Catalog\Models\CatalogItem;
@@ -70,16 +71,14 @@ class ProductCatalogFromImagesSeederTest extends TestCase
$this->assertNotNull($paginatedGroup);
$this->assertSame(ProductLayout::ColumnWithImage, $paginatedGroup->product_layout);
$this->assertSame(GroupLayout::Paginated, $paginatedGroup->group_layout);
$this->assertSame(0, $paginatedGroup->group_order);
$this->assertSame(
CatalogItem::query()->where('tenant_code', $tenant->codigo)->orderBy('id')->pluck('slug')->all(),
$paginatedGroup->featuredItems->pluck('catalogItem.slug')->all(),
);
$this->assertCount(10, $paginatedGroup->featuredItems);
$this->assertSame(FeaturedGroupSource::All, $paginatedGroup->source_type);
$this->assertSame(2, $paginatedGroup->group_order);
$this->assertCount(0, $paginatedGroup->featuredItems);
$this->assertNotNull($carouselGroup);
$this->assertSame(ProductLayout::ColumnWithImage, $carouselGroup->product_layout);
$this->assertSame(GroupLayout::Carousel, $carouselGroup->group_layout);
$this->assertSame(FeaturedGroupSource::Manual, $carouselGroup->source_type);
$this->assertSame(1, $carouselGroup->group_order);
$this->assertCount(5, $carouselGroup->featuredItems);
$this->assertCount(