refactor: update payment validation logic to handle transfer statuses more effectively

This commit is contained in:
2026-07-29 09:36:22 -03:00
parent 9bb3374ba0
commit 109a1cab5a
2 changed files with 16 additions and 10 deletions

View File

@@ -191,24 +191,30 @@ describe('CheckoutPageComponent payment validation', () => {
expect(checkoutServiceStub.getPurchase).not.toHaveBeenCalled(); expect(checkoutServiceStub.getPurchase).not.toHaveBeenCalled();
}); });
it('submits a transfer for review and navigates to its status page', async () => { it.each(['created', 'pending_payment', 'in_review'])(
const { component } = createComponent(); 'shows the payment error when a transfer remains %s',
component.selectedPaymentMethod.set('transfer'); async (status) => {
checkoutServiceStub.submitPurchaseForReview.mockResolvedValue({ status });
const { component } = createComponent();
component.selectedPaymentMethod.set('transfer');
await component.onComplete(); await component.onComplete();
expect(checkoutServiceStub.submitPurchaseForReview).toHaveBeenCalledWith('tenant-test', 25); expect(checkoutServiceStub.submitPurchaseForReview).toHaveBeenCalledWith('tenant-test', 25);
expect(cartServiceStub.clearCart).not.toHaveBeenCalled(); expect(component.transferValidationStatus()).toBe('error');
expect(routerStub.navigate).toHaveBeenCalledWith(['/checkout/status', 25]); expect(cartServiceStub.clearCart).not.toHaveBeenCalled();
}); expect(routerStub.navigate).not.toHaveBeenCalled();
},
);
it('navigates after a transfer is confirmed as paid', async () => { it('submits a paid transfer and navigates to its confirmation page', async () => {
checkoutServiceStub.submitPurchaseForReview.mockResolvedValue({ status: 'paid' }); checkoutServiceStub.submitPurchaseForReview.mockResolvedValue({ status: 'paid' });
const { component } = createComponent(); const { component } = createComponent();
component.selectedPaymentMethod.set('transfer'); component.selectedPaymentMethod.set('transfer');
await component.onComplete(); await component.onComplete();
expect(checkoutServiceStub.submitPurchaseForReview).toHaveBeenCalledWith('tenant-test', 25);
expect(cartServiceStub.clearCart).not.toHaveBeenCalled(); expect(cartServiceStub.clearCart).not.toHaveBeenCalled();
expect(routerStub.navigate).toHaveBeenCalledWith(['/checkout/status', 25]); expect(routerStub.navigate).toHaveBeenCalledWith(['/checkout/status', 25]);
}); });

View File

@@ -443,7 +443,7 @@ export class CheckoutPageComponent implements OnInit, OnDestroy {
purchaseId, purchaseId,
); );
if (purchase.status === 'in_review' || purchase.status === 'paid') { if (purchase.status === 'paid') {
this.navigateToPurchaseStatus(purchaseId); this.navigateToPurchaseStatus(purchaseId);
return; return;
} }