feat(catalog): add show_in_selector attribute to item attributes and update related logic

This commit is contained in:
2026-08-12 16:11:53 -03:00
parent 8359f0831f
commit 7c7a295625
12 changed files with 115 additions and 1 deletions

View File

@@ -276,6 +276,26 @@ class CatalogItemDetailControllerTest extends TestCase
);
}
public function test_it_exposes_whether_an_item_attribute_should_be_shown_in_the_selector(): void
{
$tenant = $this->createTenant('detail-hidden-attribute');
$item = $this->createItem($tenant, 'Hidden attribute');
$attribute = Attribute::query()->create([
'tenant_codigo' => $tenant->codigo,
'codigo' => 'internal_type',
'nombre' => 'Internal type',
'type' => FieldType::String,
]);
$item->itemAttributes()->create([
'attribute_id' => $attribute->id,
'show_in_selector' => false,
]);
$this->getJson("/api/tenants/{$tenant->codigo}/catalog-items/{$item->id}")
->assertOk()
->assertJsonPath('data.attributes.0.show_in_selector', false);
}
private function createItem(
Tenant $tenant,
string $name,

View File

@@ -25,6 +25,7 @@ class CatalogSchemaTest extends TestCase
$this->assertTrue(Schema::hasTable('variantes'));
$this->assertTrue(Schema::hasTable('item_attributes'));
$this->assertTrue(Schema::hasColumn('item_attributes', 'sort_order'));
$this->assertTrue(Schema::hasColumn('item_attributes', 'show_in_selector'));
$this->assertTrue(Schema::hasTable('variant_values'));
}

View File

@@ -93,6 +93,26 @@ class CatalogServiceTest extends TestCase
}
}
public function test_it_can_hide_an_item_attribute_from_the_product_selector(): void
{
$attribute = $this->createAttribute('internal_type');
$item = $this->service->create([
'tenant_code' => $this->tenant->codigo,
'slug' => 'hidden-attribute-item',
'nombre' => 'Hidden attribute item',
'precio' => 100,
'attribute_codes' => [$attribute->codigo],
'hidden_attribute_codes' => [$attribute->codigo],
'variants' => [[
'real_stock' => 5,
'values' => [$attribute->codigo => 'internal'],
]],
]);
$this->assertFalse($item->itemAttributes->sole()->show_in_selector);
}
public function test_it_allows_the_same_event_date_with_different_attribute_values(): void
{
$sector = $this->createAttribute('sector');

View File

@@ -128,6 +128,7 @@ class FiestaFutbolInfantilProductSeederTest extends TestCase
->sole();
$dateAttribute = $abono->itemAttributes->firstWhere('attribute.codigo', 'event_date');
$this->assertTrue($dateAttribute->allow_multi_select);
$this->assertFalse($dateAttribute->show_in_selector);
$this->assertEqualsCanonicalizing(
[4],
$abono->variants->map(fn ($variant): int => $variant->eventDates->count())->all(),