From 559e2d7cae826f4e9973764c5500462bb0f9ae84 Mon Sep 17 00:00:00 2001 From: kyeong-hyeok Date: Fri, 8 Sep 2023 21:23:59 +0900 Subject: [PATCH 1/2] =?UTF-8?q?docs:=20AuthController=20=EC=8A=A4=EC=9B=A8?= =?UTF-8?q?=EA=B1=B0=20=EB=AA=85=EC=84=B8=20=EC=9E=91=EC=84=B1=20(#33)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/auth/controller/AuthController.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/java/com/teamA/hicardi/domain/auth/controller/AuthController.java b/src/main/java/com/teamA/hicardi/domain/auth/controller/AuthController.java index 97d5e9b..474b31d 100644 --- a/src/main/java/com/teamA/hicardi/domain/auth/controller/AuthController.java +++ b/src/main/java/com/teamA/hicardi/domain/auth/controller/AuthController.java @@ -3,6 +3,12 @@ import com.teamA.hicardi.common.dto.ResponseDto; import com.teamA.hicardi.domain.auth.dto.request.SignUpRequestDto; import com.teamA.hicardi.domain.auth.service.AuthService; +import com.teamA.hicardi.error.dto.ErrorResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; @@ -18,12 +24,22 @@ public class AuthController { private final AuthService authService; + @Operation(summary = "회원가입", description = "회원가입을 합니다.", + responses = {@ApiResponse(responseCode = "204", description = "회원가입 성공") + , @ApiResponse(responseCode = "400", description = "1. 이미 존재하는 아이디입니다. \t\n 2. 이미 존재하는 이메일입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) + }) @PostMapping("/sign-up") public ResponseEntity signUp(@RequestBody SignUpRequestDto signUpRequestDto) { authService.signUp(signUpRequestDto); return ResponseDto.noContent(); } + @Operation(summary = "로그아웃", description = "로그아웃 후 사용자의 토큰을 블랙리스트에 등록합니다.", security = { @SecurityRequirement(name = "bearer-key") }, + responses = { + @ApiResponse(responseCode = "204", description = "로그아웃 성공") + , @ApiResponse(responseCode = "401", description = "잘못된 토큰입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) + , @ApiResponse(responseCode = "404", description = "해당 회원을 찾을 수 없습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) + }) @PostMapping("/logout") public ResponseEntity logout(HttpServletRequest request) { authService.logout(request); From 56e8862ba114c1c6059d22e688ceb897400c6cd8 Mon Sep 17 00:00:00 2001 From: kyeong-hyeok Date: Fri, 8 Sep 2023 21:24:15 +0900 Subject: [PATCH 2/2] =?UTF-8?q?test:=20AuthController=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80=20(#33)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/controller/AuthControllerTest.java | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/test/java/com/teamA/hicardi/domain/auth/controller/AuthControllerTest.java diff --git a/src/test/java/com/teamA/hicardi/domain/auth/controller/AuthControllerTest.java b/src/test/java/com/teamA/hicardi/domain/auth/controller/AuthControllerTest.java new file mode 100644 index 0000000..9d75772 --- /dev/null +++ b/src/test/java/com/teamA/hicardi/domain/auth/controller/AuthControllerTest.java @@ -0,0 +1,74 @@ +package com.teamA.hicardi.domain.auth.controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.teamA.hicardi.domain.auth.dto.request.SignUpRequestDto; +import com.teamA.hicardi.domain.auth.service.AuthService; +import com.teamA.hicardi.utils.TestUserArgumentResolver; +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.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.filter.CharacterEncodingFilter; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@ExtendWith(MockitoExtension.class) +class AuthControllerTest { + + @InjectMocks + private AuthController authController; + @Mock + private AuthService authService; + private ObjectMapper objectMapper = new ObjectMapper(); + private MockMvc mockMvc; + + @BeforeEach + void setUp() { + mockMvc = MockMvcBuilders.standaloneSetup(authController) + .setCustomArgumentResolvers(new TestUserArgumentResolver()) + .addFilter(new CharacterEncodingFilter("UTF-8", true)) + .build(); + } + + + @Test + void 회원가입() throws Exception{ + //given + SignUpRequestDto requestDto = new SignUpRequestDto("test", "password", "test@naver.com", "테스트"); + + //when + ResultActions result = mockMvc.perform( + post("/auth/sign-up") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(requestDto)) + ); + //then + result.andExpect(status().isNoContent()); + verify(authService, times(1)).signUp(any()); + + } + + @Test + void 로그아웃() throws Exception { + //given, when + ResultActions result = mockMvc.perform( + post("/auth/logout") + ); + //then + result.andExpect(status().isNoContent()); + verify(authService, times(1)).logout(any()); + } +} \ No newline at end of file