From 4eacff86bcd34786e42eb51222498794a8adf3a0 Mon Sep 17 00:00:00 2001 From: ncoronel Date: Tue, 28 Jul 2026 15:06:00 -0300 Subject: [PATCH] feat(purchase): update customer data for pending payment purchases --- .../Purchase/Services/CheckoutService.php | 5 +++- tests/Feature/Purchase/StorePurchaseTest.php | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/app/Domains/Purchase/Services/CheckoutService.php b/app/Domains/Purchase/Services/CheckoutService.php index 7a150e9..a5127c8 100644 --- a/app/Domains/Purchase/Services/CheckoutService.php +++ b/app/Domains/Purchase/Services/CheckoutService.php @@ -98,7 +98,10 @@ class CheckoutService ->findOrFail($purchase->getKey()); if ( - $purchase->status !== Purchase::STATUS_CREATED + ! in_array($purchase->status, [ + Purchase::STATUS_CREATED, + Purchase::STATUS_PENDING_PAYMENT, + ], true) || ($purchase->expires_at !== null && $purchase->expires_at->isPast()) ) { throw ValidationException::withMessages([ diff --git a/tests/Feature/Purchase/StorePurchaseTest.php b/tests/Feature/Purchase/StorePurchaseTest.php index 9ef69fb..9d13eb7 100644 --- a/tests/Feature/Purchase/StorePurchaseTest.php +++ b/tests/Feature/Purchase/StorePurchaseTest.php @@ -304,6 +304,32 @@ class StorePurchaseTest extends TestCase ]); } + public function test_it_updates_customer_data_for_a_pending_payment_purchase(): void + { + $this->createTenant('sonder', 'Sonder', 'sonder.com.ar'); + $user = User::factory()->create(); + $variant = $this->createVariantForTenant('sonder', 10, '50.00'); + $purchase = $this->createCheckoutPurchase($user, 'sonder', $variant, 1); + $purchase->update(['status' => Purchase::STATUS_PENDING_PAYMENT]); + + $this->actingAs($user, 'sanctum') + ->patchJson("/api/tenants/sonder/compras/{$purchase->id}/customer-data", [ + 'dni' => '987654321', + 'telefono' => '+54 9 341 555-4321', + 'nombre_apellido' => 'Juan Perez', + 'email' => 'juan.perez@example.com', + ]) + ->assertOk() + ->assertJsonPath('data.status', Purchase::STATUS_PENDING_PAYMENT) + ->assertJsonPath('data.dni', '987654321'); + + $this->assertDatabaseHas('compras', [ + 'id' => $purchase->id, + 'status' => Purchase::STATUS_PENDING_PAYMENT, + 'dni' => '987654321', + ]); + } + public function test_it_updates_a_created_purchase_item_quantity_and_its_stock_reservation(): void { $this->createTenant('sonder', 'Sonder', 'sonder.com.ar');