- Team Notion : https://www.notion.so/4-8a96e7a3ca6f44e98e78e70ac4bb1fda
- Team GitHub : https://github.com/20230206/tutormatching
- 오늘 내가 한 일
1) 회원 닉네임 수정 + TestCode
2) 회원 프로필 요소 조회 + TestCode
- Issue
1) 인증된 Member객체를 넘겨줄 것이고( 시큐리티에 의해 ), 인증객체를 만드는 중에 memeberEntity를 조회하는데, 굳이 다시 조회할 필요가 있을까요?
-> 피드백 반영 완료
@Override
@Transactional
public String updateNickname(String nickname, Member member) {
member.updateNickName(nickname);
return "수정이 완료되었습니다!";
}
@Override
@Transactional(readOnly = true)
public Member findMemberByEmail(String email) {
return memberRepository.findByEmail(email).orElseThrow(
() -> new IllegalArgumentException("등록된 사용자가 없습니다!")
);
}
@Override
@Transactional
public String getNickname(Member member) {
return member.getNickname();
}
@Override
@Transactional
public String getLocation(Member member) {
return locationService.getLocation(member).getAddress();
}
@Override
@Transactional
public LocalDate getSignupDate(Member member) {
return member.getCreatedAt();
}
@Override
@Transactional
public int getLevel(Member member) {
return member.getLevel();
}
@Override
@Transactional
public String getImage(Member member) {
return member.getImage();
}
2) DB에서 하나의 값을 조회하는 경우는 if(is null?)같은 형식이 아닌 Optiional.OrElseThrow()로 작성해주세요!
-> 피드백 반영 완료
@Override
@Transactional
public Location findMemberLocation(Long memberId){
Location location = locationRepository.findByMemberId(memberId).orElseThrow(
() -> new IllegalArgumentException("위치 정보 값이 없습니다!")
);
return location;
}
- 간단한 코드이지만, PostMan테스트가 불가한 상황으로, 단위 테스트를 진행
- MemberServiceImplTest
package com.sparta.soomtut.service.impl;
import com.sparta.soomtut.entity.Location;
import com.sparta.soomtut.entity.Member;
import com.sparta.soomtut.repository.MemberRepository;
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 java.time.LocalDate;
import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@ExtendWith(MockitoExtension.class)
class MemberServiceImplTest {
@Mock
MemberRepository memberRepository;
@Mock
LocationServiceImpl locationService;
@InjectMocks
MemberServiceImpl memberService;
@Test
@DisplayName("유저 닉네임 업데이트(성공)")
void updateNickname() {
Member member = new Member("user@user.com","asd12345","user1");
String msg = memberService.updateNickname("new nickname",member);
assertThat(msg).isEqualTo("수정이 완료되었습니다!");
assertThat(member.getNickname()).isEqualTo("new nickname");
}
@Test
@DisplayName("닉네임 가져오기")
void getNickname(){
Member member = new Member("user@user.com","asd12345","user1");
//given(memberService.findMemberById(member.getId())).willReturn(member);
String nickName = memberService.getNickname(member);
assertThat(member.getNickname()).isEqualTo(nickName);
}
@Test
@DisplayName("위치정보 가져오기")
void getLocation(){
Member member = new Member("user@user.com","asd12345","user1");
Location location = new Location(1L,member,"서울",3f,3f);
given(locationService.getLocation(member)).willReturn(location);
String address = memberService.getLocation(member);
assertThat(address).isEqualTo("서울");
}
@Test
@DisplayName("가입일자 가져오기")
void getSignupDate(){
Member member = new Member("user@user.com","asd12345","user1");
LocalDate signupDate = memberService.getSignupDate(member);
assertThat(signupDate).isEqualTo(member.getCreatedAt());
}
@Test
@DisplayName("레벨 가져오기")
void getLevel(){
Member member = new Member("user@user.com","asd12345","user1");
int level = memberService.getLevel(member);
assertThat(level).isEqualTo(0);
}
@Test
@DisplayName("이미지 가져오기")
void getImage(){
Member member = new Member("user@user.com","asd12345","user1");
String image = memberService.getImage(member);
assertThat(image).isEqualTo(member.getImage());
}
}
- CodingTestPosting GitHub : https://github.com/PriceHoon/codingTestJava