Skip to content

Commit 82ebee6

Browse files
committed
feat: 회원 정보 조회 API 구현
1 parent 97cef21 commit 82ebee6

File tree

4 files changed

+87
-1
lines changed

4 files changed

+87
-1
lines changed

src/main/java/eatda/controller/member/MemberController.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ public class MemberController {
1717

1818
private final MemberService memberService;
1919

20+
@GetMapping("/api/member")
21+
public ResponseEntity<MemberResponse> getMember(LoginMember member) {
22+
MemberResponse response = memberService.getMember(member.id());
23+
return ResponseEntity.ok(response);
24+
}
25+
2026
@GetMapping("/api/member/nickname/check")
2127
public ResponseEntity<Void> checkNickname(LoginMember member, @RequestParam String nickname) {
2228
memberService.validateNickname(nickname, member.id());

src/test/java/eatda/controller/BaseControllerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public class BaseControllerTest {
4646
protected MemberRepository memberRepository;
4747

4848
@Autowired
49-
private JwtManager jwtManager;
49+
protected JwtManager jwtManager;
5050

5151
@MockitoBean
5252
private OauthClient oauthClient;

src/test/java/eatda/controller/member/MemberControllerTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,38 @@
44
import static org.junit.jupiter.api.Assertions.assertAll;
55

66
import eatda.controller.BaseControllerTest;
7+
import eatda.domain.member.Member;
78
import io.restassured.http.ContentType;
89
import org.junit.jupiter.api.Nested;
910
import org.junit.jupiter.api.Test;
1011
import org.springframework.http.HttpHeaders;
1112

1213
class MemberControllerTest extends BaseControllerTest {
1314

15+
@Nested
16+
class GetMember {
17+
18+
@Test
19+
void 회원_정보를_조회할_수_있다() {
20+
Member member = memberGenerator.generateRegisteredMember("123", "test-nickname", "01012345678");
21+
String accessToken = jwtManager.issueAccessToken(member.getId());
22+
23+
MemberResponse response = given()
24+
.header(HttpHeaders.AUTHORIZATION, accessToken)
25+
.when().get("/api/member")
26+
.then()
27+
.statusCode(200)
28+
.extract().as(MemberResponse.class);
29+
30+
assertAll(
31+
() -> assertThat(response.id()).isEqualTo(member.getId()),
32+
() -> assertThat(response.nickname()).isEqualTo(member.getNickname()),
33+
() -> assertThat(response.phoneNumber()).isEqualTo(member.getPhoneNumber()),
34+
() -> assertThat(response.isSignUp()).isFalse()
35+
);
36+
}
37+
}
38+
1439
@Nested
1540
class CheckNickname {
1641

src/test/java/eatda/document/member/MemberDocumentTest.java

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,61 @@
3030

3131
public class MemberDocumentTest extends BaseDocumentTest {
3232

33+
@Nested
34+
class GetMember {
35+
36+
RestDocsRequest requestDocument = request()
37+
.tag(Tag.MEMBER_API)
38+
.summary("회원 정보 조회")
39+
.requestHeader(
40+
headerWithName(HttpHeaders.AUTHORIZATION).description("액세스 토큰")
41+
);
42+
43+
RestDocsResponse responseDocument = response()
44+
.responseBodyField(
45+
fieldWithPath("id").type(NUMBER).description("회원 식별자"),
46+
fieldWithPath("isSignUp").type(BOOLEAN).description("회원 가입 요청 여부 (false 고정)"),
47+
fieldWithPath("nickname").type(STRING).description("회원 닉네임").optional(),
48+
fieldWithPath("phoneNumber").type(STRING).description("회원 전화번호 ex) 01012345678").optional(),
49+
fieldWithPath("optInMarketing").type(BOOLEAN).description("마케팅 동의 여부").optional()
50+
);
51+
52+
@Test
53+
void 회원_정보_조회_성공() {
54+
MemberResponse response = new MemberResponse(1L, false, "test-nickname", "01012345678", true);
55+
doReturn(response).when(memberService).getMember(anyLong());
56+
57+
var document = document("member/get", 200)
58+
.request(requestDocument)
59+
.response(responseDocument)
60+
.build();
61+
62+
given(document)
63+
.contentType(ContentType.JSON)
64+
.header(HttpHeaders.AUTHORIZATION, accessToken())
65+
.when().get("/api/member")
66+
.then().statusCode(200);
67+
}
68+
69+
@EnumSource(value = BusinessErrorCode.class,
70+
names = {"UNAUTHORIZED_MEMBER", "EXPIRED_TOKEN", "INVALID_MEMBER_ID"})
71+
@ParameterizedTest
72+
void 회원_정보_조회_실패(BusinessErrorCode errorCode) {
73+
doThrow(new BusinessException(errorCode)).when(memberService).getMember(anyLong());
74+
75+
var document = document("member/get", errorCode)
76+
.request(requestDocument)
77+
.response(ERROR_RESPONSE)
78+
.build();
79+
80+
given(document)
81+
.contentType(ContentType.JSON)
82+
.header(HttpHeaders.AUTHORIZATION, accessToken())
83+
.when().get("/api/member")
84+
.then().statusCode(errorCode.getStatus().value());
85+
}
86+
}
87+
3388
@Nested
3489
class CheckNickname {
3590

0 commit comments

Comments
 (0)