From 3fb6055ab9d2b79a0f444ad73979aca30edf795e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Moj=C5=BEi=C5=A1?= <xmojzis1@fi.muni.cz> Date: Fri, 5 Apr 2024 18:26:31 +0200 Subject: [PATCH] account management tests --- .../api/AccountControllerTest.java | 113 ++++++++++++++ .../application/api/UserControllerTest.java | 69 +++++++++ .../application/facade/AccountFacadeTest.java | 142 ++++++++++++++++++ .../application/facade/UserFacadeTest.java | 81 ++++++++++ .../application/mapper/DtoMapperTest.java | 74 +++++++++ .../repository/AccountRepositoryImplTest.java | 78 ++++++++++ .../ScheduledPaymentRepositoryImplTest.java | 70 +++++++++ .../repository/UserRepositoryImplTest.java | 57 +++++++ .../service/AccountServiceTest.java | 135 +++++++++++++++++ .../application/service/UserServiceTest.java | 64 ++++++++ .../banking/domain/account/AccountTest.java | 54 +++++++ .../ScheduledPaymentProcessorTest.java | 47 ++++++ .../scheduled/ScheduledPaymentTest.java | 42 ++++++ .../pa165/banking/domain/user/UserTest.java | 57 +++++++ 14 files changed, 1083 insertions(+) create mode 100644 account-management/src/test/java/cz/muni/pa165/banking/application/api/AccountControllerTest.java create mode 100644 account-management/src/test/java/cz/muni/pa165/banking/application/api/UserControllerTest.java create mode 100644 account-management/src/test/java/cz/muni/pa165/banking/application/facade/AccountFacadeTest.java create mode 100644 account-management/src/test/java/cz/muni/pa165/banking/application/facade/UserFacadeTest.java create mode 100644 account-management/src/test/java/cz/muni/pa165/banking/application/mapper/DtoMapperTest.java create mode 100644 account-management/src/test/java/cz/muni/pa165/banking/application/repository/AccountRepositoryImplTest.java create mode 100644 account-management/src/test/java/cz/muni/pa165/banking/application/repository/ScheduledPaymentRepositoryImplTest.java create mode 100644 account-management/src/test/java/cz/muni/pa165/banking/application/repository/UserRepositoryImplTest.java create mode 100644 account-management/src/test/java/cz/muni/pa165/banking/application/service/AccountServiceTest.java create mode 100644 account-management/src/test/java/cz/muni/pa165/banking/application/service/UserServiceTest.java create mode 100644 account-management/src/test/java/cz/muni/pa165/banking/domain/account/AccountTest.java create mode 100644 account-management/src/test/java/cz/muni/pa165/banking/domain/scheduled/ScheduledPaymentProcessorTest.java create mode 100644 account-management/src/test/java/cz/muni/pa165/banking/domain/scheduled/ScheduledPaymentTest.java create mode 100644 account-management/src/test/java/cz/muni/pa165/banking/domain/user/UserTest.java diff --git a/account-management/src/test/java/cz/muni/pa165/banking/application/api/AccountControllerTest.java b/account-management/src/test/java/cz/muni/pa165/banking/application/api/AccountControllerTest.java new file mode 100644 index 0000000..601a9fa --- /dev/null +++ b/account-management/src/test/java/cz/muni/pa165/banking/application/api/AccountControllerTest.java @@ -0,0 +1,113 @@ +package cz.muni.pa165.banking.application.api; + +import cz.muni.pa165.banking.account.management.dto.AccountDto; +import cz.muni.pa165.banking.account.management.dto.NewAccountDto; +import cz.muni.pa165.banking.account.management.dto.ScheduledPaymentDto; +import cz.muni.pa165.banking.account.management.dto.ScheduledPaymentsDto; +import cz.muni.pa165.banking.application.facade.AccountFacade; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.ResponseEntity; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class AccountControllerTest { + @Mock + private AccountFacade accountFacade; + @InjectMocks + private AccountController accountController; + + @Test + void createAccount_ValidRequest_ReturnsAccount() { + // Arrange + NewAccountDto newAccountDto = new NewAccountDto(); + AccountDto createdAccountDto = new AccountDto(); + when(accountFacade.createAccount(any(NewAccountDto.class))).thenReturn(createdAccountDto); + + // Act + ResponseEntity<AccountDto> responseEntity = accountController.createAccount(newAccountDto); + + // Assert + assertNotNull(responseEntity.getBody()); + verify(accountFacade).createAccount(newAccountDto); + } + + @Test + void getAccount_ValidAccountNumber_ReturnsAccount() { + // Arrange + String accountNumber = "123456789"; + AccountDto accountDto = new AccountDto(); + when(accountFacade.getAccount(accountNumber)).thenReturn(accountDto); + + // Act + ResponseEntity<AccountDto> responseEntity = accountController.getAccount(accountNumber); + + // Assert + assertNotNull(responseEntity.getBody()); + verify(accountFacade).getAccount(accountNumber); + } + + @Test + void getAccount_InvalidAccountNumber_ReturnsNull() { + // Arrange + String invalidAccountNumber = "123456789"; + when(accountFacade.getAccount(invalidAccountNumber)).thenReturn(null); + + // Act + ResponseEntity<AccountDto> responseEntity = accountController.getAccount(invalidAccountNumber); + + // Assert + assertNull(responseEntity.getBody()); + verify(accountFacade).getAccount(invalidAccountNumber); + } + + @Test + void getScheduledPayments_ValidAccountNumber_ReturnsPayments() { + // Arrange + String accountNumber = "123456789"; + ScheduledPaymentsDto scheduledPaymentsDto = new ScheduledPaymentsDto(); + when(accountFacade.getScheduledPaymentsOfAccount(accountNumber)).thenReturn(scheduledPaymentsDto); + + // Act + ResponseEntity<ScheduledPaymentsDto> responseEntity = accountController.getScheduledPayments(accountNumber); + + // Assert + assertNotNull(responseEntity.getBody()); + verify(accountFacade).getScheduledPaymentsOfAccount(accountNumber); + } + + @Test + void getScheduledPayments_InvalidAccountNumber_ReturnsNull() { + // Arrange + String invalidAccountNumber = "123456789"; + when(accountFacade.getScheduledPaymentsOfAccount(invalidAccountNumber)).thenReturn(null); + + // Act + ResponseEntity<ScheduledPaymentsDto> responseEntity = accountController.getScheduledPayments(invalidAccountNumber); + + // Assert + assertNull(responseEntity.getBody()); + verify(accountFacade).getScheduledPaymentsOfAccount(invalidAccountNumber); + } + + @Test + void schedulePayment_ValidRequest_ReturnsPayment() { + // Arrange + ScheduledPaymentDto scheduledPaymentDto = new ScheduledPaymentDto(); + when(accountFacade.schedulePayment(any(ScheduledPaymentDto.class))).thenReturn(scheduledPaymentDto); + + // Act + ResponseEntity<ScheduledPaymentDto> responseEntity = accountController.schedulePayment(scheduledPaymentDto); + + // Assert + assertNotNull(responseEntity.getBody()); + verify(accountFacade).schedulePayment(scheduledPaymentDto); + } +} diff --git a/account-management/src/test/java/cz/muni/pa165/banking/application/api/UserControllerTest.java b/account-management/src/test/java/cz/muni/pa165/banking/application/api/UserControllerTest.java new file mode 100644 index 0000000..418e07f --- /dev/null +++ b/account-management/src/test/java/cz/muni/pa165/banking/application/api/UserControllerTest.java @@ -0,0 +1,69 @@ +package cz.muni.pa165.banking.application.api; + +import cz.muni.pa165.banking.account.management.dto.NewUserDto; +import cz.muni.pa165.banking.account.management.dto.UserDto; +import cz.muni.pa165.banking.application.facade.UserFacade; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class UserControllerTest { + @Mock + private UserFacade userFacade; + @InjectMocks + private UserController userController; + + @Test + void createUser_ValidRequest_ReturnsUser() { + // Arrange + NewUserDto newUserDto = new NewUserDto(); + UserDto createdUserDto = new UserDto(); + when(userFacade.createUser(any(NewUserDto.class))).thenReturn(createdUserDto); + + // Act + ResponseEntity<UserDto> responseEntity = userController.createUser(newUserDto); + + // Assert + assertNotNull(responseEntity.getBody()); + verify(userFacade).createUser(newUserDto); + } + + @Test + void getUser_ValidUserId_ReturnsUser() { + // Arrange + Long userId = 1L; + UserDto userDto = new UserDto(); + when(userFacade.getUser(userId)).thenReturn(userDto); + + // Act + ResponseEntity<UserDto> responseEntity = userController.getUser(userId); + + // Assert + assertNotNull(responseEntity.getBody()); + verify(userFacade).getUser(userId); + } + + @Test + void getUser_InvalidUserId_ReturnsNull() { + // Arrange + Long userId = 123L; + when(userFacade.getUser(userId)).thenReturn(null); + + // Act + ResponseEntity<UserDto> responseEntity = userController.getUser(userId); + + // Assert + assertNull(responseEntity.getBody()); + verify(userFacade).getUser(userId); + } +} diff --git a/account-management/src/test/java/cz/muni/pa165/banking/application/facade/AccountFacadeTest.java b/account-management/src/test/java/cz/muni/pa165/banking/application/facade/AccountFacadeTest.java new file mode 100644 index 0000000..38dd70b --- /dev/null +++ b/account-management/src/test/java/cz/muni/pa165/banking/application/facade/AccountFacadeTest.java @@ -0,0 +1,142 @@ +package cz.muni.pa165.banking.application.facade; + +import cz.muni.pa165.banking.account.management.dto.NewAccountDto; +import cz.muni.pa165.banking.account.management.dto.AccountDto; +import cz.muni.pa165.banking.account.management.dto.ScheduledPaymentDto; +import cz.muni.pa165.banking.account.management.dto.ScheduledPaymentsDto; +import cz.muni.pa165.banking.application.mapper.DtoMapper; +import cz.muni.pa165.banking.application.service.AccountService; +import cz.muni.pa165.banking.domain.account.Account; +import cz.muni.pa165.banking.domain.scheduled.ScheduledPayment; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@SpringBootTest +class AccountFacadeTest { + + @Mock + private AccountService accountService; + + @Mock + private DtoMapper mapper; + + @InjectMocks + private AccountFacade accountFacade; + + @Test + void createAccount_ValidRequest_ReturnsAccountDto() { + // Arrange + NewAccountDto newAccountDto = new NewAccountDto(); + AccountDto accountDto = new AccountDto(); + when(mapper.map(any(Account.class))).thenReturn(accountDto); + when(accountService.createAccount(any())).thenReturn(new Account()); + + // Act + AccountDto result = accountFacade.createAccount(newAccountDto); + + // Assert + assertEquals(accountDto, result); + verify(accountService).createAccount(any()); + verify(mapper).map(any(Account.class)); + } + + @Test + void getAccount_ValidAccountNumber_ReturnsAccountDto() { + // Arrange + String accountNumber = "123456789"; + AccountDto accountDto = new AccountDto(); + when(mapper.map(any(Account.class))).thenReturn(accountDto); + when(accountService.getAccountByNumber(accountNumber)).thenReturn(new Account()); + + // Act + AccountDto result = accountFacade.getAccount(accountNumber); + + // Assert + assertEquals(accountDto, result); + verify(accountService).getAccountByNumber(accountNumber); + verify(mapper).map(any(Account.class)); + } + + @Test + void getAccount_InvalidAccountNumber_ReturnsNull() { + // Arrange + String invalidAccountNumber = "invalidAccountNumber"; + when(accountService.getAccountByNumber(invalidAccountNumber)).thenReturn(null); + + // Act & Assert + assertNull(accountFacade.getAccount(invalidAccountNumber)); + } + + @Test + void schedulePayment_ValidRequest_ReturnsScheduledPaymentDto() { + // Arrange + ScheduledPaymentDto scheduledPaymentDto = new ScheduledPaymentDto(); + when(mapper.map(any(ScheduledPayment.class))).thenReturn(scheduledPaymentDto); + when(accountService.schedulePayment(any())).thenReturn(new ScheduledPayment()); + + // Act + ScheduledPaymentDto result = accountFacade.schedulePayment(scheduledPaymentDto); + + // Assert + assertEquals(scheduledPaymentDto, result); + verify(accountService).schedulePayment(any()); + verify(mapper).map(any(ScheduledPayment.class)); + } + + @Test + void schedulePayment_InvalidRequest_ReturnsNull() { + // Arrange + ScheduledPaymentDto scheduledPaymentDto = new ScheduledPaymentDto(); + when(accountService.schedulePayment(any())).thenReturn(null); + + // Act + ScheduledPaymentDto result = accountFacade.schedulePayment(scheduledPaymentDto); + + // Assert + assertNull(result); + verify(accountService).schedulePayment(any()); + } + + @Test + void getScheduledPaymentsOfAccount_ValidAccountNumber_ReturnsPayments() { + // Arrange + String validAccountNumber = "123456789"; + ScheduledPaymentsDto scheduledPaymentsDto = new ScheduledPaymentsDto(); + List<ScheduledPayment> scheduledPaymentsList = new ArrayList<>(); + Account account = new Account(); + account.setId(1L); + when(accountService.getAccountByNumber(validAccountNumber)).thenReturn(account); + when(accountService.getScheduledPaymentsOfAccount(any(Long.class))).thenReturn(scheduledPaymentsList); + when(mapper.map(scheduledPaymentsList)).thenReturn(scheduledPaymentsDto); + + // Act + ScheduledPaymentsDto result = accountFacade.getScheduledPaymentsOfAccount(validAccountNumber); + + // Assert + assertNotNull(result); + verify(accountService).getScheduledPaymentsOfAccount(eq(1L)); + verify(mapper).map(scheduledPaymentsList); + } + + + @Test + void getScheduledPaymentsOfAccount_InvalidAccountNumber_ThrowsException() { + // Arrange + String invalidAccountNumber = "invalidAccountNumber"; + when(accountService.getAccountByNumber(invalidAccountNumber)).thenReturn(null); + + // Act & Assert + assertThrows(RuntimeException.class, () -> accountFacade.getScheduledPaymentsOfAccount(invalidAccountNumber)); + } +} diff --git a/account-management/src/test/java/cz/muni/pa165/banking/application/facade/UserFacadeTest.java b/account-management/src/test/java/cz/muni/pa165/banking/application/facade/UserFacadeTest.java new file mode 100644 index 0000000..62fdea6 --- /dev/null +++ b/account-management/src/test/java/cz/muni/pa165/banking/application/facade/UserFacadeTest.java @@ -0,0 +1,81 @@ +package cz.muni.pa165.banking.application.facade; + +import cz.muni.pa165.banking.account.management.dto.NewUserDto; +import cz.muni.pa165.banking.account.management.dto.UserDto; +import cz.muni.pa165.banking.application.mapper.DtoMapper; +import cz.muni.pa165.banking.application.service.UserService; +import cz.muni.pa165.banking.domain.user.User; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@SpringBootTest +class UserFacadeTest { + + @Mock + private UserService userService; + + @Mock + private DtoMapper mapper; + + @InjectMocks + private UserFacade userFacade; + + @Test + void createUser_ValidRequest_ReturnsUserDto() { + // Arrange + NewUserDto newUserDto = new NewUserDto(); + UserDto userDto = new UserDto(); + when(userService.createUser(any())).thenReturn(new User()); + when(mapper.map(any(User.class))).thenReturn(userDto); + + // Act + UserDto result = userFacade.createUser(newUserDto); + + // Assert + assertEquals(userDto, result); + verify(userService).createUser(any()); + verify(mapper).map(any(User.class)); + } + + @Test + void getUser_ValidUserId_ReturnsUserDto() { + // Arrange + Long userId = 1L; + UserDto userDto = new UserDto(); + when(userService.getUser(userId)).thenReturn(new User()); + when(mapper.map(any(User.class))).thenReturn(userDto); + + // Act + UserDto result = userFacade.getUser(userId); + + // Assert + assertEquals(userDto, result); + verify(userService).getUser(userId); + verify(mapper).map(any(User.class)); + } + + @Test + void getUser_InvalidUserId_ReturnsNull() { + // Arrange + Long invalidUserId = 123L; + when(userService.getUser(invalidUserId)).thenReturn(null); + + // Act + UserDto result = userFacade.getUser(invalidUserId); + + // Assert + assertNull(result); + verify(userService).getUser(invalidUserId); + } +} + diff --git a/account-management/src/test/java/cz/muni/pa165/banking/application/mapper/DtoMapperTest.java b/account-management/src/test/java/cz/muni/pa165/banking/application/mapper/DtoMapperTest.java new file mode 100644 index 0000000..662b86c --- /dev/null +++ b/account-management/src/test/java/cz/muni/pa165/banking/application/mapper/DtoMapperTest.java @@ -0,0 +1,74 @@ +package cz.muni.pa165.banking.application.mapper; + +import cz.muni.pa165.banking.account.management.dto.AccountDto; +import cz.muni.pa165.banking.account.management.dto.ScheduledPaymentDto; +import cz.muni.pa165.banking.domain.scheduled.ScheduledPayment; +import cz.muni.pa165.banking.domain.user.UserType; +import cz.muni.pa165.banking.domain.account.Account; +import cz.muni.pa165.banking.domain.account.AccountType; +import cz.muni.pa165.banking.account.management.dto.UserDto; +import cz.muni.pa165.banking.domain.user.User; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mapstruct.factory.Mappers; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith(MockitoExtension.class) +class DtoMapperTest { + private final DtoMapper mapper = Mappers.getMapper(DtoMapper.class); + + @Test + public void mapUserToUserDto() { + // Arrange + User user = new User(); + user.setId(1L); + user.setFirstName("John"); + user.setLastName("Doe"); + user.setUserType(UserType.EMPLOYEE); + + // Act + UserDto userDto = mapper.map(user); + + // Assert + assertEquals(user.getId(), userDto.getId()); + assertEquals(user.getFirstName(), userDto.getFirstName()); + assertEquals(user.getLastName(), userDto.getLastName()); + assertEquals(user.getUserType(), mapper.map(userDto.getUserType())); + } + + @Test + public void mapScheduledPaymentToScheduledPaymentDto() { + // Arrange + ScheduledPayment scheduledPayment = new ScheduledPayment(); + scheduledPayment.setId(1L); + scheduledPayment.setAmount(100); + + // Act + ScheduledPaymentDto scheduledPaymentDto = mapper.map(scheduledPayment); + + // Assert + assertEquals(scheduledPayment.getId(), scheduledPaymentDto.getId()); + assertEquals(scheduledPayment.getAmount(), scheduledPaymentDto.getAmount()); + } + + @Test + public void mapAccountToAccountDto() { + // Arrange + Account account = new Account(); + account.setId(1L); + account.setUserId(2L); + account.setMaxSpendingLimit(500); + account.setType(AccountType.SAVING); + + // Act + AccountDto accountDto = mapper.map(account); + + // Assert + assertEquals(account.getId(), accountDto.getId()); + assertEquals(account.getUserId(), accountDto.getUserId()); + assertEquals(account.getMaxSpendingLimit(), accountDto.getMaxSpendingLimit()); + assertEquals(account.getType(), mapper.map(accountDto.getType())); + } +} \ No newline at end of file diff --git a/account-management/src/test/java/cz/muni/pa165/banking/application/repository/AccountRepositoryImplTest.java b/account-management/src/test/java/cz/muni/pa165/banking/application/repository/AccountRepositoryImplTest.java new file mode 100644 index 0000000..cf797d0 --- /dev/null +++ b/account-management/src/test/java/cz/muni/pa165/banking/application/repository/AccountRepositoryImplTest.java @@ -0,0 +1,78 @@ +package cz.muni.pa165.banking.application.repository; + +import cz.muni.pa165.banking.domain.account.Account; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.springframework.boot.test.context.SpringBootTest; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +@SpringBootTest +class AccountRepositoryImplTest { + @InjectMocks + private AccountRepositoryImpl accountRepository; + + @Test + void addAccount_ValidAccount_ReturnsAccount() { + // Arrange + Account account = new Account(); + + // Act + Account result = accountRepository.addAccount(account); + + // Assert + assertEquals(account, result); + } + + @Test + void getById_ExistingId_ReturnsAccount() { + // Arrange + Account account = new Account(); + accountRepository.addAccount(account); + Long id = account.getId(); + + // Act + Account result = accountRepository.getById(id); + + // Assert + assertEquals(account, result); + } + + @Test + void getById_NonExistingId_ReturnsNull() { + // Arrange + Long nonExistingId = 123L; + + // Act + Account result = accountRepository.getById(nonExistingId); + + // Assert + assertNull(result); + } + + @Test + void getByAccountNumber_ExistingAccountNumber_ReturnsAccount() { + // Arrange + Account account = new Account(); + accountRepository.addAccount(account); + String accountNumber = account.getAccountNumber(); + + // Act + Account result = accountRepository.getByAccountNumber(accountNumber); + + // Assert + assertEquals(account, result); + } + + @Test + void getByAccountNumber_NonExistingAccountNumber_ReturnsNull() { + // Arrange + String nonExistingAccountNumber = "NonExistingAccountNumber"; + + // Act + Account result = accountRepository.getByAccountNumber(nonExistingAccountNumber); + + // Assert + assertNull(result); + } +} diff --git a/account-management/src/test/java/cz/muni/pa165/banking/application/repository/ScheduledPaymentRepositoryImplTest.java b/account-management/src/test/java/cz/muni/pa165/banking/application/repository/ScheduledPaymentRepositoryImplTest.java new file mode 100644 index 0000000..22e1d2b --- /dev/null +++ b/account-management/src/test/java/cz/muni/pa165/banking/application/repository/ScheduledPaymentRepositoryImplTest.java @@ -0,0 +1,70 @@ +package cz.muni.pa165.banking.application.repository; + +import cz.muni.pa165.banking.domain.scheduled.ScheduledPayment; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.springframework.boot.test.context.SpringBootTest; +import java.util.Map; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +@SpringBootTest +class ScheduledPaymentRepositoryImplTest { + @InjectMocks + private ScheduledPaymentRepositoryImpl scheduledPaymentRepository; + + @Test + void addScheduledPayment_ValidScheduledPayment_ReturnsScheduledPayment() { + // Arrange + ScheduledPayment scheduledPayment = new ScheduledPayment(); + + // Act + ScheduledPayment result = scheduledPaymentRepository.addScheduledPayment(scheduledPayment); + + // Assert + assertEquals(scheduledPayment, result); + } + + @Test + void getById_ExistingId_ReturnsScheduledPayment() { + // Arrange + ScheduledPayment scheduledPayment = new ScheduledPayment(); + scheduledPaymentRepository.addScheduledPayment(scheduledPayment); + Long id = scheduledPayment.getId(); + + // Act + ScheduledPayment result = scheduledPaymentRepository.getById(id); + + // Assert + assertEquals(scheduledPayment, result); + } + + @Test + void getById_NonExistingId_ReturnsNull() { + // Arrange + Long nonExistingId = 123L; + + // Act + ScheduledPayment result = scheduledPaymentRepository.getById(nonExistingId); + + // Assert + assertNull(result); + } + + @Test + void getAllPayments_ReturnsAllPayments() { + // Arrange + ScheduledPayment scheduledPayment1 = new ScheduledPayment(); + ScheduledPayment scheduledPayment2 = new ScheduledPayment(); + scheduledPaymentRepository.addScheduledPayment(scheduledPayment1); + scheduledPaymentRepository.addScheduledPayment(scheduledPayment2); + + // Act + Map<Long, ScheduledPayment> result = scheduledPaymentRepository.getAllPayments(); + + // Assert + assertEquals(2, result.size()); + assertEquals(scheduledPayment1, result.get(scheduledPayment1.getId())); + assertEquals(scheduledPayment2, result.get(scheduledPayment2.getId())); + } +} diff --git a/account-management/src/test/java/cz/muni/pa165/banking/application/repository/UserRepositoryImplTest.java b/account-management/src/test/java/cz/muni/pa165/banking/application/repository/UserRepositoryImplTest.java new file mode 100644 index 0000000..b7a96c4 --- /dev/null +++ b/account-management/src/test/java/cz/muni/pa165/banking/application/repository/UserRepositoryImplTest.java @@ -0,0 +1,57 @@ +package cz.muni.pa165.banking.application.repository; + +import cz.muni.pa165.banking.domain.user.User; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +@SpringBootTest +class UserRepositoryImplTest { + + private UserRepositoryImpl userRepository; + + @BeforeEach + void setUp() { + userRepository = new UserRepositoryImpl(); + } + + @Test + void addUser_ValidUser_ReturnsUser() { + // Arrange + User user = new User(); + + // Act + User result = userRepository.addUser(user); + + // Assert + assertEquals(user, result); + } + + @Test + void getById_ExistingId_ReturnsUser() { + // Arrange + User user = new User(); + userRepository.addUser(user); + Long id = user.getId(); + + // Act + User result = userRepository.getById(id); + + // Assert + assertEquals(user, result); + } + + @Test + void getById_NonExistingId_ReturnsNull() { + // Arrange + Long nonExistingId = 123L; + + // Act + User result = userRepository.getById(nonExistingId); + + // Assert + assertNull(result); + } +} diff --git a/account-management/src/test/java/cz/muni/pa165/banking/application/service/AccountServiceTest.java b/account-management/src/test/java/cz/muni/pa165/banking/application/service/AccountServiceTest.java new file mode 100644 index 0000000..fcff202 --- /dev/null +++ b/account-management/src/test/java/cz/muni/pa165/banking/application/service/AccountServiceTest.java @@ -0,0 +1,135 @@ +package cz.muni.pa165.banking.application.service; + +import cz.muni.pa165.banking.domain.account.Account; +import cz.muni.pa165.banking.domain.account.repository.AccountRepository; +import cz.muni.pa165.banking.domain.scheduled.ScheduledPayment; +import cz.muni.pa165.banking.domain.scheduled.repository.ScheduledPaymentRepository; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.boot.test.context.SpringBootTest; +import java.util.ArrayList; +import java.util.List; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@SpringBootTest +class AccountServiceTest { + + @Mock + private AccountRepository accountRepository; + + @Mock + private ScheduledPaymentRepository scheduledPaymentRepository; + + @InjectMocks + private AccountService accountService; + + @Test + void createAccount_ValidAccount_ReturnsAccount() { + // Arrange + Account account = new Account(); + when(accountRepository.addAccount(account)).thenReturn(account); + + // Act + Account result = accountService.createAccount(account); + + // Assert + assertEquals(account, result); + verify(accountRepository).addAccount(account); + } + + @Test + void getAccount_ValidAccountId_ReturnsAccount() { + // Arrange + Long accountId = 1L; + Account account = new Account(); + when(accountRepository.getById(accountId)).thenReturn(account); + + // Act + Account result = accountService.getAccount(accountId); + + // Assert + assertEquals(account, result); + verify(accountRepository).getById(accountId); + } + + @Test + void getAccount_InvalidAccountId_ReturnsNull() { + // Arrange + Long accountId = 1L; + when(accountRepository.getById(accountId)).thenReturn(null); + + // Act & Assert + assertNull(accountService.getAccount(accountId)); + verify(accountRepository).getById(accountId); + } + + @Test + void getAccountByNumber_ValidAccountNumber_ReturnsAccount() { + // Arrange + String accountNumber = "123456789"; + Account account = new Account(); + when(accountRepository.getByAccountNumber(accountNumber)).thenReturn(account); + + // Act + Account result = accountService.getAccountByNumber(accountNumber); + + // Assert + assertEquals(account, result); + verify(accountRepository).getByAccountNumber(accountNumber); + } + + @Test + void getAccountByNumber_InvalidAccountNumber_ReturnsNull() { + // Arrange + String accountNumber = "123456789"; + when(accountRepository.getByAccountNumber(accountNumber)).thenReturn(null); + + // Act & Assert + assertNull(accountService.getAccountByNumber(accountNumber)); + verify(accountRepository).getByAccountNumber(accountNumber); + } + + @Test + void schedulePayment_ValidScheduledPayment_ReturnsScheduledPayment() { + // Arrange + ScheduledPayment scheduledPayment = new ScheduledPayment(); + when(scheduledPaymentRepository.addScheduledPayment(scheduledPayment)).thenReturn(scheduledPayment); + + // Act + ScheduledPayment result = accountService.schedulePayment(scheduledPayment); + + // Assert + assertEquals(scheduledPayment, result); + verify(scheduledPaymentRepository).addScheduledPayment(scheduledPayment); + } + + @Test + void schedulePayment_InvalidScheduledPayment_ReturnsNull() { + // Arrange + ScheduledPayment scheduledPayment = new ScheduledPayment(); + when(scheduledPaymentRepository.addScheduledPayment(scheduledPayment)).thenReturn(null); + + // Act & Assert + assertNull(accountService.schedulePayment(scheduledPayment)); + verify(scheduledPaymentRepository).addScheduledPayment(scheduledPayment); + } + + @Test + void getScheduledPaymentsOfAccount_ValidAccountId_ReturnsScheduledPayments() { + // Arrange + Long accountId = 1L; + Account account = new Account(); + List<ScheduledPayment> scheduledPayments = new ArrayList<>(); + account.setScheduledPayments(scheduledPayments); + when(accountRepository.getById(accountId)).thenReturn(account); + + // Act + List<ScheduledPayment> result = accountService.getScheduledPaymentsOfAccount(accountId); + + // Assert + assertEquals(scheduledPayments, result); + } +} diff --git a/account-management/src/test/java/cz/muni/pa165/banking/application/service/UserServiceTest.java b/account-management/src/test/java/cz/muni/pa165/banking/application/service/UserServiceTest.java new file mode 100644 index 0000000..9116ffa --- /dev/null +++ b/account-management/src/test/java/cz/muni/pa165/banking/application/service/UserServiceTest.java @@ -0,0 +1,64 @@ +package cz.muni.pa165.banking.application.service; + +import cz.muni.pa165.banking.domain.user.User; +import cz.muni.pa165.banking.domain.user.repository.UserRepository; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@SpringBootTest +class UserServiceTest { + + @Mock + private UserRepository userRepository; + + @InjectMocks + private UserService userService; + + @Test + void createUser_ValidUser_ReturnsUser() { + // Arrange + User user = new User(); + when(userRepository.addUser(user)).thenReturn(user); + + // Act + User result = userService.createUser(user); + + // Assert + assertEquals(user, result); + verify(userRepository).addUser(user); + } + + @Test + void getUser_ValidUserId_ReturnsUser() { + // Arrange + Long userId = 1L; + User user = new User(); + when(userRepository.getById(userId)).thenReturn(user); + + // Act + User result = userService.getUser(userId); + + // Assert + assertEquals(user, result); + verify(userRepository).getById(userId); + } + + @Test + void getUser_InvalidUserId_ReturnsNull() { + // Arrange + Long userId = 1L; + when(userRepository.getById(userId)).thenReturn(null); + + // Act & Assert + assertNull(userService.getUser(userId)); + verify(userRepository).getById(userId); + } +} + diff --git a/account-management/src/test/java/cz/muni/pa165/banking/domain/account/AccountTest.java b/account-management/src/test/java/cz/muni/pa165/banking/domain/account/AccountTest.java new file mode 100644 index 0000000..4c4956e --- /dev/null +++ b/account-management/src/test/java/cz/muni/pa165/banking/domain/account/AccountTest.java @@ -0,0 +1,54 @@ +package cz.muni.pa165.banking.domain.account; + +import cz.muni.pa165.banking.domain.scheduled.ScheduledPayment; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class AccountTest { + @Test + public void testGettersAndSetters() { + // Arrange + Account account = new Account(); + Long id = 1L; + String accountNumber = "123456789"; + Long userId = 2L; + Integer maxSpendingLimit = 1000; + AccountType type = AccountType.CREDIT; + List<ScheduledPayment> scheduledPayments = new ArrayList<>(); + + // Act + account.setId(id); + account.setAccountNumber(accountNumber); + account.setUserId(userId); + account.setMaxSpendingLimit(maxSpendingLimit); + account.setType(type); + account.setScheduledPayments(scheduledPayments); + + // Assert + assertEquals(id, account.getId()); + assertEquals(accountNumber, account.getAccountNumber()); + assertEquals(userId, account.getUserId()); + assertEquals(maxSpendingLimit, account.getMaxSpendingLimit()); + assertEquals(type, account.getType()); + assertEquals(scheduledPayments, account.getScheduledPayments()); + } + + @Test + public void testDefaultConstructor() { + // Act + Account account = new Account(); + + // Assert + assertNull(account.getId()); + assertNull(account.getAccountNumber()); + assertNull(account.getUserId()); + assertNull(account.getMaxSpendingLimit()); + assertNull(account.getType()); + assertNull(account.getScheduledPayments()); + } + +} \ No newline at end of file diff --git a/account-management/src/test/java/cz/muni/pa165/banking/domain/scheduled/ScheduledPaymentProcessorTest.java b/account-management/src/test/java/cz/muni/pa165/banking/domain/scheduled/ScheduledPaymentProcessorTest.java new file mode 100644 index 0000000..477b4b7 --- /dev/null +++ b/account-management/src/test/java/cz/muni/pa165/banking/domain/scheduled/ScheduledPaymentProcessorTest.java @@ -0,0 +1,47 @@ +package cz.muni.pa165.banking.domain.scheduled; + +import cz.muni.pa165.banking.application.repository.ScheduledPaymentRepositoryImpl; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.util.HashMap; +import java.util.Map; + +import static org.mockito.Mockito.*; + +public class ScheduledPaymentProcessorTest { + + @Mock + private ScheduledPaymentRepositoryImpl scheduledPaymentRepository; + + @InjectMocks + private ScheduledPaymentProcessor scheduledPaymentProcessor; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + public void testExecuteScheduledPayments() { + // Arrange + Map<Long, ScheduledPayment> scheduledPayments = new HashMap<>(); + ScheduledPayment scheduledPayment = new ScheduledPayment(); + scheduledPayment.setSenderAccountId(1L); + scheduledPayment.setReceiverAccountId(2L); + scheduledPayment.setAmount(100); + scheduledPayments.put(1L, scheduledPayment); + + when(scheduledPaymentRepository.getAllPayments()).thenReturn(scheduledPayments); + + // Act + scheduledPaymentProcessor.executeScheduledPayments(); + + // Assert + verify(scheduledPaymentRepository, times(1)).getAllPayments(); + } +} + diff --git a/account-management/src/test/java/cz/muni/pa165/banking/domain/scheduled/ScheduledPaymentTest.java b/account-management/src/test/java/cz/muni/pa165/banking/domain/scheduled/ScheduledPaymentTest.java new file mode 100644 index 0000000..6cc62b1 --- /dev/null +++ b/account-management/src/test/java/cz/muni/pa165/banking/domain/scheduled/ScheduledPaymentTest.java @@ -0,0 +1,42 @@ +package cz.muni.pa165.banking.domain.scheduled; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class ScheduledPaymentTest { + @Test + public void testGettersAndSetters() { + // Arrange + ScheduledPayment scheduledPayment = new ScheduledPayment(); + Long id = 1L; + Long senderAccountId = 2L; + Long receiverAccountId = 3L; + Integer amount = 1000; + + // Act + scheduledPayment.setId(id); + scheduledPayment.setSenderAccountId(senderAccountId); + scheduledPayment.setReceiverAccountId(receiverAccountId); + scheduledPayment.setAmount(amount); + + // Assert + assertEquals(id, scheduledPayment.getId()); + assertEquals(senderAccountId, scheduledPayment.getSenderAccountId()); + assertEquals(receiverAccountId, scheduledPayment.getReceiverAccountId()); + assertEquals(amount, scheduledPayment.getAmount()); + } + + @Test + public void testDefaultConstructor() { + // Act + ScheduledPayment scheduledPayment = new ScheduledPayment(); + + // Assert + assertNull(scheduledPayment.getId()); + assertNull(scheduledPayment.getSenderAccountId()); + assertNull(scheduledPayment.getReceiverAccountId()); + assertNull(scheduledPayment.getAmount()); + } + +} \ No newline at end of file diff --git a/account-management/src/test/java/cz/muni/pa165/banking/domain/user/UserTest.java b/account-management/src/test/java/cz/muni/pa165/banking/domain/user/UserTest.java new file mode 100644 index 0000000..f80b904 --- /dev/null +++ b/account-management/src/test/java/cz/muni/pa165/banking/domain/user/UserTest.java @@ -0,0 +1,57 @@ +package cz.muni.pa165.banking.domain.user; + +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class UserTest { + + @Test + public void testGettersAndSetters() { + // Arrange + User user = new User(); + Long id = 1L; + String email = "john.doe@example.com"; + String password = "password"; + String firstName = "John"; + String lastName = "Doe"; + UserType userType = UserType.EMPLOYEE; + List<String> accounts = new ArrayList<>(); + + // Act + user.setId(id); + user.setEmail(email); + user.setPassword(password); + user.setFirstName(firstName); + user.setLastName(lastName); + user.setUserType(userType); + user.setAccounts(accounts); + + // Assert + assertEquals(id, user.getId()); + assertEquals(email, user.getEmail()); + assertEquals(password, user.getPassword()); + assertEquals(firstName, user.getFirstName()); + assertEquals(lastName, user.getLastName()); + assertEquals(userType, user.getUserType()); + assertEquals(accounts, user.getAccounts()); + } + + @Test + public void testDefaultConstructor() { + // Act + User user = new User(); + + // Assert + assertNull(user.getId()); + assertNull(user.getEmail()); + assertNull(user.getPassword()); + assertNull(user.getFirstName()); + assertNull(user.getLastName()); + assertNull(user.getUserType()); + assertNull(user.getAccounts()); + } +} \ No newline at end of file -- GitLab