feat(purchase): add checkout expiration settings and reservation status to purchase items

- Introduced a new configuration file for purchase settings, including checkout and payment expiration times.
- Added a migration to include a `reservation_status` column in the `compra_items` table, defaulting to 'active' and updating existing records based on purchase status.
- Created a migration to add an `expires_at` timestamp to the `compras` table, updating it for existing records based on their status.
- Scoped unique indexes in the `carritos` table to only active carts, adding virtual columns for active user and guest tokens.
- Implemented a console command to expire overdue purchases and release stock reservations, scheduled to run every minute.
- Added tests for Google token exchange and login functionality, ensuring proper cart handling and user authentication.
- Updated purchase-related tests to reflect changes in item handling and customer data validation.
This commit is contained in:
2026-07-27 12:49:27 -03:00
parent c37b8894e4
commit 8b26a2b63e
30 changed files with 1738 additions and 396 deletions

View File

@@ -86,12 +86,10 @@ class PurchaseCatalogItemTest extends TestCase
]);
$purchaseItem = $purchase->items()->with('imageAttachment')->firstOrFail();
$this->assertNotNull($purchaseItem->imageAttachment);
$this->assertNotSame($productImage->id, $purchaseItem->image_attachment_id);
$this->assertSame($productImage->id, $purchaseItem->image_attachment_id);
$this->assertSame('original-image', Storage::disk('s3')->get($purchaseItem->imageAttachment->path));
$this->assertStringStartsWith(
"purchase/{$purchase->id}/",
$purchaseItem->imageAttachment->path,
);
$this->assertSame($productImage->path, $purchaseItem->imageAttachment->path);
$this->assertDatabaseCount('attachments', 3);
$catalogItem->update([
'nombre' => 'Changed catalog item',
'descripcion' => 'Changed description',