From 0edd4059e6689edaac3445ccce864bc143cee7fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Moj=C5=BEi=C5=A1?= <xmojzis1@fi.muni.cz> Date: Wed, 24 Apr 2024 10:04:41 +0200 Subject: [PATCH] feat: repository tests, unneeded code removed, fixes --- account-query/README.md | 3 +- account-query/pom.xml | 7 +++ .../service/BalanceServiceImpl.java | 6 +- .../pa165/banking/domain/balance/Balance.java | 5 -- .../repository/BalancesRepository.java | 6 -- .../domain/transaction/Transaction.java | 5 -- .../repository/TransactionRepository.java | 14 +---- .../BalanceControllerEmployeeTest.java | 1 - .../controller/BalanceControllerIT.java | 2 +- .../controller/BalanceControllerTest.java | 6 -- .../application/mapper/BalanceMapperTest.java | 5 -- .../service/BalanceServiceImplTest.java | 7 +-- .../banking/domain/balance/BalanceTest.java | 2 - .../repository/BalancesRepositoryTest.java | 54 ++++++++++++++++++ .../report/TransactionStatisticsTest.java | 6 -- .../repository/TransactionRepositoryTest.java | 56 +++++++++++++++++++ .../src/test/resources/application.properties | 6 ++ 17 files changed, 133 insertions(+), 58 deletions(-) rename account-query/src/main/java/cz/muni/pa165/banking/domain/{balance => transaction}/repository/TransactionRepository.java (51%) create mode 100644 account-query/src/test/java/cz/muni/pa165/banking/domain/balance/repository/BalancesRepositoryTest.java create mode 100644 account-query/src/test/java/cz/muni/pa165/banking/domain/transaction/repository/TransactionRepositoryTest.java create mode 100644 account-query/src/test/resources/application.properties diff --git a/account-query/README.md b/account-query/README.md index 8f57dba..e4e8e26 100644 --- a/account-query/README.md +++ b/account-query/README.md @@ -1,11 +1,12 @@ # Balance Service -<p>The Balance Service, allows to view current balance of an account and +<p>The Balance Service allows to view current balance of an account and transaction history of an account from some date range. It also provides bank employees an ability to monitor all customers bank transactions. The service also provides a statistical module (for employees), which can report total and average (per account) transactions (deposits, withdrawals, outgoing and incoming payments) in a selected date range.</p> + <p>This service is composed of classes as can be seen on the diagram, in repository there are balances of accounts stored. Every balance class has current balance stored in itself together with a list of transactions which diff --git a/account-query/pom.xml b/account-query/pom.xml index 963d8c5..2712791 100644 --- a/account-query/pom.xml +++ b/account-query/pom.xml @@ -166,6 +166,13 @@ <version>${org.mapstruct.version}</version> </dependency> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <scope>test</scope> + </dependency> + + <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> diff --git a/account-query/src/main/java/cz/muni/pa165/banking/application/service/BalanceServiceImpl.java b/account-query/src/main/java/cz/muni/pa165/banking/application/service/BalanceServiceImpl.java index ebc683d..e2cf401 100644 --- a/account-query/src/main/java/cz/muni/pa165/banking/application/service/BalanceServiceImpl.java +++ b/account-query/src/main/java/cz/muni/pa165/banking/application/service/BalanceServiceImpl.java @@ -2,7 +2,7 @@ package cz.muni.pa165.banking.application.service; import cz.muni.pa165.banking.domain.balance.Balance; import cz.muni.pa165.banking.domain.balance.repository.BalancesRepository; -import cz.muni.pa165.banking.domain.balance.repository.TransactionRepository; +import cz.muni.pa165.banking.domain.transaction.repository.TransactionRepository; import cz.muni.pa165.banking.domain.balance.service.BalanceService; import cz.muni.pa165.banking.domain.report.StatisticalReport; import cz.muni.pa165.banking.domain.transaction.Transaction; @@ -41,7 +41,7 @@ public class BalanceServiceImpl implements BalanceService { @Override @Transactional public void addNewBalance(String id) { - balanceRepository.addBalance(id); + balanceRepository.save(new Balance(id)); } @Override @@ -74,7 +74,7 @@ public class BalanceServiceImpl implements BalanceService { throws EntityNotFoundException { Balance balance = findById(id); Transaction t = balance.addTransaction(amount, type, processID); - balanceRepository.save(balance); + //balanceRepository.save(balance); transactionRepository.save(t); } diff --git a/account-query/src/main/java/cz/muni/pa165/banking/domain/balance/Balance.java b/account-query/src/main/java/cz/muni/pa165/banking/domain/balance/Balance.java index 869ccdd..7396304 100644 --- a/account-query/src/main/java/cz/muni/pa165/banking/domain/balance/Balance.java +++ b/account-query/src/main/java/cz/muni/pa165/banking/domain/balance/Balance.java @@ -28,7 +28,6 @@ public class Balance { private BigDecimal amount; @OneToMany(mappedBy = "balance") - //@JoinColumn(name="balance_id") private List<Transaction> transactionList = new ArrayList<>(); public Balance(String accountId) { @@ -109,10 +108,6 @@ public class Balance { this.amount = amount; } - public void setAccountId(String accountId) { - this.accountId = accountId; - } - @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/account-query/src/main/java/cz/muni/pa165/banking/domain/balance/repository/BalancesRepository.java b/account-query/src/main/java/cz/muni/pa165/banking/domain/balance/repository/BalancesRepository.java index ae38e10..257238d 100644 --- a/account-query/src/main/java/cz/muni/pa165/banking/domain/balance/repository/BalancesRepository.java +++ b/account-query/src/main/java/cz/muni/pa165/banking/domain/balance/repository/BalancesRepository.java @@ -1,9 +1,7 @@ package cz.muni.pa165.banking.domain.balance.repository; import cz.muni.pa165.banking.domain.balance.Balance; -import cz.muni.pa165.banking.domain.transaction.Transaction; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @@ -19,10 +17,6 @@ public interface BalancesRepository extends JpaRepository<Balance, String> { @Query("SELECT u FROM Balance u where u.accountId = :id") Optional<Balance> findById(String id); - default void addBalance(String id) { - this.save(new Balance(id)); - } - @Query("SELECT u.accountId FROM Balance u") List<String> getAllIds(); } diff --git a/account-query/src/main/java/cz/muni/pa165/banking/domain/transaction/Transaction.java b/account-query/src/main/java/cz/muni/pa165/banking/domain/transaction/Transaction.java index fd2fa62..4ff7530 100644 --- a/account-query/src/main/java/cz/muni/pa165/banking/domain/transaction/Transaction.java +++ b/account-query/src/main/java/cz/muni/pa165/banking/domain/transaction/Transaction.java @@ -3,7 +3,6 @@ package cz.muni.pa165.banking.domain.transaction; import cz.muni.pa165.banking.domain.balance.Balance; import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; -import org.hibernate.annotations.Type; import java.math.BigDecimal; import java.time.OffsetDateTime; @@ -80,10 +79,6 @@ public class Transaction { this.balance = balance; } - public void setProcessId(UUID processId) { - this.processId = processId; - } - public void setDate(OffsetDateTime date) { this.date = date; } diff --git a/account-query/src/main/java/cz/muni/pa165/banking/domain/balance/repository/TransactionRepository.java b/account-query/src/main/java/cz/muni/pa165/banking/domain/transaction/repository/TransactionRepository.java similarity index 51% rename from account-query/src/main/java/cz/muni/pa165/banking/domain/balance/repository/TransactionRepository.java rename to account-query/src/main/java/cz/muni/pa165/banking/domain/transaction/repository/TransactionRepository.java index 9d77134..cb200d9 100644 --- a/account-query/src/main/java/cz/muni/pa165/banking/domain/balance/repository/TransactionRepository.java +++ b/account-query/src/main/java/cz/muni/pa165/banking/domain/transaction/repository/TransactionRepository.java @@ -1,30 +1,18 @@ -package cz.muni.pa165.banking.domain.balance.repository; +package cz.muni.pa165.banking.domain.transaction.repository; import cz.muni.pa165.banking.domain.balance.Balance; import cz.muni.pa165.banking.domain.transaction.Transaction; -import cz.muni.pa165.banking.domain.transaction.TransactionType; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; -import java.math.BigDecimal; -import java.time.OffsetDateTime; import java.util.Collection; -import java.util.Optional; -import java.util.UUID; /** * @author Martin Mojzis */ @Repository public interface TransactionRepository extends JpaRepository<Transaction, Long> { - default void addTransaction(BigDecimal amount, TransactionType type, UUID processId, Balance balance) { - Transaction tr = new Transaction(type, amount, - OffsetDateTime.now(), processId, balance); - this.save(tr); - } - @Query("SELECT u FROM Transaction u where u.balance = :balance") Collection<Transaction> findByBalance(Balance balance); } diff --git a/account-query/src/test/java/cz/muni/pa165/banking/application/controller/BalanceControllerEmployeeTest.java b/account-query/src/test/java/cz/muni/pa165/banking/application/controller/BalanceControllerEmployeeTest.java index c93f262..2c61cb2 100644 --- a/account-query/src/test/java/cz/muni/pa165/banking/application/controller/BalanceControllerEmployeeTest.java +++ b/account-query/src/test/java/cz/muni/pa165/banking/application/controller/BalanceControllerEmployeeTest.java @@ -4,7 +4,6 @@ import cz.muni.pa165.banking.account.query.dto.Transaction; import cz.muni.pa165.banking.account.query.dto.TransactionType; import cz.muni.pa165.banking.account.query.dto.TransactionsReport; import cz.muni.pa165.banking.application.facade.BalanceFacade; -import cz.muni.pa165.banking.domain.report.StatisticalReport; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; diff --git a/account-query/src/test/java/cz/muni/pa165/banking/application/controller/BalanceControllerIT.java b/account-query/src/test/java/cz/muni/pa165/banking/application/controller/BalanceControllerIT.java index 69e9cf5..1ff667f 100644 --- a/account-query/src/test/java/cz/muni/pa165/banking/application/controller/BalanceControllerIT.java +++ b/account-query/src/test/java/cz/muni/pa165/banking/application/controller/BalanceControllerIT.java @@ -11,7 +11,7 @@ import cz.muni.pa165.banking.application.mapper.BalanceMapperImpl; import cz.muni.pa165.banking.application.service.BalanceServiceImpl; import cz.muni.pa165.banking.domain.balance.Balance; import cz.muni.pa165.banking.domain.balance.repository.BalancesRepository; -import cz.muni.pa165.banking.domain.balance.repository.TransactionRepository; +import cz.muni.pa165.banking.domain.transaction.repository.TransactionRepository; import cz.muni.pa165.banking.domain.balance.service.BalanceService; import cz.muni.pa165.banking.domain.transaction.TransactionType; import cz.muni.pa165.banking.exception.CustomExceptionHandler; diff --git a/account-query/src/test/java/cz/muni/pa165/banking/application/controller/BalanceControllerTest.java b/account-query/src/test/java/cz/muni/pa165/banking/application/controller/BalanceControllerTest.java index 455aa39..0c65de1 100644 --- a/account-query/src/test/java/cz/muni/pa165/banking/application/controller/BalanceControllerTest.java +++ b/account-query/src/test/java/cz/muni/pa165/banking/application/controller/BalanceControllerTest.java @@ -9,23 +9,17 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import java.math.BigDecimal; import java.time.LocalDate; -import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.List; -import java.util.Optional; import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; - - @ExtendWith(MockitoExtension.class) class BalanceControllerTest { @Mock diff --git a/account-query/src/test/java/cz/muni/pa165/banking/application/mapper/BalanceMapperTest.java b/account-query/src/test/java/cz/muni/pa165/banking/application/mapper/BalanceMapperTest.java index 6c1f6df..0d931bb 100644 --- a/account-query/src/test/java/cz/muni/pa165/banking/application/mapper/BalanceMapperTest.java +++ b/account-query/src/test/java/cz/muni/pa165/banking/application/mapper/BalanceMapperTest.java @@ -1,14 +1,9 @@ package cz.muni.pa165.banking.application.mapper; -import cz.muni.pa165.banking.account.query.dto.Transaction; import cz.muni.pa165.banking.domain.transaction.TransactionType; import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; - - class BalanceMapperTest { BalanceMapper balanceMapper = new BalanceMapperImpl(); @Test diff --git a/account-query/src/test/java/cz/muni/pa165/banking/application/service/BalanceServiceImplTest.java b/account-query/src/test/java/cz/muni/pa165/banking/application/service/BalanceServiceImplTest.java index 6902f94..6c0141c 100644 --- a/account-query/src/test/java/cz/muni/pa165/banking/application/service/BalanceServiceImplTest.java +++ b/account-query/src/test/java/cz/muni/pa165/banking/application/service/BalanceServiceImplTest.java @@ -5,7 +5,7 @@ import cz.muni.pa165.banking.domain.balance.repository.BalancesRepository; import static org.junit.jupiter.api.Assertions.*; -import cz.muni.pa165.banking.domain.balance.repository.TransactionRepository; +import cz.muni.pa165.banking.domain.transaction.repository.TransactionRepository; import cz.muni.pa165.banking.domain.report.StatisticalReport; import cz.muni.pa165.banking.domain.transaction.Transaction; import cz.muni.pa165.banking.domain.transaction.TransactionType; @@ -24,7 +24,6 @@ import java.util.List; import java.util.Optional; import java.util.UUID; -import static org.junit.jupiter.api.Assertions.*; import static org.assertj.core.api.Assertions.assertThat; @@ -84,13 +83,13 @@ class BalanceServiceImplTest { void addNewBalance_createsBalance() { // Arrange String id = "id"; - Mockito.doNothing().when(balanceRepository).addBalance(id); + Mockito.when(balanceRepository.save(new Balance(id))).thenReturn(new Balance(id)); // Act balanceService.addNewBalance(id); // Assert - Mockito.verify(balanceRepository, Mockito.times(1)).addBalance(id); + Mockito.verify(balanceRepository, Mockito.times(1)).save(new Balance(id)); } @Test diff --git a/account-query/src/test/java/cz/muni/pa165/banking/domain/balance/BalanceTest.java b/account-query/src/test/java/cz/muni/pa165/banking/domain/balance/BalanceTest.java index 950ace7..136a078 100644 --- a/account-query/src/test/java/cz/muni/pa165/banking/domain/balance/BalanceTest.java +++ b/account-query/src/test/java/cz/muni/pa165/banking/domain/balance/BalanceTest.java @@ -6,8 +6,6 @@ import cz.muni.pa165.banking.domain.transaction.TransactionType; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; - import java.math.BigDecimal; import java.time.OffsetDateTime; diff --git a/account-query/src/test/java/cz/muni/pa165/banking/domain/balance/repository/BalancesRepositoryTest.java b/account-query/src/test/java/cz/muni/pa165/banking/domain/balance/repository/BalancesRepositoryTest.java new file mode 100644 index 0000000..c2eb8bd --- /dev/null +++ b/account-query/src/test/java/cz/muni/pa165/banking/domain/balance/repository/BalancesRepositoryTest.java @@ -0,0 +1,54 @@ +package cz.muni.pa165.banking.domain.balance.repository; + +import cz.muni.pa165.banking.domain.balance.Balance; +import cz.muni.pa165.banking.domain.transaction.TransactionType; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * @author Martin Mojzis + */ +@ExtendWith(SpringExtension.class) +@DataJpaTest +class BalancesRepositoryTest { + + @Autowired + private BalancesRepository repository; + + @BeforeAll + public static void initDb(@Autowired BalancesRepository repository) { + Balance balance = new Balance("id1"); + + balance.addTransaction(BigDecimal.TEN, TransactionType.CREDIT, new UUID(2,2)); + repository.save(balance); + + repository.save(balance); + repository.save(new Balance("id2")); + + } + + @Test + void findById_exists_returnsBalance() { + Optional<Balance> balance = repository.findById("id1"); + assertEquals(balance.get().getAccountId(), "id1"); + assertEquals(balance.get().getAmount().byteValueExact(), BigDecimal.TEN.byteValueExact()); + } + + @Test + void getAllIds_returnsAddIds() { + List<String> result = repository.getAllIds(); + assertTrue(result.contains("id1")); + assertTrue(result.contains("id2")); + } +} \ No newline at end of file diff --git a/account-query/src/test/java/cz/muni/pa165/banking/domain/report/TransactionStatisticsTest.java b/account-query/src/test/java/cz/muni/pa165/banking/domain/report/TransactionStatisticsTest.java index 965676f..8a2d115 100644 --- a/account-query/src/test/java/cz/muni/pa165/banking/domain/report/TransactionStatisticsTest.java +++ b/account-query/src/test/java/cz/muni/pa165/banking/domain/report/TransactionStatisticsTest.java @@ -1,16 +1,10 @@ package cz.muni.pa165.banking.domain.report; -import cz.muni.pa165.banking.domain.transaction.Transaction; -import cz.muni.pa165.banking.domain.transaction.TransactionType; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.math.BigDecimal; -import java.time.OffsetDateTime; -import java.util.List; - import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; class TransactionStatisticsTest { TransactionStatistics statistics; diff --git a/account-query/src/test/java/cz/muni/pa165/banking/domain/transaction/repository/TransactionRepositoryTest.java b/account-query/src/test/java/cz/muni/pa165/banking/domain/transaction/repository/TransactionRepositoryTest.java new file mode 100644 index 0000000..019c69e --- /dev/null +++ b/account-query/src/test/java/cz/muni/pa165/banking/domain/transaction/repository/TransactionRepositoryTest.java @@ -0,0 +1,56 @@ +package cz.muni.pa165.banking.domain.transaction.repository; + +import cz.muni.pa165.banking.domain.balance.Balance; +import cz.muni.pa165.banking.domain.balance.repository.BalancesRepository; +import cz.muni.pa165.banking.domain.transaction.Transaction; +import cz.muni.pa165.banking.domain.transaction.TransactionType; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.math.BigDecimal; +import java.util.Collection; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * @author Martin Mojzis + */ +@ExtendWith(SpringExtension.class) +@DataJpaTest +class TransactionRepositoryTest { + + @Autowired + private TransactionRepository repository; + @Autowired + private BalancesRepository balancesRepository; + + @BeforeAll + public static void initDb(@Autowired TransactionRepository repository, @Autowired BalancesRepository balancesRepository) { + balancesRepository.save(new Balance("id1")); + balancesRepository.save(new Balance("id2")); + } + + @Test + void findByBalance_called_returnsExpectedTransactions(){ + //Arrange + Balance balance = balancesRepository.findById("id1").get(); + Transaction tr = balance.addTransaction(BigDecimal.TEN, TransactionType.CREDIT, new UUID(2,2)); + balancesRepository.save(balance); + repository.save(tr); + Balance balance2 = balancesRepository.findById("id2").get(); + + //Act + Collection<Transaction> result = repository.findByBalance(balance); + Collection<Transaction> result2 = repository.findByBalance(balance2); + + //Assert + assertTrue(result.contains(tr)); + assertTrue(result.size() == 1); + assertTrue(result2.isEmpty()); + } +} \ No newline at end of file diff --git a/account-query/src/test/resources/application.properties b/account-query/src/test/resources/application.properties new file mode 100644 index 0000000..bd1356e --- /dev/null +++ b/account-query/src/test/resources/application.properties @@ -0,0 +1,6 @@ +spring.h2.console.enabled=true +spring.datasource.url=jdbc:h2:mem:testdb +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.username=user +spring.datasource.password=password +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect -- GitLab