Skip to content

Commit

Permalink
Feat: Member controller 가입 승인(#60)
Browse files Browse the repository at this point in the history
* Init: Create member repository

멤버 데이터를 저장하기 위한 저장소를 만들었습니다.
기본적인 영속성 추가를 위한
save()와 단건 데이터 검색과 전체 조회 메서드를 추가했습니다.

* Refactor: Change MemberRepository type

MemberRepository의 형식을 JPA Repository를 상속받는 형식으로 수정하였습니다.

* Feat: Add method for findByName

name을 기준으로 검색을 하는 메서드를 추가했습니다.

* Refactor: Change logic in create method

생성 메서드를 Builder 사용하는 방식으로 수정하였습니다.

* Style: Change method name

잘못 작성한 메서드의 이름을 변경하였습니다.
findByName -> findByusername

* Test: Add MemberRepository Test

작성한 Member Repository Test 추가했습니다.

간단히
- 빌더통해 생성 확인
- 저장한 데이터 불러오기
- 잘못된 색인시 에러 나는지

* Feat: Add hasher

Hasher 부분이 사용되지 않은 것을 확인해서 추가했습니다.

* Init: Create DTO for signup method

회원가입시 사용될 DTO를 작성했습니다.

* Feat: Add signupMember

가입 승인을 신청하는 url을 맵핑했습니다.

* Feat: Remove validate

validator가 잘못된 곳에서 사용되고 있어서 삭제했습니다.

* Feat: Add optional for empty data

Repository에서 서치시 데이터가 없을 경우를 위해 Optional로 감쌋습니다.

* Test: remove default method

빌더를 통한 객체 생성 테스트를 제외하고 jpaRepository에서 자동 생성되는 메서드의 테스트는 삭제했습니다.

* Style: Change method name

- validatePassword를 의미적으로 좀 더 맞는
verifyPassword로 변경되었습니다.

- 메서드에 대한 설명도 추가되었습니다.

* Test: Change test

Test문이 줄어 빌더 생성관련 밖에 남지 않아 MemberTest로 변경되었습니다.

* Doc: README.md 추가 (#39)

* Doc: README.md 추가

- 커스텀 로고
- 사용 기술 목록
- Content 목록 조회 기능에 대해 고민한 것들과 마주친 문제, 해결방안 등.

* Refactor: add return value in signupMember()

signupMember 메서드의 리턴 밸류가 void였는데  response status 200을 주는 것으로 변경했습니다.

* Feat: Add fields in SignupMemberDTO

가입 승인 로직에서 사용될 DTO에 적절한 필드를 추가하였습니다.

* Init: Add tmp member sevice

Contoller의 동작을 테스트 하기 위한 임시 service를 작성하였습니다.

* Comment: Add comment for signupMember method

signupMember 메서드를 위한 주석을 추가했습니다.

* Test: Add test for member controller

멤버 Controller의 동작을 확인하기 위한 테스트를 작성했습니다.

* Refactor: Remove response wildcard

ResponseEntity를 와일드카드로 반환하는 부분을 void로 변경

* Refactor: Remove SignupMemberDTO

목적이 같은 DTO를 삭제 및 Confirm객체로 교체하였습니다.

* Refactor: Remove tmp memberServiceImpl

임시로 넣어서 사용했던, MemberServiceImpl을 삭제하고, Controller에서도 인터페이스에 종속되도록 변경하였습니다.
  • Loading branch information
jaekkang authored Oct 29, 2023
1 parent 995fd36 commit 0406764
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

import javax.validation.Valid;

import static beforespring.socialfeed.member.controller.dto.ConfirmTokenDto.*;
import static beforespring.socialfeed.member.controller.dto.CreateMemberDto.CreateMemberRequest;
import static beforespring.socialfeed.member.controller.dto.CreateMemberDto.CreateMemberResponse;

Expand All @@ -28,4 +29,16 @@ public CreateMemberResponse createMember(@RequestBody @Valid CreateMemberRequest
Long memberId = memberService.join(request);
return new CreateMemberResponse(memberId);
}

/**
* 가입 승인 요청시 사용될 메서드입니다.
* request로 받은 유저의 정보를 토대로
* joinConfirm service를 호출합니다.
*
* @param request
*/
@PostMapping("/api/member/confirm")
public void signupMember(@RequestBody @Valid ConfirmTokenRequest request) {
memberService.joinConfirm(request);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package beforespring.socialfeed.member.controller;

import beforespring.socialfeed.content.controller.ContentController;
import beforespring.socialfeed.member.service.MemberService;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
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.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;

import static beforespring.socialfeed.member.controller.dto.ConfirmTokenDto.ConfirmTokenRequest;
import static beforespring.socialfeed.member.controller.dto.CreateMemberDto.CreateMemberRequest;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@WebMvcTest
class MemberControllerTest {
@Autowired
MockMvc mockMvc;

@Autowired
ObjectMapper objectMapper;

@MockBean
MemberController memberController;

@MockBean
ContentController contentController;

@MockBean
MemberService memberService;

/**
* 멤버 등록에 적절한 데이터를 가지고 등록 URL 호출시
* 회원 등록 서비스가 실행되어야됩니다.
* <p>
* Mock 테스트시 objectMapper가 json 변환에 실패할 경우
* checked exception을 던지기 때문에 해당 함수 전체에서
* throws Exception을 하도록 설정해놓았습니다.
*
* @throws Exception
*/
@Test
@DisplayName("데이터를 가지고 API가 호출되면 회원 등록 서비스가 실행되어야됩니다")
void save_member_test() throws Exception {
CreateMemberRequest request = new CreateMemberRequest("username", "[email protected]", "12@12334asdf");

String requestBody = objectMapper.writeValueAsString(request);

mockMvc.perform(post("/api/member/new")
.contentType(MediaType.APPLICATION_JSON)
.content(requestBody))
.andExpect(status().isOk())
.andReturn();
}

@Test
@DisplayName("데이터를 가지고 API가 호출되면 가입 승인 서비스가 실행되어야됩니다")
void confirm_member_test() throws Exception {
ConfirmTokenRequest request = new ConfirmTokenRequest("username", "1234", "1234");

String requestBody = objectMapper.writeValueAsString(request);

mockMvc.perform(post("/api/member/confirm")
.contentType(MediaType.APPLICATION_JSON)
.content(requestBody))
.andExpect(status().isOk())
.andReturn();
}
}

0 comments on commit 0406764

Please sign in to comment.