Skip to content

Commit

Permalink
feat: [API] return batch transactions sorted by amount
Browse files Browse the repository at this point in the history
  • Loading branch information
M4rc0Russ0 committed Aug 13, 2024
1 parent 46d0029 commit 1dd0f7a
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,8 @@

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;

import static java.math.BigDecimal.ZERO;
import static java.util.stream.Collectors.toSet;
Expand All @@ -44,6 +43,7 @@ public List<TransactionView> allTransactions(SearchRequest body) {

return transactions.stream()
.map(this::getTransactionView)
.sorted(Comparator.comparing(TransactionView::getAmountTotalLcy).reversed())
.toList();
}

Expand Down Expand Up @@ -174,7 +174,8 @@ public List<TransactionItemsProcessView> rejectTransactionItems(TransactionItems
private Set<TransactionView> getTransaction(TransactionBatchEntity transactionBatchEntity) {
return transactionBatchEntity.getTransactions().stream()
.map(this::getTransactionView)
.collect(toSet());
.sorted(Comparator.comparing(TransactionView::getAmountTotalLcy).reversed())
.collect(Collectors.toCollection(LinkedHashSet::new));
}

private TransactionView getTransactionView(TransactionEntity transactionEntity) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,10 @@ void testAllTransactions() {

SearchRequest searchRequest = new SearchRequest();
TransactionItemEntity transactionItem = new TransactionItemEntity();
TransactionItemEntity transactionItem3 = new TransactionItemEntity();
TransactionEntity transactionEntity = new TransactionEntity();
TransactionEntity transactionEntity2 = new TransactionEntity();
TransactionEntity transactionEntity3 = new TransactionEntity();
Violation violation = new Violation();
Account accountDebit = Account.builder().name("debit").code("debit-code").refCode("dcod").build();
Account accountCredit = new Account().toBuilder().name("credit").code("credit-code").refCode("ccod").build();
Expand All @@ -70,14 +72,23 @@ void testAllTransactions() {
transactionEntity.setLedgerDispatchApproved(Boolean.FALSE);
transactionEntity.setStatus(TransactionStatus.FAIL);

transactionEntity3.setId("tx-id-3");
transactionEntity3.setTransactionType(TransactionType.CustomerPayment);
transactionEntity3.setAutomatedValidationStatus(ValidationStatus.VALIDATED);
transactionEntity3.setTransactionApproved(Boolean.TRUE);
transactionEntity3.setLedgerDispatchApproved(Boolean.TRUE);
transactionEntity3.setStatus(TransactionStatus.OK);

transactionItem.setId("tx-item-id");
transactionItem3.setId("tx-item-id-3");

violation.setTxItemId(Optional.of(transactionItem.getId().toString()));
violation.setSource(Source.ERP);
violation.setSeverity(org.cardanofoundation.lob.app.accounting_reporting_core.domain.core.Violation.Severity.WARN);
violation.setCode(CORE_CURRENCY_NOT_FOUND);

transactionEntity.setItems(Set.of(transactionItem));
transactionEntity3.setItems(Set.of(transactionItem3));
transactionEntity.setViolations(Set.of(violation));

transactionItem.setAccountDebit(Optional.of(accountDebit));
Expand All @@ -86,6 +97,13 @@ void testAllTransactions() {
transactionItem.setAmountFcy(BigDecimal.valueOf(1000));
transactionItem.setAmountLcy(BigDecimal.valueOf(1000));

transactionItem3.setAccountDebit(Optional.of(accountDebit));
transactionItem3.setAccountCredit(Optional.of(accountCredit));
transactionItem3.setTransaction(transactionEntity);
transactionItem3.setAmountFcy(BigDecimal.valueOf(500));
transactionItem3.setAmountLcy(BigDecimal.valueOf(500));


transactionEntity2.setId("tx-id2");
transactionEntity2.setTransactionInternalNumber("tx-id2-internal");
LocalDate localDate = LocalDate.now();
Expand All @@ -96,26 +114,28 @@ void testAllTransactions() {
transactionEntity2.setLedgerDispatchApproved(Boolean.TRUE);
transactionEntity2.setStatus(TransactionStatus.OK);

when(transactionRepositoryGateway.findAllByStatus(any(), any(), any())).thenReturn(List.of(transactionEntity, transactionEntity2));
when(transactionRepositoryGateway.findAllByStatus(any(), any(), any())).thenReturn(List.of(transactionEntity, transactionEntity2, transactionEntity3));

List<TransactionView> result = accountingCorePresentationConverter.allTransactions(searchRequest);

assertEquals(2, result.size());
assertEquals(3, result.size());
assertEquals("tx-id", result.get(0).getId());
assertEquals(TransactionType.CardCharge, result.get(0).getTransactionType());
assertEquals(Boolean.TRUE, result.get(0).isTransactionApproved());
assertEquals(Boolean.FALSE, result.get(0).isLedgerDispatchApproved());
assertEquals(TransactionStatus.FAIL, result.get(0).getStatus());
assertEquals(Boolean.FALSE, result.get(1).isTransactionApproved());
assertEquals(Boolean.TRUE, result.get(1).isLedgerDispatchApproved());
assertEquals(ValidationStatus.FAILED, result.get(1).getValidationStatus());
assertEquals("tx-id2-internal", result.get(1).getInternalTransactionNumber());
assertEquals(Boolean.FALSE, result.get(2).isTransactionApproved());
assertEquals(Boolean.TRUE, result.get(2).isLedgerDispatchApproved());
assertEquals(ValidationStatus.FAILED, result.get(2).getValidationStatus());
assertEquals("tx-id2-internal", result.get(2).getInternalTransactionNumber());
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
assertEquals(localDate.format(formatter).toString(), result.get(1).getEntryDate().toString());
assertEquals(localDate.format(formatter).toString(), result.get(2).getEntryDate().toString());
assertEquals("tx-item-id", result.get(0).getItems().stream().findFirst().get().getId());

assertEquals(BigDecimal.valueOf(1000), result.get(0).getItems().stream().findFirst().get().getAmountFcy());
assertEquals(BigDecimal.valueOf(1000), result.get(0).getItems().stream().findFirst().get().getAmountLcy());
assertEquals(BigDecimal.valueOf(500), result.get(1).getItems().stream().findFirst().get().getAmountFcy());
assertEquals(BigDecimal.valueOf(500), result.get(1).getItems().stream().findFirst().get().getAmountLcy());
assertEquals("debit-code", result.get(0).getItems().stream().findFirst().get().getAccountDebitCode());
assertEquals("credit-code", result.get(0).getItems().stream().findFirst().get().getAccountCreditCode());

Expand Down

0 comments on commit 1dd0f7a

Please sign in to comment.