Skip to content

Commit

Permalink
Merge pull request #34 from DONGA-ST-A/test/33-auth-test
Browse files Browse the repository at this point in the history
[Test] AuthController 테스트 코드 추가 및 스웨거 명세 작성
  • Loading branch information
kyeong-hyeok authored Sep 8, 2023
2 parents 940fee2 + 56e8862 commit 6a8a31b
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<Void> 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<Void> logout(HttpServletRequest request) {
authService.logout(request);
Expand Down
Original file line number Diff line number Diff line change
@@ -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", "[email protected]", "테스트");

//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());
}
}

0 comments on commit 6a8a31b

Please sign in to comment.