diff --git a/src/test/java/com/podzilla/auth/service/AdminServiceTest.java b/src/test/java/com/podzilla/auth/service/AdminServiceTest.java index 3d8497d..b7f85bc 100644 --- a/src/test/java/com/podzilla/auth/service/AdminServiceTest.java +++ b/src/test/java/com/podzilla/auth/service/AdminServiceTest.java @@ -10,6 +10,7 @@ import java.util.Arrays; import java.util.List; +import java.util.Optional; import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -22,6 +23,12 @@ class AdminServiceTest { @Mock private UserRepository userRepository; + @Mock + private UserService userService; + + @Mock + private CacheService cacheService; + @InjectMocks private AdminService adminService; @@ -40,4 +47,66 @@ void getUsers_shouldReturnListOfUsers() { verify(userRepository).findAll(); } + + @Test + void updateUserActivation_shouldActivateUserSuccessfully() { + UUID userId = UUID.randomUUID(); + User user = User.builder() + .id(userId) + .email("user@example.com") + .name("Test User") + .enabled(false) + .build(); + + when(userService.getUserOrThrow(userId)).thenReturn(user); + + adminService.updateUserActivation(userId, true); + + verify(userService).getUserOrThrow(userId); + verify(userRepository).save(user); + verify(cacheService).updateUserDetailsCache(user); + } + + + @Test + void updateUserActivation_shouldDeactivateUserSuccessfully() { + UUID userId = UUID.randomUUID(); + User user = User.builder() + .id(userId) + .email("user@example.com") + .name("Test User") + .enabled(true) + .build(); + + when(userService.getUserOrThrow(userId)).thenReturn(user); + + adminService.updateUserActivation(userId, false); + + verify(userService).getUserOrThrow(userId); + verify(userRepository).save(user); + verify(cacheService).updateUserDetailsCache(user); + } + + + + @Test + void deleteUser_shouldDeleteUserSuccessfully() { + UUID userId = UUID.randomUUID(); + User user = User.builder() + .id(userId) + .email("user@example.com") + .name("Test User") + .enabled(true) + .build(); + + when(userService.getUserOrThrow(userId)).thenReturn(user); + + adminService.deleteUser(userId); + + verify(userService).getUserOrThrow(userId); + verify(cacheService).evictUserDetailsCache(user); + verify(userRepository).delete(user); + } + + } \ No newline at end of file diff --git a/src/test/java/com/podzilla/auth/service/UserServiceTest.java b/src/test/java/com/podzilla/auth/service/UserServiceTest.java new file mode 100644 index 0000000..e6e5ba2 --- /dev/null +++ b/src/test/java/com/podzilla/auth/service/UserServiceTest.java @@ -0,0 +1,81 @@ +package com.podzilla.auth.service; + +import com.podzilla.auth.exception.NotFoundException; +import com.podzilla.auth.model.User; +import com.podzilla.auth.repository.UserRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +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; + + @InjectMocks + private UserService userService; + + private UUID userId; + private User existingUser; + + @BeforeEach + void setUp() { + userId = UUID.randomUUID(); + existingUser = User.builder() + .id(userId) + .name("Old Name") + .email("old@example.com") + .build(); + } + + @Test + void updateUserProfile_shouldUpdateName_whenUserExists() { + // Arrange + String newName = "New Name"; + when(userRepository.findById(userId)).thenReturn(Optional.of(existingUser)); + + // Act + userService.updateUserProfile(userId, newName); + + // Assert + verify(userRepository).findById(userId); + + + ArgumentCaptor userCaptor = ArgumentCaptor.forClass(User.class); + verify(userRepository).save(userCaptor.capture()); + User savedUser = userCaptor.getValue(); + + assertEquals(newName, savedUser.getName()); + assertEquals(userId, savedUser.getId()); + } + + @Test + void updateUserProfile_shouldThrowNotFoundException_whenUserDoesNotExist() { + // Arrange + when(userRepository.findById(userId)).thenReturn(Optional.empty()); + + // Act & Assert + NotFoundException exception = assertThrows(NotFoundException.class, () -> { + userService.updateUserProfile(userId, "New Name"); + }); + + assertEquals("Not Found: User with id " + userId + " does not exist.", exception.getMessage()); + verify(userRepository).findById(userId); + verify(userRepository, never()).save(any(User.class)); + } + + +} \ No newline at end of file