diff --git a/src/app/core/services/cart/cart.service.spec.ts b/src/app/core/services/cart/cart.service.spec.ts index c842756..099987b 100644 --- a/src/app/core/services/cart/cart.service.spec.ts +++ b/src/app/core/services/cart/cart.service.spec.ts @@ -34,7 +34,8 @@ describe('CartService', () => { beforeEach(() => { tenantServiceMock = { - getTenantApiUrl: vi.fn().mockReturnValue('http://api.test/tenants/acme') + getTenantApiUrl: vi.fn().mockReturnValue('http://api.test/tenants/acme'), + tenant: vi.fn().mockReturnValue({ codigo: 'acme' }) }; TestBed.configureTestingModule({ @@ -74,6 +75,18 @@ describe('CartService', () => { req.flush({ data: mockCart }); }); + it('should clear cart state locally', () => { + service.clearCart(); + + expect(service.cart()).toEqual({ + id: null, + tenant_codigo: 'acme', + status: 'active', + items: [], + subtotal: '0.00' + }); + }); + it('should add item and update signal', () => { service.addItem(10, 2).subscribe((res) => { expect(res.data).toEqual(mockCart); diff --git a/src/app/core/services/cart/cart.service.ts b/src/app/core/services/cart/cart.service.ts index 07f0393..12ee0ae 100644 --- a/src/app/core/services/cart/cart.service.ts +++ b/src/app/core/services/cart/cart.service.ts @@ -23,6 +23,16 @@ export class CartService { return this.tenantService.getTenantApiUrl(); } + clearCart(): void { + this.cartState.set({ + id: null, + tenant_codigo: this.tenantService.tenant()?.codigo ?? '', + status: 'active', + items: [], + subtotal: '0.00' + }); + } + loadCart(): Observable { return this.http .get>(`${this.tenantApiUrl}/cart`, { diff --git a/src/app/core/services/checkout.service.ts b/src/app/core/services/checkout.service.ts index 40a3b09..e419055 100644 --- a/src/app/core/services/checkout.service.ts +++ b/src/app/core/services/checkout.service.ts @@ -13,7 +13,6 @@ export interface CreatePurchasePayload { } export interface PurchaseStatusResponse { - payment_status: string | null; status: string | null; } @@ -47,9 +46,9 @@ export class CheckoutService { return response; } - async finalizePurchase(tenantCode: string, purchaseId: number): Promise { + async completePurchase(tenantCode: string, purchaseId: number): Promise { const response = await firstValueFrom( - this.http.post<{ data?: PurchaseStatusResponse } | PurchaseStatusResponse>(`${environment.url}tenants/${tenantCode}/compras/${purchaseId}/finalize`, {}) + this.http.post<{ data?: PurchaseStatusResponse } | PurchaseStatusResponse>(`${environment.url}tenants/${tenantCode}/compras/${purchaseId}/complete`, {}) ); const purchase = this.extractResponseData(response); @@ -59,7 +58,6 @@ export class CheckoutService { } return { - payment_status: purchase.payment_status ?? null, status: purchase.status ?? null }; } @@ -76,7 +74,6 @@ export class CheckoutService { } return { - payment_status: purchase.payment_status ?? null, status: purchase.status ?? null }; } diff --git a/src/app/features/store/pages/checkout-page/checkout-page.component.html b/src/app/features/store/pages/checkout-page/checkout-page.component.html index 63c9dd2..f4839b0 100644 --- a/src/app/features/store/pages/checkout-page/checkout-page.component.html +++ b/src/app/features/store/pages/checkout-page/checkout-page.component.html @@ -21,7 +21,7 @@ (paymentMethodChange)="selectPaymentMethod($event)" (copyTransferValue)="copyTransferValue($event.field, $event.value)" (cancelStep)="onCancel()" - (finalize)="onFinalize()" + (complete)="onComplete()" /> 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 e93177a..c5e696f 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 @@ -241,13 +241,20 @@ export class CheckoutPageComponent implements OnInit { } } - protected async onFinalize(): Promise { + protected async onComplete(): Promise { const purchaseId = this.createdPurchaseId(); + const tenant = this.tenantService.tenant(); - if (!purchaseId) { + if (!purchaseId || !tenant) { return; } - void this.router.navigate(['/checkout/status', purchaseId]); + try { + await this.checkoutService.completePurchase(tenant.codigo, purchaseId); + this.cartService.clearCart(); + void this.router.navigate(['/checkout/status', purchaseId]); + } catch (error) { + console.error('Failed to complete purchase:', error); + } } } diff --git a/src/app/features/store/pages/checkout-page/checkout-payment-step.component.html b/src/app/features/store/pages/checkout-page/checkout-payment-step.component.html index 4484b33..b615390 100644 --- a/src/app/features/store/pages/checkout-page/checkout-payment-step.component.html +++ b/src/app/features/store/pages/checkout-page/checkout-payment-step.component.html @@ -142,7 +142,7 @@ type="button" hostClass="checkout-payment__action-btn" [disabled]="isGeneratingIntent()" - (click)="finalize.emit()" + (click)="complete.emit()" > Finalizar compra diff --git a/src/app/features/store/pages/checkout-page/checkout-payment-step.component.ts b/src/app/features/store/pages/checkout-page/checkout-payment-step.component.ts index fd7505c..4581f08 100644 --- a/src/app/features/store/pages/checkout-page/checkout-payment-step.component.ts +++ b/src/app/features/store/pages/checkout-page/checkout-payment-step.component.ts @@ -25,7 +25,7 @@ export class CheckoutPaymentStepComponent { readonly paymentMethodChange = output(); readonly copyTransferValue = output<{ field: TransferField; value: string }>(); readonly cancelStep = output(); - readonly finalize = output(); + readonly complete = output(); protected selectPaymentMethod(method: PaymentMethod): void { this.paymentMethodChange.emit(method); diff --git a/src/app/features/store/pages/purchase-status-page/purchase-status-page.component.ts b/src/app/features/store/pages/purchase-status-page/purchase-status-page.component.ts index 1422339..4828430 100644 --- a/src/app/features/store/pages/purchase-status-page/purchase-status-page.component.ts +++ b/src/app/features/store/pages/purchase-status-page/purchase-status-page.component.ts @@ -85,11 +85,11 @@ export class PurchaseStatusPageComponent implements OnInit, OnDestroy { } private resolveStatus(purchase: PurchaseStatusResponse): PurchaseStatusView { - if (purchase.payment_status === 'approved' || purchase.status === 'paid') { + if (purchase.status === 'paid') { return 'approved'; } - if (purchase.payment_status === 'rejected' || purchase.status === 'cancelled') { + if (purchase.status === 'rejected' || purchase.status === 'cancelled') { return 'rejected'; }