diff --git a/app/Domains/Cart/Resources/CartItemResource.php b/app/Domains/Cart/Resources/CartItemResource.php index ce1ad82..119f590 100644 --- a/app/Domains/Cart/Resources/CartItemResource.php +++ b/app/Domains/Cart/Resources/CartItemResource.php @@ -34,17 +34,15 @@ class CartItemResource extends JsonResource 'precio_unitario' => $this->formatMoney($selectedItem?->getPrice()), 'catalog_item_id' => $this->catalog_item_id, 'variant_id' => $this->variant_id, - 'product' => $selectedItem === null ? null : [ - 'nombre' => $selectedItem->getName(), - 'imagen' => $imageUrl, - 'variant' => $this->variant === null ? null : [ - 'id' => $this->variant->id, - 'precio' => $this->formatMoney($this->variant->getPrice()), - 'stock_tecnico' => $this->catalogItem->inventory_policy === InventoryPolicy::Unlimited - ? null - : $this->variant->inventory->availableStock(), - 'values' => $this->variant->selectorOptions($this->catalogItem->itemAttributes), - ], + 'nombre' => $selectedItem?->getName(), + 'imagen' => $imageUrl, + 'variant' => $this->variant === null ? null : [ + 'id' => $this->variant->id, + 'precio' => $this->formatMoney($this->variant->getPrice()), + 'stock_tecnico' => $this->catalogItem->inventory_policy === InventoryPolicy::Unlimited + ? null + : $this->variant->inventory->availableStock(), + 'values' => $this->variant->selectorOptions($this->catalogItem->itemAttributes), ], ]; } diff --git a/app/Domains/Cart/documentacion/README.md b/app/Domains/Cart/documentacion/README.md index 2c67b43..3f2edf4 100644 --- a/app/Domains/Cart/documentacion/README.md +++ b/app/Domains/Cart/documentacion/README.md @@ -25,7 +25,7 @@ Bajo `/tenants/{tenant:codigo}`: ## Contratos -`AddCartItemRequest` y `UpdateCartItemQuantityRequest` validan selección y cantidad. `CartResource` y `CartItemResource` estabilizan la respuesta pública. Cada ítem serializa únicamente su variante seleccionada en `product.variant`; las variantes alternativas no forman parte de la respuesta del carrito. +`AddCartItemRequest` y `UpdateCartItemQuantityRequest` validan selección y cantidad. `CartResource` y `CartItemResource` estabilizan la respuesta pública. Cada ítem expone `nombre`, `imagen` y `precio_unitario` en la raíz, priorizando la variante seleccionada y usando el catálogo base como respaldo. La variante seleccionada se serializa en `variant`; las variantes alternativas no forman parte de la respuesta del carrito. ## Dependencias y reglas diff --git a/tests/Feature/Cart/CartControllerTest.php b/tests/Feature/Cart/CartControllerTest.php index 2888c8d..59b9f4e 100644 --- a/tests/Feature/Cart/CartControllerTest.php +++ b/tests/Feature/Cart/CartControllerTest.php @@ -49,9 +49,12 @@ class CartControllerTest extends TestCase ->assertCookie('guest_token') ->assertJsonPath('data.items.0.catalog_item_id', $item->id) ->assertJsonPath('data.items.0.variant_id', null) + ->assertJsonPath('data.items.0.variant', null) ->assertJsonPath('data.items.0.cantidad', 2) ->assertJsonPath('data.items.0.precio_unitario', '49.90') - ->assertJsonPath('data.items.0.product.nombre', 'Item acme') + ->assertJsonPath('data.items.0.nombre', 'Item acme') + ->assertJsonPath('data.items.0.imagen', null) + ->assertJsonMissingPath('data.items.0.product') ->assertJsonPath('data.subtotal', '99.80'); $guestTokenCookie = $response->getCookie('guest_token', false); @@ -296,9 +299,10 @@ class CartControllerTest extends TestCase ->assertOk() ->assertJsonPath('data.items.0.variant_id', $secondVariant->id) ->assertJsonPath('data.items.0.precio_unitario', '20.00') - ->assertJsonPath('data.items.0.product.variant.id', $secondVariant->id) - ->assertJsonPath('data.items.0.product.variant.stock_tecnico', 0) - ->assertJsonMissingPath('data.items.0.product.variants'); + ->assertJsonPath('data.items.0.variant.id', $secondVariant->id) + ->assertJsonPath('data.items.0.variant.precio', '20.00') + ->assertJsonPath('data.items.0.variant.stock_tecnico', 0) + ->assertJsonMissingPath('data.items.0.product'); $this->assertDatabaseHas('inventories', [ 'id' => $firstVariant->inventory_id,