나의 멤버십 전체 조회 API
클라이언트가 해당 클라이언트의 ID를 입력했을 시 클라이언트가 가진 모든 멤버십을 조회할 수 있게 만들 레파지토리부터 테스트 코드를 진행하겠다.
@Test
@DisplayName("멤버십 조회 / 멤버십이 없을 때")
void NoMembership(){
List<Membership> findMembership = membershipRepository.findByUserId("userId");
assertThat(findMembership.size()).isEqualTo(0);
}
멤버십이 없을 때와 있을때의 테스트코드를 나누어 작성한다.
처음으로 멤버십이 없을때의 테스트 코드를 짜보았을 때,
MembershipRepository에 findByUserId가 없기 때문에 컴파일 오류가 난다.
이 컴파일 오류부터 해결해보자.
@Repository
public interface MembershipRepository extends JpaRepository<Membership, Long> {
Membership findByUserIdAndMembershipType(String userId, MembershipType membershipType);
List<Membership> findByUserId(String userId);
}
MembershipRepository를 수정 후 다시 테스트를 돌려보면 성공한다.
이번에는 멤버십이 있을 때의 코드를 짜보았다.
@Test
@DisplayName("멤버십 조회 / 멤버십이 있을 때(2개)")
void TwoMembership(){
//given
Membership KakaoUserA = Membership.builder()
.userId("userA")
.membershipType(MembershipType.KAKAO)
.point(10000)
.build();
Membership NaverUserA = Membership.builder()
.userId("userA")
.membershipType(MembershipType.NAVER)
.point(10000)
.build();
membershipRepository.save(KakaoUserA);
membershipRepository.save(NaverUserA);
//when
List<Membership> findResult = membershipRepository.findByUserId("userA");
//then
assertThat(findResult.size()).isEqualTo(2);
}
잘 성공하는 것을 확인할 수 있다.
이제 서비스 파트를 테스트 해보자
@Test
@DisplayName("멤버십 조회 기능")
void findMembership(){
//given
Membership NaverUserA = Membership.builder()
.userId("userA")
.membershipType(MembershipType.NAVER)
.point(10000)
.build();
Membership KakaoUserA = Membership.builder()
.userId("userA")
.membershipType(MembershipType.KAKAO)
.point(10000)
.build();
Membership naverUserA = membershipRepository.save(NaverUserA);
Membership kakaoUserA = membershipRepository.save(KakaoUserA);
//when
List<Membership> findMembership = memberService.read("userA");
//then
assertThat(findMembership.size()).isEqualTo(2);
}
Service 클래스에 read메서드가 없어 컴파일 오류가 난다.
Service클래스에 read메서드라는 프로덕트 코드를 작성해보자.
public List<Membership> read(String userId) {
List<Membership> findMembership = membershipRepository.findByUserId(userId);
return findMembership;
}
다시 돌려보면 테스트에 성공한 것을 확인할 수 있다.
이제 서비스 프로덕트 코드의 리팩토링을 하면 된다.
하지만 dto -> entity, entity -> dto 변환작업은 나중에 실시할 예정이므로 리팩토링은 잠시 내버려두고 주석을 통해 고칠 부분만 확인해둔다.