/
ilyaBu
/
WebSpringJava
Обзор
Документация
Войти
/
ilyaBu
/
WebSpringJava
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/test/java/ru/gb/spring/diplomawebjavaspringgb/service/impl/UserServiceImplTest.java
210 строк
9 KB
IliaBu
Update code
15 июл 2024, 17:34
15 июл 2024, 17:34
a58ef66
Код
Авторство
О чём код?
package ru.gb.spring.diplomawebjavaspringgb.service.impl; 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.security.core.Authentication; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.crypto.password.PasswordEncoder; import ru.gb.spring.diplomawebjavaspringgb.model.Role; import ru.gb.spring.diplomawebjavaspringgb.model.User; import ru.gb.spring.diplomawebjavaspringgb.repository.RoleRepository; import ru.gb.spring.diplomawebjavaspringgb.repository.UserRepository; import java.util.Collections; import java.util.List; import java.util.Optional; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) class UserServiceImplTest { @Mock private UserRepository userRepository; @Mock private RoleRepository roleRepository; @Mock private PasswordEncoder passwordEncoder; @InjectMocks private UserServiceImpl userService; /** * Тестовый метод проверяет имя пользователя текущего аутентифицированного пользователя. */ @Test void getCurrentUser() { Authentication authentication = mock(Authentication.class); when(authentication.getName()).thenReturn("testUser"); SecurityContext securityContext = mock(SecurityContext.class); when(securityContext.getAuthentication()).thenReturn(authentication); SecurityContextHolder.setContext(securityContext); String currentUser = userService.getCurrentUser(); assertEquals("testUser", currentUser); } /** * Тестовый метод проверяет извлеченную информацию текущего пользователя. * Находит пользователя по адресу электронной почты, используя метод {@link UserRepository#findByEmail(String)}. * Создает имя пользователя, объединяя его имя, фамилию и адрес электронной почты, заменяет все символы кроме "_" и цифры на "_". * Метод возвращает созданное имя пользователя. */ @Test void getCurrentUserNoSymbol() { User user = new User(); user.setEmail("testUser@example.com"); user.setFirstName("Test"); user.setLastName("User"); when(userRepository.findByEmail("testUser@example.com")).thenReturn(user); Authentication authentication = mock(Authentication.class); when(authentication.getName()).thenReturn("testUser@example.com"); SecurityContext securityContext = mock(SecurityContext.class); when(securityContext.getAuthentication()).thenReturn(authentication); SecurityContextHolder.setContext(securityContext); String currentUserNoSymbol = userService.getCurrentUserNoSymbol(); assertEquals("testUser_example_com_Test_User", currentUserNoSymbol); } /** * Тестовый метод проверяет извлечённых пользователей из базы данных. * Используется метод {@link UserRepository#findAll()} для выборки всех пользователей и возвращает их в виде списка. */ @Test void findAllUsers() { List<User> users = Collections.singletonList(new User()); when(userRepository.findAll()).thenReturn(users); List<User> allUsers = userService.findAllUsers(); assertEquals(users, allUsers); } /** * Тестовый метод проверки извлекает все роли из базы данных. * Используется метод {@link RoleRepository#findAll()} для извлечения всех ролей и возврата их в виде списка. */ @Test void findAllRoles() { List<Role> roles = Collections.singletonList(new Role()); when(roleRepository.findAll()).thenReturn(roles); List<Role> allRoles = userService.findAllRoles(); assertEquals(roles, allRoles); } /** * Тестовый метод тестирует сохранение нового пользователя. */ @Test void saveUser() { User user = new User(); user.setPassword("password"); Role role = new Role(); role.setName("ROLE_USER"); when(roleRepository.findByName("ROLE_USER")).thenReturn(role); when(passwordEncoder.encode("password")).thenReturn("encodedPassword"); userService.saveUser(user); verify(userRepository, times(1)).save(user); assertEquals("encodedPassword", user.getPassword()); assertEquals(Collections.singleton(role), user.getRoles()); } /** * Тестовый метод сохраняет нового пользователя под администратором. */ @Test void saveAdminUser() { User user = new User(); user.setPassword("password"); when(passwordEncoder.encode("password")).thenReturn("encodedPassword"); userService.saveAdminUser(user); verify(userRepository, times(1)).save(user); assertEquals("encodedPassword", user.getPassword()); } /** * Тестовый метод проверяет пользователя в базе данных по его электронной почте. */ @Test void findByEmail() { User user = new User(); user.setEmail("testUser@example.com"); when(userRepository.findByEmail("testUser@example.com")).thenReturn(user); User foundUser = userService.findByEmail("testUser@example.com"); assertEquals(user, foundUser); } /** * Тестовый метод проверяет удаление пользователя из базы данных по его ID. */ @Test void deleteUser() { Integer userId = 1; when(userRepository.existsById(userId)).thenReturn(true); userService.deleteUser(userId); verify(userRepository, times(1)).deleteById(userId); } /** * Тестовый метод проверяет удаление пользователя из базы данных, если пользователь не найден. * Он устанавливает репозиторий фиктивного пользователя и службу фиктивного пользователя, а затем вызывает метод deleteUser с идентификатором пользователя, которого нет в базе данных. * Затем он проверяет, что метод deleteById пользовательского репозитория не был вызван. */ @Test void deleteUser_UserNotFound() { Integer userId = 1; when(userRepository.existsById(userId)).thenReturn(false); userService.deleteUser(userId); verify(userRepository, never()).deleteById(userId); } /** * Тестовый метод проверяет поиск пользователя по его идентификатору из базы данных. */ @Test void findByIdUser() { Integer userId = 1; User user = new User(); when(userRepository.findById(userId)).thenReturn(Optional.of(user)); Optional<User> foundUser = userService.findByIdUser(userId); assertEquals(Optional.of(user), foundUser); } /** * Тестовый метод проверяет поведение сервиса при попытке найти пользователя по его идентификатору, пользователь не найден в базе данных. * Он устанавливает фиктивный пользовательский репозиторий со сценарием, когда пользователь не найден, * а затем вызывает метод службы findByIdUser с идентификатором пользователя. * Наконец, он утверждает, что возвращенный необязательный параметр пуст, что указывает на то, что пользователь не найден. */ @Test void findByIdUser_UserNotFound() { Integer userId = 1; when(userRepository.findById(userId)).thenReturn(Optional.empty()); Optional<User> foundUser = userService.findByIdUser(userId); assertTrue(foundUser.isEmpty()); } }