feat(catalog): add scope to filter available variants and update related queries; enhance seeder and tests for stock validation
This commit is contained in:
@@ -80,6 +80,39 @@ class CatalogControllerTest extends TestCase
|
||||
->assertJsonCount(0, '1.items.data.0.variants');
|
||||
}
|
||||
|
||||
public function test_it_excludes_items_when_all_of_their_variants_are_out_of_stock(): void
|
||||
{
|
||||
$tenant = $this->createTenant('catalog-available-variants');
|
||||
$group = $this->createGroup(
|
||||
$tenant,
|
||||
ProductLayout::ColumnWithCart,
|
||||
'Available variants',
|
||||
groupLayout: GroupLayout::SimpleVertical,
|
||||
);
|
||||
|
||||
$unavailableItem = $this->createItem($tenant, 'Unavailable');
|
||||
$unavailableInventory = Inventory::query()->create([
|
||||
'real_stock' => 4,
|
||||
'reserved_stock' => 4,
|
||||
]);
|
||||
$unavailableItem->variants()->create(['inventory_id' => $unavailableInventory->id]);
|
||||
$group->featuredItems()->create(['catalog_item_id' => $unavailableItem->id]);
|
||||
|
||||
$availableItem = $this->createItem($tenant, 'Available');
|
||||
$availableInventory = Inventory::query()->create([
|
||||
'real_stock' => 4,
|
||||
'reserved_stock' => 3,
|
||||
]);
|
||||
$availableItem->variants()->create(['inventory_id' => $availableInventory->id]);
|
||||
$group->featuredItems()->create(['catalog_item_id' => $availableItem->id]);
|
||||
|
||||
$this->getJson("/api/tenants/{$tenant->codigo}/catalog")
|
||||
->assertOk()
|
||||
->assertJsonCount(1, '0.items')
|
||||
->assertJsonPath('0.items.0.nombre', 'Available')
|
||||
->assertJsonMissing(['nombre' => 'Unavailable']);
|
||||
}
|
||||
|
||||
public function test_column_with_image_uses_item_image_then_variant_image_then_null(): void
|
||||
{
|
||||
Storage::fake('s3');
|
||||
|
||||
@@ -76,6 +76,16 @@ class FiestaFutbolInfantilProductSeederTest extends TestCase
|
||||
$this->assertCount($count, $item->variants);
|
||||
}
|
||||
|
||||
$variantStocks = CatalogItem::query()
|
||||
->where('tenant_code', $tenant->codigo)
|
||||
->with('variants.inventory')
|
||||
->get()
|
||||
->flatMap(fn (CatalogItem $item) => $item->variants)
|
||||
->map(fn ($variant): int => $variant->inventory->real_stock);
|
||||
$this->assertGreaterThan($variantStocks->count() / 2, $variantStocks->filter(fn (int $stock): bool => $stock > 5)->count());
|
||||
$this->assertNotEmpty($variantStocks->filter(fn (int $stock): bool => $stock === 0));
|
||||
$this->assertNotEmpty($variantStocks->filter(fn (int $stock): bool => $stock >= 1 && $stock <= 5));
|
||||
|
||||
$this->assertSame(
|
||||
[
|
||||
'abono' => 'Entradas',
|
||||
|
||||
Reference in New Issue
Block a user