Skip to content

Commit

Permalink
refactor: (#491) 닉네임 최초 변경 로직을 prefix로 구분하도록 변경
Browse files Browse the repository at this point in the history
  • Loading branch information
jeomxon committed Sep 8, 2023
1 parent ea5a55f commit bb5899c
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -81,14 +81,17 @@ public static Member from(final KakaoMemberResponse response) {
}

public void changeNicknameByCycle(final String nickname, final Long days) {
if (nickname.startsWith(INITIAL_NICKNAME_PREFIX)) {
throw new BadRequestException(MemberExceptionType.INVALID_NICKNAME_LETTER);
}
if (isNotPassedChangingCycle(days)) {
throw new BadRequestException(MemberExceptionType.NOT_PASSED_NICKNAME_CHANGING_CYCLE);
}
this.nickname = new Nickname(nickname);
}

private boolean isNotPassedChangingCycle(final Long days) {
return (!this.getCreatedAt().equals(this.getUpdatedAt())) &&
return (this.nickname.nonStartsWith(INITIAL_NICKNAME_PREFIX)) &&
(this.getUpdatedAt().isAfter(LocalDateTime.now().minusDays(days)));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,8 @@ private void validateNickname(final String nickname) {
}
}

public boolean nonStartsWith(final String prefix) {
return !this.value.startsWith(prefix);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ void success() {

LocalDateTime now = LocalDateTime.now().minusDays(15L);
ReflectionTestUtils.setField(member, "createdAt", now);
ReflectionTestUtils.setField(member, "updatedAt", now);
ReflectionTestUtils.setField(member, "updatedAt", now.plusHours(1L));

// when
member.changeNicknameByCycle("저라니", 14L);
Expand All @@ -46,7 +46,7 @@ void success() {
void successFirstChange() {
// given
Member member = Member.builder()
.nickname("저문")
.nickname("익명의손님fFp4vAgX2d")
.gender(Gender.MALE)
.birthYear(1966)
.socialId("abc123")
Expand All @@ -55,7 +55,7 @@ void successFirstChange() {

LocalDateTime now = LocalDateTime.now().minusDays(13L);
ReflectionTestUtils.setField(member, "createdAt", now);
ReflectionTestUtils.setField(member, "updatedAt", now);
ReflectionTestUtils.setField(member, "updatedAt", now.plusHours(1L));

// when
member.changeNicknameByCycle("저라니", 14L);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,21 @@ class ChangeNickname {
@DisplayName("한번도 변경되지 않았다면 닉네임 변경 주기에 상관없이 닉네임을 변경한다.")
void changeNickname() {
// given
Member member = Member.builder()
.nickname("익명의손님fFp4vAgX2d")
.gender(Gender.MALE)
.birthYear(1966)
.socialId("abc123")
.socialType(SocialType.KAKAO)
.build();
String newNickname = "jeomxon";
Member member = memberRepository.save(MemberFixtures.FEMALE_30.get());
Member savedMember = memberRepository.save(member);

// when
memberService.changeNickname(member, newNickname);
memberService.changeNickname(savedMember, newNickname);

// then
assertThat(member.getNickname()).isEqualTo(newNickname);
assertThat(savedMember.getNickname()).isEqualTo(newNickname);
}

@ParameterizedTest
Expand Down Expand Up @@ -140,12 +147,19 @@ void changeNicknameEqualToPrevious() {
@DisplayName("최초 닉네임을 변경한 후 닉네임 변경 주기가 지나지 않았다면 예외가 발생한다.")
void changeNicknameThrowsExceptionNotPassedChangingCycle() {
// given
Member member = memberRepository.save(MemberFixtures.MALE_20.get());
Member member = Member.builder()
.nickname("익명의손님fFp4vAgX2d")
.gender(Gender.MALE)
.birthYear(1966)
.socialId("abc123")
.socialType(SocialType.KAKAO)
.build();
Member savedMember = memberRepository.save(member);

memberService.changeNickname(member, "저문");
memberService.changeNickname(savedMember, "저문");

// when, then
assertThatThrownBy(() -> memberService.changeNickname(member, "저라니"))
assertThatThrownBy(() -> memberService.changeNickname(savedMember, "저라니"))
.isInstanceOf(BadRequestException.class)
.hasMessage("최소 닉네임 변경주기가 지나지 않았습니다.");
}
Expand Down

0 comments on commit bb5899c

Please sign in to comment.