|
|
|
|
@@ -191,7 +191,25 @@ describe('CheckoutPageComponent payment validation', () => {
|
|
|
|
|
expect(checkoutServiceStub.getPurchase).not.toHaveBeenCalled();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('submits a transfer for review and navigates to its status page', async () => {
|
|
|
|
|
it('checks a transfer once and redirects to purchase status while pending', async () => {
|
|
|
|
|
const { component } = createComponent();
|
|
|
|
|
component.selectedPaymentMethod.set('transfer');
|
|
|
|
|
|
|
|
|
|
await component.onComplete();
|
|
|
|
|
expect(checkoutServiceStub.getPurchase).toHaveBeenCalledTimes(1);
|
|
|
|
|
expect(component.transferValidationStatus()).toBe('pending');
|
|
|
|
|
expect(cartServiceStub.clearCart).not.toHaveBeenCalled();
|
|
|
|
|
expect(routerStub.navigate).toHaveBeenCalledWith(['/checkout/status', 25]);
|
|
|
|
|
|
|
|
|
|
await vi.advanceTimersByTimeAsync(30_000);
|
|
|
|
|
expect(checkoutServiceStub.getPurchase).toHaveBeenCalledTimes(1);
|
|
|
|
|
|
|
|
|
|
await component.onComplete();
|
|
|
|
|
expect(checkoutServiceStub.getPurchase).toHaveBeenCalledTimes(1);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('navigates after a transfer is confirmed as paid', async () => {
|
|
|
|
|
checkoutServiceStub.getPurchase.mockResolvedValue({ status: 'paid' });
|
|
|
|
|
const { component } = createComponent();
|
|
|
|
|
component.selectedPaymentMethod.set('transfer');
|
|
|
|
|
|
|
|
|
|
@@ -202,17 +220,6 @@ describe('CheckoutPageComponent payment validation', () => {
|
|
|
|
|
expect(routerStub.navigate).toHaveBeenCalledWith(['/checkout/status', 25]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('navigates after a transfer is confirmed as paid', async () => {
|
|
|
|
|
checkoutServiceStub.submitPurchaseForReview.mockResolvedValue({ status: 'paid' });
|
|
|
|
|
const { component } = createComponent();
|
|
|
|
|
component.selectedPaymentMethod.set('transfer');
|
|
|
|
|
|
|
|
|
|
await component.onComplete();
|
|
|
|
|
|
|
|
|
|
expect(cartServiceStub.clearCart).not.toHaveBeenCalled();
|
|
|
|
|
expect(routerStub.navigate).toHaveBeenCalledWith(['/checkout/status', 25]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('shows a retryable state when transfer validation fails', async () => {
|
|
|
|
|
vi.spyOn(console, 'error').mockImplementation(() => undefined);
|
|
|
|
|
checkoutServiceStub.submitPurchaseForReview.mockRejectedValue(new Error('network error'));
|
|
|
|
|
|