Skip to content

Commit

Permalink
fix: 본인 nickname 검증 (#231)
Browse files Browse the repository at this point in the history
  • Loading branch information
char-yb authored Aug 26, 2024
1 parent 67244ca commit 4fd4b52
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ public MemberInfoResponse findMemberInfo(Long memberId) {

@Transactional(readOnly = true)
public void checkNickname(NicknameCheckRequest request) {
memberUtil.checkNickname(request);
final Member currentMember = memberUtil.getCurrentMember();
memberUtil.checkNickname(request, currentMember);
}

public void modifyMemberProfile(MemberProfileUpdateRequest request) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@

public interface MemberRepositoryCustom {

boolean existsByProfileNickname(String nickname);
boolean existsByProfileNickname(String nickname, String currentNickname);
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,15 @@ public class MemberRepositoryImpl implements MemberRepositoryCustom {
private final JPAQueryFactory jpaQueryFactory;

@Override
public boolean existsByProfileNickname(String nickname) {
public boolean existsByProfileNickname(String nickname, String currentNickname) {
// 존재하는 경우의 쿼리
return jpaQueryFactory
.selectOne()
.from(member)
.where(isProfileNickname(nickname).and(isNotEmptyProfileNickname()))
.where(
isProfileNickname(nickname)
.and(isNotEmptyProfileNickname())
.and(isMyNickname(currentNickname)))
.fetchFirst()
!= null;
}
Expand All @@ -30,4 +33,8 @@ private BooleanExpression isProfileNickname(String nickname) {
private BooleanExpression isNotEmptyProfileNickname() {
return member.profile.nickname.ne("");
}

private BooleanExpression isMyNickname(String currentNickname) {
return member.profile.nickname.ne(currentNickname);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ public String getMemberRole() {
}

@Transactional(readOnly = true)
public void checkNickname(NicknameCheckRequest request) {
validateNicknameNotDuplicate(request.nickname());
public void checkNickname(NicknameCheckRequest request, Member currentMember) {
validateNicknameNotDuplicate(request.nickname(), currentMember.getProfile().getNickname());
if (validateNicknameText(request.nickname())) {
throw new CustomException(ErrorCode.MEMBER_INVALID_NICKNAME);
}
Expand All @@ -50,8 +50,8 @@ private boolean validateNicknameText(String nickname) {
return nickname == null || nickname.length() < 2 || nickname.length() > 14;
}

private void validateNicknameNotDuplicate(String nickname) {
if (memberRepository.existsByProfileNickname(nickname)) {
private void validateNicknameNotDuplicate(String nickname, String currentNickname) {
if (memberRepository.existsByProfileNickname(nickname, currentNickname)) {
throw new CustomException(ErrorCode.MEMBER_ALREADY_NICKNAME);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,15 @@ class MemberServiceTest extends FixtureMonkeySetUp {
@Test
void 닉네임을_검증한다() {
// given
Member member = fixtureMonkey.giveMeOne(Member.class);
when(memberUtil.getCurrentMember()).thenReturn(member);
NicknameCheckRequest request = fixtureMonkey.giveMeOne(NicknameCheckRequest.class);

// when
memberService.checkNickname(request);

// then
verify(memberUtil).checkNickname(request);
verify(memberUtil).checkNickname(request, member);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,50 +98,61 @@ class MemberUtilTest extends FixtureMonkeySetUp {
@Test
void checkNickname_성공() {
// given
Member member = fixtureMonkey.giveMeOne(Member.class);
String nickname = "validNickname";
NicknameCheckRequest request = new NicknameCheckRequest(nickname);
when(memberRepository.existsByProfileNickname(nickname)).thenReturn(false);
when(memberRepository.existsByProfileNickname(nickname, member.getProfile().getNickname()))
.thenReturn(false);

// when & then
assertDoesNotThrow(() -> memberUtil.checkNickname(request));
assertDoesNotThrow(() -> memberUtil.checkNickname(request, member));
}

@Test
void checkNickname_실패_MEMBER_ALREADY_NICKNAME() {
// given
Member member = fixtureMonkey.giveMeOne(Member.class);
String nickname = "duplicateNickname";
NicknameCheckRequest request = new NicknameCheckRequest(nickname);
when(memberRepository.existsByProfileNickname(nickname)).thenReturn(true);
when(memberRepository.existsByProfileNickname(nickname, member.getProfile().getNickname()))
.thenReturn(true);

// when & then
CustomException exception =
assertThrows(CustomException.class, () -> memberUtil.checkNickname(request));
assertThrows(
CustomException.class, () -> memberUtil.checkNickname(request, member));
assertEquals(ErrorCode.MEMBER_ALREADY_NICKNAME, exception.getErrorCode());
}

@Test
void checkNickname_실패_MEMBER_INVALID_NICKNAME_길이_1() {
// given
Member member = fixtureMonkey.giveMeOne(Member.class);
String nickname = "a";
NicknameCheckRequest request = new NicknameCheckRequest(nickname);
when(memberRepository.existsByProfileNickname(nickname)).thenReturn(false);
when(memberRepository.existsByProfileNickname(nickname, member.getProfile().getNickname()))
.thenReturn(false);

// when & then
CustomException exception =
assertThrows(CustomException.class, () -> memberUtil.checkNickname(request));
assertThrows(
CustomException.class, () -> memberUtil.checkNickname(request, member));
assertEquals(ErrorCode.MEMBER_INVALID_NICKNAME, exception.getErrorCode());
}

@Test
void checkNickname_실패_MEMBER_INVALID_NICKNAME_길이_15() {
// given
Member member = fixtureMonkey.giveMeOne(Member.class);
String nickname = "a".repeat(15);
NicknameCheckRequest request = new NicknameCheckRequest(nickname);
when(memberRepository.existsByProfileNickname(nickname)).thenReturn(false);
when(memberRepository.existsByProfileNickname(nickname, member.getProfile().getNickname()))
.thenReturn(false);

// when & then
CustomException exception =
assertThrows(CustomException.class, () -> memberUtil.checkNickname(request));
assertThrows(
CustomException.class, () -> memberUtil.checkNickname(request, member));
assertEquals(ErrorCode.MEMBER_INVALID_NICKNAME, exception.getErrorCode());
}
}

0 comments on commit 4fd4b52

Please sign in to comment.