From d0b1607ff43560d86ea7dfd0bcc3fa2219d863f7 Mon Sep 17 00:00:00 2001 From: ncoronel Date: Thu, 20 Aug 2026 13:53:52 -0300 Subject: [PATCH] refactor(checkout): update checkout navigation logic to retain purchase state --- .../store-layout/store-layout.component.ts | 4 +-- .../checkout-page.component.spec.ts | 6 ++--- .../checkout-page/checkout-page.component.ts | 26 +++++-------------- 3 files changed, 11 insertions(+), 25 deletions(-) diff --git a/src/app/core/layout/store-layout/store-layout.component.ts b/src/app/core/layout/store-layout/store-layout.component.ts index 69deb29..72506e4 100644 --- a/src/app/core/layout/store-layout/store-layout.component.ts +++ b/src/app/core/layout/store-layout/store-layout.component.ts @@ -187,8 +187,8 @@ export class StoreLayoutComponent implements OnInit { protected async onLogoutClick(): Promise { const isLeavingCheckout = this.router.url.startsWith('/checkout'); - // Checkout must be left while the authenticated session is still valid so - // its CanDeactivate guard can cancel the pending purchase. + // Leave checkout before closing the authenticated session so its component + // can stop payment polling cleanly. The checkout itself remains pending. if (isLeavingCheckout) { const navigationSucceeded = await this.router.navigate(['/']); diff --git a/src/app/features/store/pages/checkout-page/checkout-page.component.spec.ts b/src/app/features/store/pages/checkout-page/checkout-page.component.spec.ts index dcf604d..096b40e 100644 --- a/src/app/features/store/pages/checkout-page/checkout-page.component.spec.ts +++ b/src/app/features/store/pages/checkout-page/checkout-page.component.spec.ts @@ -608,14 +608,14 @@ describe('CheckoutPageComponent payment validation', () => { expect(component.stepper.next).toHaveBeenCalledOnce(); }); - it('cancels the pending purchase before allowing navigation away', async () => { + it('keeps the checkout purchase intact when navigating away', async () => { const { component } = createComponent(); await expect(component.canDeactivate()).resolves.toBe(true); - expect(checkoutServiceStub.cancelPurchase).toHaveBeenCalledWith('tenant-test', 25); + expect(checkoutServiceStub.cancelPurchase).not.toHaveBeenCalled(); expect(cartServiceStub.loadCart).toHaveBeenCalled(); expect(cartServiceStub.clearCart).not.toHaveBeenCalled(); - expect(component.createdPurchaseId()).toBeNull(); + expect(component.createdPurchaseId()).toBe(25); }); }); diff --git a/src/app/features/store/pages/checkout-page/checkout-page.component.ts b/src/app/features/store/pages/checkout-page/checkout-page.component.ts index 26bf78f..4efc3b2 100644 --- a/src/app/features/store/pages/checkout-page/checkout-page.component.ts +++ b/src/app/features/store/pages/checkout-page/checkout-page.component.ts @@ -398,29 +398,15 @@ export class CheckoutPageComponent implements OnInit, OnDestroy { return true; } - const purchaseId = this.createdPurchaseId(); - const tenant = this.tenantService.tenant(); - - if (!purchaseId || !tenant) { - return true; - } - + // The checkout cart remains attached to its purchase. Once the user adds a + // new item, the cart API creates a separate active cart automatically. try { - await this.checkoutService.cancelPurchase(tenant.codigo, purchaseId); - this.createdPurchaseId.set(null); - this.createdPurchase.set(null); - - try { - await firstValueFrom(this.cartService.loadCart()); - } catch (error) { - console.error('Failed to restore cart after cancelling checkout:', error); - } - - return true; + await firstValueFrom(this.cartService.loadCart()); } catch (error) { - console.error('Failed to cancel purchase:', error); - return false; + console.error('Failed to load the active cart after leaving checkout:', error); } + + return true; } protected async selectPaymentMethod(method: PaymentMethod): Promise {