/
ilyaBu
/
WebSpringJava
Обзор
Документация
Войти
/
ilyaBu
/
WebSpringJava
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/test/java/ru/gb/spring/diplomawebjavaspringgb/controller/MyUserControllerTest.java
226 строк
12 KB
IliaBu
Update code
13 июл 2024, 17:50
13 июл 2024, 17:50
beaa8ef
Код
Авторство
О чём код?
package ru.gb.spring.diplomawebjavaspringgb.controller; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import ru.gb.spring.diplomawebjavaspringgb.model.Role; import ru.gb.spring.diplomawebjavaspringgb.model.User; import ru.gb.spring.diplomawebjavaspringgb.service.UserService; import java.util.ArrayList; import java.util.List; import java.util.Optional; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) class MyUserControllerTest { @Mock private UserService userService; @Mock private Model model; @Mock private BindingResult bindingResult; @InjectMocks private MyUserController controller; /** * Инициализирует макеты объектов, используемые в тестах. */ @BeforeEach void setUp() { MockitoAnnotations.openMocks(this); } /** * Тестовый метод проверяет функцию перехода на страницу home.html контроллера. * Он проверяет, возвращается ли правильный адрес home.html и добавляются атрибуты модели «заголовок» и «фоновое изображение». */ @Test void testHome() { String result = controller.home(model); assertEquals("home", result); verify(model).addAttribute(eq("title"), eq("Главная")); verify(model).addAttribute(eq("images"), any()); } /** * Тестовый метод используется для обработки запроса на вход пользователя. * Он устанавливает соответствующие атрибуты заголовка и фонового изображения в модели и возвращает адрес login.html. */ @Test void testLogin() { String result = controller.login(model); assertEquals("login", result); verify(model).addAttribute(eq("title"), eq("Вход")); verify(model).addAttribute(eq("images"), any()); } /** * Тестовый метод используется для отображения списка всех пользователей. * Получает список пользователей из UserService и добавляет его в модель. * Он также добавляет к модели заголовок «Список пользователей», фоновое изображение и имя пользователя. * Возвращает адрес home-admin.html. */ @Test void testShowUserList() { List<User> users = new ArrayList<>(); when(userService.findAllUsers()).thenReturn(users); String result = controller.showUserList(model); assertEquals("home-admin", result); verify(model).addAttribute("title", "Список пользователей"); verify(model).addAttribute(eq("userfirstname"), any()); verify(model).addAttribute(eq("images"), any()); verify(model).addAttribute("users", users); } /** * Тестовый метод используется для отображения формы регистрации нового пользователя. * Устанавливает необходимые атрибуты в модели, такие как заголовок, имя пользователя, фоновое изображение и пустой объект «Пользователь». * Возвращает адрес register.html. */ @Test void testShowRegistrationForm() { String result = controller.showRegistrationForm(model); assertEquals("register", result); verify(model).addAttribute(eq("title"), eq("Регистрация пользователя")); verify(model).addAttribute(eq("userfirstname"), any()); verify(model).addAttribute(eq("images"), any()); verify(model).addAttribute(eq("user"), any(User.class)); } /** * Тестовый метод используется для обработки успешной регистрации нового пользователя. * Проверяет, существует ли указанный адрес электронной почты в системе. Если нет, он сохраняет нового пользователя в базе данных и перенаправляет на страницу login.html с сообщением об успехе. * Если адрес электронной почты уже существует, он отклоняет отправку формы с сообщением об ошибке. */ @Test void testRegistrationSave_Success() { User user = new User(); when(userService.findByEmail(any())).thenReturn(null); when(bindingResult.hasErrors()).thenReturn(false); String result = controller.registrationSave(user, bindingResult); assertEquals("redirect:/login?success", result); verify(userService).saveUser(user); } /** * Тестовый метод проверяет поведение метода RegistrationSave, когда указанный адрес электронной почты уже существует в системе. * Проверяется, что метод правильно отклоняет отправку формы с сообщением об ошибке и не сохраняет нового пользователя в базе данных. */ @Test void testRegistrationSave_EmailExists() { User user = new User(); when(userService.findByEmail(any())).thenReturn(new User()); String result = controller.registrationSave(user, bindingResult); assertEquals("redirect:/login?success", result); verify(bindingResult).rejectValue(eq("email"), isNull(), anyString()); } /** * Тестовый метод используется для отображения формы регистрации нового пользователя под администратором. * Он устанавливает необходимые атрибуты в модели, такие как заголовок, имя пользователя, атрибут фонового изображения и пустой объект «Пользователь». * Возвращает адрес register-admin.html. */ @Test void testShowRegistrationAdminForm() { List<Role> roles = new ArrayList<>(); when(userService.findAllRoles()).thenReturn(roles); String result = controller.showRegistrationAdminForm(model); assertEquals("register-admin", result); verify(model).addAttribute("title", "Регистрация пользователя"); verify(model).addAttribute(eq("userfirstname"), any()); verify(model).addAttribute(eq("images"), any()); verify(model).addAttribute("listRoles", roles); verify(model).addAttribute(eq("user"), any(User.class)); } /** * Тестовый метод используется для обработки успешной регистрации нового пользователя под администратором. * Он проверяет, существует ли указанный адрес электронной почты в системе. Если нет, он сохраняет нового пользователя в базе данных и перенаправляет на страницу home-admin.html с сообщением об успехе. * Если адрес электронной почты уже существует, он отклоняет отправку формы с сообщением об ошибке и не сохраняет нового пользователя. */ @Test void testRegistrationAdminSave_Success() { User user = new User(); when(userService.findByEmail(any())).thenReturn(null); when(bindingResult.hasErrors()).thenReturn(false); String result = controller.registrationAdminSave(user, bindingResult); assertEquals("redirect:/home-admin?success", result); verify(userService).saveAdminUser(user); } /** * Тестовый метод используется для отображения формы обновления пользователя. * Он извлекает пользователя с заданным идентификатором из UserService вместе со всеми доступными ролями. * Затем метод заполняет модель необходимыми атрибутами, включая заголовок, список ролей и объект пользователя. * Возвращает адрес user-update.html. */ @Test void testShowUserUpdateForm() { Integer userId = 1; Optional<User> user = Optional.of(new User()); List<Role> roles = new ArrayList<>(); when(userService.findByIdUser(userId)).thenReturn(user); when(userService.findAllRoles()).thenReturn(roles); String result = controller.showUserUpdateForm(userId, model); assertEquals("user-update", result); verify(model).addAttribute("title", "Изменение пользователя"); verify(model).addAttribute(eq("userfirstname"), any()); verify(model).addAttribute("listRoles", roles); verify(model).addAttribute("user", user); } /** * Тестовый метод используется для обработки сохранения пользователя после обновлений. * Он принимает объект User в качестве параметра и возвращает перенаправление на домашнюю страницу администратора home-admin.html с сообщением об успехе. * Метод также проверяет, что пользователь успешно сохранен в UserService. */ @Test void testUserSave() { User user = new User(); String result = controller.user_save(user); assertEquals("redirect:/home-admin?success", result); verify(userService).saveAdminUser(user); } /** * Тестовый метод используется для удаления пользователя из системы. * Он принимает идентификатор пользователя в качестве параметра и возвращает перенаправление на домашнюю страницу администратора home-admin.html. * Метод также проверяет, что пользователь успешно удален из UserService. */ @Test void testDeleteUser() { Integer userId = 1; String result = controller.deleteUser(userId); assertEquals("redirect:/home-admin", result); verify(userService).deleteUser(userId); } }