diff --git a/src/test/java/com/safetypin/authentication/service/UserServiceTest.java b/src/test/java/com/safetypin/authentication/service/UserServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..64dd562813fecb7c3eee0d4af5171c065b866798 --- /dev/null +++ b/src/test/java/com/safetypin/authentication/service/UserServiceTest.java @@ -0,0 +1,125 @@ +package com.safetypin.authentication.service; + +import com.safetypin.authentication.model.User; +import com.safetypin.authentication.repository.UserRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.Optional; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class UserServiceTest { + + @Mock + private UserRepository userRepository; + + private UserService userService; + + @BeforeEach + void setUp() { + userService = new UserService(userRepository); + } + + @Test + void testFindById_WhenUserExists_ReturnUser() { + // Arrange + UUID userId = UUID.randomUUID(); + User expectedUser = new User(); + expectedUser.setId(userId); + + when(userRepository.findById(userId)).thenReturn(Optional.of(expectedUser)); + + // Act + Optional<User> result = userService.findById(userId); + + // Assert + assertTrue(result.isPresent()); + assertEquals(expectedUser, result.get()); + verify(userRepository).findById(userId); + } + + @Test + void testFindById_WhenUserDoesNotExist_ReturnEmptyOptional() { + // Arrange + UUID userId = UUID.randomUUID(); + when(userRepository.findById(userId)).thenReturn(Optional.empty()); + + // Act + Optional<User> result = userService.findById(userId); + + // Assert + assertFalse(result.isPresent()); + verify(userRepository).findById(userId); + } + + @Test + void testFindByEmail_WhenUserExists_ReturnUser() { + // Arrange + String email = "test@example.com"; + User expectedUser = new User(); + expectedUser.setEmail(email); + + when(userRepository.findByEmail(email)).thenReturn(expectedUser); + + // Act + Optional<User> result = userService.findByEmail(email); + + // Assert + assertTrue(result.isPresent()); + assertEquals(expectedUser, result.get()); + verify(userRepository).findByEmail(email); + } + + @Test + void testFindByEmail_WhenUserDoesNotExist_ReturnEmptyOptional() { + // Arrange + String email = "nonexistent@example.com"; + when(userRepository.findByEmail(email)).thenReturn(null); + + // Act + Optional<User> result = userService.findByEmail(email); + + // Assert + assertFalse(result.isPresent()); + verify(userRepository).findByEmail(email); + } + + @Test + void testSave_ShouldCallRepositorySaveAndReturnUser() { + // Arrange + User userToSave = new User(); + userToSave.setEmail("test@example.com"); + + when(userRepository.save(any(User.class))).thenReturn(userToSave); + + // Act + User savedUser = userService.save(userToSave); + + // Assert + assertNotNull(savedUser); + assertEquals(userToSave, savedUser); + verify(userRepository).save(userToSave); + } + + @Test + void testConstructor_InitializesRepositoryCorrectly() { + // Arrange & Act + UserService service = new UserService(userRepository); + + // Assert + assertNotNull(service); + + // Verify that the repository is correctly initialized by calling a method + UUID randomId = UUID.randomUUID(); + service.findById(randomId); + verify(userRepository).findById(randomId); + } +} \ No newline at end of file