use of com.tunyk.currencyconverter.api.CurrencyConverterException in project openbanking-aspsp by OpenBankingToolkit.
the class AcceptInternationalPaymentTaskTest method shouldCreditAccount.
@Test
public void shouldCreditAccount() throws CurrencyConverterException {
// Given
FRInternationalConsent payment = defaultPayment();
given(paymentsService.getAllPaymentsInProcess()).willReturn(Collections.singleton(payment));
given(account2StoreService.getAccount(DEBIT_ACCOUNT)).willReturn(defaultAccount(DEBIT_ACCOUNT));
FRAccount account = defaultAccount(CREDIT_ACCOUNT);
given(account2StoreService.findAccountByIdentification(CREDIT_ACCOUNT)).willReturn(Optional.of(account));
// When
acceptDomesticPaymentTask.autoAcceptPayment();
// Then
FRAmount amount = payment.getInitiation().getInstructedAmount();
verify(moneyService).moveMoney(eq(account), eq(amount), eq(FRCreditDebitIndicator.CREDIT), eq(payment), any());
verify(paymentsService).updatePayment(argThat(p -> p.getStatus().equals(ConsentStatusCode.ACCEPTEDSETTLEMENTCOMPLETED)));
}
use of com.tunyk.currencyconverter.api.CurrencyConverterException in project openbanking-aspsp by OpenBankingToolkit.
the class AcceptSinglePaymentTaskTest method shouldRejectPaymentWhenAnyException.
@Test
public void shouldRejectPaymentWhenAnyException() throws CurrencyConverterException {
// Given
FRPaymentSetup payment = defaultPayment();
given(paymentsService.getAllPaymentsInProcess()).willReturn(Collections.singleton(payment));
FRAccount account = defaultAccount(DEBIT_ACCOUNT);
given(account2StoreService.getAccount(DEBIT_ACCOUNT)).willReturn(account);
doThrow(new RuntimeException()).when(moneyService).moveMoney(any(), any(), any(), any(), any());
// When
autoAcceptPaymentTask.autoAcceptPayment();
// Then
FRAmount instructedAmount = payment.getInitiation().getInstructedAmount();
verify(moneyService).moveMoney(eq(account), eq(instructedAmount), eq(FRCreditDebitIndicator.DEBIT), eq(payment), any());
verify(paymentsService).updatePayment(argThat(p -> p.getStatus().equals(ConsentStatusCode.REJECTED)));
}
use of com.tunyk.currencyconverter.api.CurrencyConverterException in project openbanking-aspsp by OpenBankingToolkit.
the class AcceptSinglePaymentTaskTest method shouldRejectPaymentWhenCurrencyConversionException.
@Test
public void shouldRejectPaymentWhenCurrencyConversionException() throws CurrencyConverterException {
// Given
FRPaymentSetup payment = defaultPayment();
given(paymentsService.getAllPaymentsInProcess()).willReturn(Collections.singleton(payment));
FRAccount account = defaultAccount(DEBIT_ACCOUNT);
given(account2StoreService.getAccount(DEBIT_ACCOUNT)).willReturn(account);
doThrow(CurrencyConverterException.class).when(moneyService).moveMoney(any(), any(), any(), any(), any());
// When
autoAcceptPaymentTask.autoAcceptPayment();
// Then
FRAmount instructedAmount = payment.getInitiation().getInstructedAmount();
verify(moneyService).moveMoney(eq(account), eq(instructedAmount), eq(FRCreditDebitIndicator.DEBIT), eq(payment), any());
verify(paymentsService).updatePayment(argThat(p -> p.getStatus().equals(ConsentStatusCode.REJECTED)));
}
use of com.tunyk.currencyconverter.api.CurrencyConverterException in project openbanking-aspsp by OpenBankingToolkit.
the class AcceptDomesticPaymentTask method autoAcceptPayment.
@Scheduled(fixedRate = 60 * 1000)
@SchedulerLock(name = "domesticPayment")
public void autoAcceptPayment() {
log.info("Auto-accept payment task waking up. The time is now {}.", format.print(DateTime.now()));
Collection<FRDomesticConsent> allPaymentsInProcess = domesticPaymentsService.getAllPaymentsInProcess();
for (FRDomesticConsent payment : allPaymentsInProcess) {
log.info("Processing payment {}", payment);
try {
String identificationTo = moveDebitPayment(payment);
Optional<Account> isAccountToFromOurs = accountStoreService.findAccountByIdentification(identificationTo);
if (isAccountToFromOurs.isPresent()) {
moveCreditPayment(payment, identificationTo, isAccountToFromOurs.get());
} else {
log.info("Account '{}' not ours", identificationTo);
}
log.info("Update payment status to completed");
payment.setStatus(ConsentStatusCode.ACCEPTEDSETTLEMENTCOMPLETED);
log.info("Payment {}", payment);
} catch (CurrencyConverterException e) {
log.info("Can't convert amount in the right currency", e);
log.info("Update payment status to rejected");
payment.setStatus(ConsentStatusCode.REJECTED);
log.info("Payment {}", payment);
} catch (Exception e) {
log.error("Couldn't auto-pay payment.", e);
log.info("Update payment status to rejected");
payment.setStatus(ConsentStatusCode.REJECTED);
log.info("Payment {}", payment);
} finally {
domesticPaymentsService.updatePayment(payment);
paymentNotificationService.paymentStatusChanged(payment);
}
}
log.info("All payments in process are now accepted. See you in 1 minute! The time is now {}.", format.print(DateTime.now()));
}
use of com.tunyk.currencyconverter.api.CurrencyConverterException in project openbanking-aspsp by OpenBankingToolkit.
the class AcceptDueScheduledPaymentTask method payDueScheduledPayments.
@Scheduled(fixedRate = 60 * 1000)
@SchedulerLock(name = "payDueScheduledPayments")
public void payDueScheduledPayments() {
log.info("Scheduled payments payment task waking up. The time is now {}.", format.print(DateTime.now()));
for (FRScheduledPayment scheduledPayment : scheduledPaymentService.getPendingAndDueScheduledPayments()) {
FRScheduledPaymentData payment = scheduledPayment.getScheduledPayment();
if (!payment.getScheduledPaymentDateTime().isBefore(DateTime.now())) {
log.warn("Scheduled payment: {} with scheduledPaymentDateTime: {} is not due yet and should not have been loaded", scheduledPayment.getId(), payment.getScheduledPaymentDateTime());
continue;
}
log.info("Processing scheduled payment {}", payment);
try {
String identificationFrom = moveDebitPayment(scheduledPayment);
Optional<Account> isAccountFromOurs = accountStoreService.findAccountByIdentification(identificationFrom);
if (isAccountFromOurs.isPresent()) {
moveCreditPayment(scheduledPayment, identificationFrom, isAccountFromOurs.get());
} else {
log.info("Account '{}' not ours", identificationFrom);
}
log.info("Update payment status to completed");
scheduledPayment.setStatus(ScheduledPaymentStatus.COMPLETED);
log.debug("Payment {}", payment);
} catch (CurrencyConverterException e) {
log.info("Can't convert amount in the right currency", e);
log.info("Update payment status to rejected");
scheduledPayment.setRejectionReason("Can't convert amount in the right currency: " + e.getMessage());
scheduledPayment.setStatus(ScheduledPaymentStatus.REJECTED);
log.info("Payment {}", payment);
} catch (Exception e) {
log.error("Couldn't pay scheduled payment.", e);
log.info("Update payment status to rejected");
scheduledPayment.setRejectionReason("Failed to execute payment: " + e.getMessage());
scheduledPayment.setStatus(ScheduledPaymentStatus.REJECTED);
log.info("Payment {}", payment);
} finally {
scheduledPaymentService.updateSchedulePayment(scheduledPayment);
paymentNotificationService.paymentStatusChanged(scheduledPayment);
}
}
log.info("All due scheduled payments are now completed. The time is now {}.", format.print(DateTime.now()));
}
Aggregations