diff --git a/src/main/java/com/und/server/member/controller/MemberController.java b/src/main/java/com/und/server/member/controller/MemberController.java index 6f83cc81..5755da30 100644 --- a/src/main/java/com/und/server/member/controller/MemberController.java +++ b/src/main/java/com/und/server/member/controller/MemberController.java @@ -3,6 +3,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -11,6 +12,7 @@ import com.und.server.auth.filter.AuthMember; import com.und.server.member.dto.request.NicknameRequest; import com.und.server.member.dto.response.MemberResponse; +import com.und.server.member.entity.Member; import com.und.server.member.service.MemberService; import io.swagger.v3.oas.annotations.Parameter; @@ -25,6 +27,15 @@ public class MemberController { private final MemberService memberService; + @GetMapping("/member/nickname") + public ResponseEntity getNickname( + @Parameter(hidden = true) @AuthMember final Long memberId + ) { + final Member member = memberService.findMemberById(memberId); + + return ResponseEntity.status(HttpStatus.OK).body(member.getNickname()); + } + @PatchMapping("/member/nickname") public ResponseEntity updateNickname( @Parameter(hidden = true) @AuthMember final Long memberId, diff --git a/src/test/java/com/und/server/member/controller/MemberControllerTest.java b/src/test/java/com/und/server/member/controller/MemberControllerTest.java index 03f46ab1..be49cdd3 100644 --- a/src/test/java/com/und/server/member/controller/MemberControllerTest.java +++ b/src/test/java/com/und/server/member/controller/MemberControllerTest.java @@ -1,5 +1,6 @@ package com.und.server.member.controller; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; @@ -7,6 +8,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import java.nio.charset.StandardCharsets; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -28,6 +31,7 @@ import com.und.server.common.exception.ServerException; import com.und.server.member.dto.request.NicknameRequest; import com.und.server.member.dto.response.MemberResponse; +import com.und.server.member.entity.Member; import com.und.server.member.service.MemberService; @ExtendWith(MockitoExtension.class) @@ -131,6 +135,59 @@ void Given_AuthenticatedUser_When_UpdateNickname_Then_ReturnsOkWithUpdatedInfo() .andExpect(jsonPath("$.nickname").value(newNickname)); } + @Test + @DisplayName("Fails to get member and returns unauthorized when user is not authenticated") + void Given_UnauthenticatedUser_When_GetMember_Then_ReturnsUnauthorized() throws Exception { + // given + final String url = "/v1/member/nickname"; + final AuthErrorResult errorResult = AuthErrorResult.UNAUTHORIZED_ACCESS; + + doReturn(true).when(authMemberArgumentResolver).supportsParameter(any()); + doThrow(new ServerException(errorResult)) + .when(authMemberArgumentResolver).resolveArgument(any(), any(), any(), any()); + + // when + final ResultActions resultActions = mockMvc.perform( + MockMvcRequestBuilders.get(url) + ); + + // then + resultActions.andExpect(status().isUnauthorized()) + .andExpect(jsonPath("$.code").value(errorResult.name())) + .andExpect(jsonPath("$.message").value(errorResult.getMessage())); + } + + @Test + @DisplayName("Succeeds in getting member nickname for an authenticated user") + void Given_AuthenticatedUser_When_GetMember_Then_ReturnsOkWithNickname() throws Exception { + // given + final String url = "/v1/member/nickname"; + final Long memberId = 1L; + final String nickname = "Chori"; + final Member member = Member.builder() + .id(memberId) + .nickname(nickname) + .build(); + + doReturn(true).when(authMemberArgumentResolver).supportsParameter(any()); + doReturn(memberId).when(authMemberArgumentResolver).resolveArgument(any(), any(), any(), any()); + doReturn(member).when(memberService).findMemberById(memberId); + + // when + final ResultActions resultActions = mockMvc.perform( + MockMvcRequestBuilders.get(url) + ); + + // then + final String responseContent = resultActions + .andExpect(status().isOk()) + .andReturn() + .getResponse() + .getContentAsString(StandardCharsets.UTF_8); + assertThat(responseContent).isEqualTo(nickname); + verify(memberService).findMemberById(memberId); + } + @Test @DisplayName("Fails to delete member and returns unauthorized when user is not authenticated") void Given_UnauthenticatedUser_When_DeleteMember_Then_ReturnsUnauthorized() throws Exception {