/
reitz
/
Minecraft-Skin-Editor
Обзор
Документация
Войти
/
reitz
/
Minecraft-Skin-Editor
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/test/java/ru/kipke/auth/AuthControllerTest.java
179 строк
7 KB
reitz
upload files
15 янв 2026, 07:54
15 янв 2026, 07:54
a0879c4
Код
Авторство
О чём код?
package ru.kipke.auth; import java.util.Optional; import org.junit.jupiter.api.Test; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.when; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import ru.kipke.user.User; import ru.kipke.user.UserService; @WebMvcTest(AuthController.class) class AuthControllerTest { @Autowired private MockMvc mockMvc; @MockBean private UserService userService; @Test void testRegister_Success() throws Exception { User newUser = new User("newuser", "hashed"); try { var idField = User.class.getDeclaredField("id"); idField.setAccessible(true); idField.set(newUser, 1L); } catch (Exception ignored) { } when(userService.register(anyString(), anyString())).thenReturn(newUser); mockMvc.perform(post("/api/auth/register") .contentType(MediaType.APPLICATION_JSON) .content("{\"username\":\"newuser\",\"password\":\"password123\"}")) .andExpect(status().isOk()) .andExpect(jsonPath("$.id").value(1L)) .andExpect(jsonPath("$.username").value("newuser")); } @Test void testRegister_UserAlreadyExists() throws Exception { when(userService.register(anyString(), anyString())) .thenThrow(new IllegalArgumentException("Пользователь с таким именем уже существует")); mockMvc.perform(post("/api/auth/register") .contentType(MediaType.APPLICATION_JSON) .content("{\"username\":\"existing\",\"password\":\"pass\"}")) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.error").value("Пользователь с таким именем уже существует")); } @Test void testRegister_EmptyFields() throws Exception { mockMvc.perform(post("/api/auth/register") .contentType(MediaType.APPLICATION_JSON) .content("{\"username\":\"\",\"password\":\"\"}")) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.error").exists()); } @Test void testLogin_Success() throws Exception { User user = new User("testuser", "hashed"); try { var idField = User.class.getDeclaredField("id"); idField.setAccessible(true); idField.set(user, 1L); } catch (Exception ignored) { } when(userService.authenticate("testuser", "password123")).thenReturn(Optional.of(user)); mockMvc.perform(post("/api/auth/login") .contentType(MediaType.APPLICATION_JSON) .content("{\"username\":\"testuser\",\"password\":\"password123\"}")) .andExpect(status().isOk()) .andExpect(jsonPath("$.id").value(1L)) .andExpect(jsonPath("$.username").value("testuser")); } @Test void testLogin_InvalidCredentials() throws Exception { when(userService.authenticate(anyString(), anyString())).thenReturn(Optional.empty()); mockMvc.perform(post("/api/auth/login") .contentType(MediaType.APPLICATION_JSON) .content("{\"username\":\"wrong\",\"password\":\"wrong\"}")) .andExpect(status().isUnauthorized()) .andExpect(jsonPath("$.error").value("Неверное имя или пароль")); } @Test void testLogout() throws Exception { mockMvc.perform(post("/api/auth/logout")) .andExpect(status().isOk()) .andExpect(jsonPath("$.status").value("ok")); } @Test void testMe_Authenticated() throws Exception { User user = new User("testuser", "hashed"); try { var idField = User.class.getDeclaredField("id"); idField.setAccessible(true); idField.set(user, 1L); } catch (Exception ignored) { } when(userService.findById(1L)).thenReturn(Optional.of(user)); mockMvc.perform(get("/api/auth/me") .sessionAttr(AuthController.SESSION_USER_ID, 1L)) .andExpect(status().isOk()) .andExpect(jsonPath("$.id").value(1L)) .andExpect(jsonPath("$.username").value("testuser")); } @Test void testMe_NotAuthenticated() throws Exception { mockMvc.perform(get("/api/auth/me")) .andExpect(status().isUnauthorized()) .andExpect(jsonPath("$.error").value("Не авторизован")); } @Test void testChangePassword_Success() throws Exception { User user = new User("testuser", "oldHash"); try { var idField = User.class.getDeclaredField("id"); idField.setAccessible(true); idField.set(user, 1L); } catch (Exception ignored) { } when(userService.findById(1L)).thenReturn(Optional.of(user)); when(userService.authenticate("testuser", "oldpass")).thenReturn(Optional.of(user)); doNothing().when(userService).changePassword(any(User.class), anyString()); mockMvc.perform(post("/api/auth/change-password") .sessionAttr(AuthController.SESSION_USER_ID, 1L) .contentType(MediaType.APPLICATION_JSON) .content("{\"oldPassword\":\"oldpass\",\"newPassword\":\"newpass123\"}")) .andExpect(status().isOk()) .andExpect(jsonPath("$.status").exists()); } @Test void testChangePassword_WrongOldPassword() throws Exception { User user = new User("testuser", "hash"); try { var idField = User.class.getDeclaredField("id"); idField.setAccessible(true); idField.set(user, 1L); } catch (Exception ignored) { } when(userService.findById(1L)).thenReturn(Optional.of(user)); when(userService.authenticate("testuser", "wrongpass")).thenReturn(Optional.empty()); mockMvc.perform(post("/api/auth/change-password") .sessionAttr(AuthController.SESSION_USER_ID, 1L) .contentType(MediaType.APPLICATION_JSON) .content("{\"oldPassword\":\"wrongpass\",\"newPassword\":\"newpass123\"}")) .andExpect(status().isUnauthorized()) .andExpect(jsonPath("$.error").value("Неверный текущий пароль")); } }