From 63c3512f74de295878a96541a7c2d1a49b62706a Mon Sep 17 00:00:00 2001 From: hyeseong Date: Wed, 23 Oct 2024 10:33:54 +0900 Subject: [PATCH] =?UTF-8?q?[Feat]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=8B=A4=ED=8C=A8=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MemberController.java | 1 - .../controller/MemberControllerTest.java | 59 +++++++++++++++---- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/src/main/java/kr/inuappcenterportal/inuportal/controller/MemberController.java b/src/main/java/kr/inuappcenterportal/inuportal/controller/MemberController.java index 62cd6df..c8f4376 100644 --- a/src/main/java/kr/inuappcenterportal/inuportal/controller/MemberController.java +++ b/src/main/java/kr/inuappcenterportal/inuportal/controller/MemberController.java @@ -66,7 +66,6 @@ public ResponseEntity> delete(@AuthenticationPrincipal Member @ApiResponses({ @ApiResponse(responseCode = "200",description = "로그인 성공, 토근이 발급되었습니다.",content = @Content(schema = @Schema(implementation = TokenDto.class))), @ApiResponse(responseCode = "401",description = "학번 또는 비밀번호가 틀립니다.",content = @Content(schema = @Schema(implementation = ResponseDto.class))), - @ApiResponse(responseCode = "404",description = "존재하지 않는 회원입니다.",content = @Content(schema = @Schema(implementation = ResponseDto.class))) }) @PostMapping("/login") public ResponseEntity> login(@Valid @RequestBody LoginDto loginDto){ diff --git a/src/test/java/kr/inuappcenterportal/inuportal/controller/MemberControllerTest.java b/src/test/java/kr/inuappcenterportal/inuportal/controller/MemberControllerTest.java index 3c25b6f..d2cefbd 100644 --- a/src/test/java/kr/inuappcenterportal/inuportal/controller/MemberControllerTest.java +++ b/src/test/java/kr/inuappcenterportal/inuportal/controller/MemberControllerTest.java @@ -1,26 +1,41 @@ package kr.inuappcenterportal.inuportal.controller; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import kr.inuappcenterportal.inuportal.dto.LoginDto; import kr.inuappcenterportal.inuportal.dto.TokenDto; +import kr.inuappcenterportal.inuportal.exception.MyExceptionHandler; +import kr.inuappcenterportal.inuportal.exception.ex.MyErrorCode; +import kr.inuappcenterportal.inuportal.exception.ex.MyException; import kr.inuappcenterportal.inuportal.service.MemberService; import kr.inuappcenterportal.inuportal.service.PostService; import kr.inuappcenterportal.inuportal.service.ReplyService; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; 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.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Import; import org.springframework.data.jpa.mapping.JpaMetamodelMappingContext; import org.springframework.http.MediaType; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MockMvcBuilder; +import org.springframework.test.web.servlet.htmlunit.MockMvcWebClientBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.when; import static org.mockito.Mockito.verify; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; @@ -28,29 +43,32 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; -@WebMvcTest(MemberController.class) -@WithMockUser +@ExtendWith(MockitoExtension.class) @MockBean(JpaMetamodelMappingContext.class) public class MemberControllerTest { - @Autowired - private MockMvc mockMvc; - @MockBean + MockMvc mockMvc; + ObjectMapper objectMapper = new ObjectMapper(); + @InjectMocks + private MemberController memberController; + @Mock MemberService memberService; @MockBean - PostService postService; - @MockBean ReplyService replyService; + @MockBean + PostService postService; - + @BeforeEach + void setUp() { + mockMvc = MockMvcBuilders.standaloneSetup(memberController).setControllerAdvice(new MyExceptionHandler()).build(); + } @Test - @DisplayName("로그인 테스트") - void loginTest() throws Exception{ + @DisplayName("로그인 성공 테스트") + void loginSuccessTest() throws Exception{ TokenDto tokenDto = TokenDto.of("123","456","15","18"); LoginDto loginDto = LoginDto.builder().studentId("201901591").password("12345").build(); - given(memberService.schoolLogin(loginDto)).willReturn(tokenDto); - Gson gson = new Gson(); - String body = gson.toJson(loginDto); + given(memberService.schoolLogin(any(LoginDto.class))).willReturn(tokenDto); + String body = objectMapper.writeValueAsString(loginDto); mockMvc.perform(post("/api/members/login").content(body).with(csrf()).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("$.msg").value("로그인 성공, 토근이 발급되었습니다.")) @@ -60,4 +78,19 @@ void loginTest() throws Exception{ + @Test + @DisplayName("로그인 실패 테스트") + void loginFailTest() throws Exception{ + LoginDto loginDto = LoginDto.builder().studentId("201901591").password("12345").build(); + when(memberService.schoolLogin(any(LoginDto.class))).thenThrow(new MyException(MyErrorCode.STUDENT_LOGIN_ERROR)); + String body = objectMapper.writeValueAsString(loginDto); + mockMvc.perform(post("/api/members/login").content(body).with(csrf()).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isUnauthorized()) + .andExpect(jsonPath("$.msg").value("학번 또는 비밀번호가 틀립니다.")) + .andDo(print()); + + } + + + }