-
Notifications
You must be signed in to change notification settings - Fork 1
✨ [OMF-339] 단위 테스트 추가 - Member 도메인 (PR 2/3) #157
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
224 changes: 224 additions & 0 deletions
224
src/test/java/OneQ/OnSurvey/domain/member/MemberTest.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,224 @@ | ||
| package OneQ.OnSurvey.domain.member; | ||
|
|
||
| import OneQ.OnSurvey.domain.member.value.Interest; | ||
| import OneQ.OnSurvey.domain.member.value.MemberStatus; | ||
| import OneQ.OnSurvey.domain.member.value.Role; | ||
| import OneQ.OnSurvey.domain.survey.model.Gender; | ||
| import OneQ.OnSurvey.domain.survey.model.Residence; | ||
| import OneQ.OnSurvey.global.common.exception.CustomException; | ||
| import org.junit.jupiter.api.DisplayName; | ||
| import org.junit.jupiter.api.Test; | ||
|
|
||
| import java.util.List; | ||
| import java.util.Set; | ||
|
|
||
| import static org.assertj.core.api.Assertions.assertThat; | ||
| import static org.assertj.core.api.Assertions.assertThatThrownBy; | ||
|
|
||
| class MemberTest { | ||
|
|
||
| private Member buildMember() { | ||
| return Member.createMember( | ||
| 1000L, "홍길동", "010-1234-5678", | ||
| "19900101", "test@test.com", | ||
| Gender.MALE, Role.ROLE_MEMBER, MemberStatus.ACTIVE | ||
| ); | ||
| } | ||
|
|
||
| @Test | ||
| @DisplayName("increaseCoin - 양수 금액이면 코인 증가") | ||
| void increaseCoin_positiveAmount_increasesCoin() { | ||
| Member member = buildMember(); | ||
|
|
||
| member.increaseCoin(500L); | ||
|
|
||
| assertThat(member.getCoin()).isEqualTo(500L); | ||
| } | ||
|
|
||
| @Test | ||
| @DisplayName("increaseCoin - 0 이하이면 COIN_NOT_POSITIVE 예외") | ||
| void increaseCoin_zero_throwsException() { | ||
| Member member = buildMember(); | ||
|
|
||
| assertThatThrownBy(() -> member.increaseCoin(0L)) | ||
| .isInstanceOf(CustomException.class) | ||
| .satisfies(ex -> assertThat(((CustomException) ex).getErrorCode()) | ||
| .isEqualTo(CoinErrorCode.COIN_NOT_POSITIVE)); | ||
| } | ||
|
|
||
| @Test | ||
| @DisplayName("increaseCoin - 음수이면 COIN_NOT_POSITIVE 예외") | ||
| void increaseCoin_negative_throwsException() { | ||
| Member member = buildMember(); | ||
|
|
||
| assertThatThrownBy(() -> member.increaseCoin(-100L)) | ||
| .isInstanceOf(CustomException.class) | ||
| .satisfies(ex -> assertThat(((CustomException) ex).getErrorCode()) | ||
| .isEqualTo(CoinErrorCode.COIN_NOT_POSITIVE)); | ||
| } | ||
|
|
||
| @Test | ||
| @DisplayName("decreaseCoin - 충분한 코인이면 차감") | ||
| void decreaseCoin_sufficientCoin_decreasesCoin() { | ||
| Member member = buildMember(); | ||
| member.increaseCoin(1000L); | ||
|
|
||
| member.decreaseCoin(300L); | ||
|
|
||
| assertThat(member.getCoin()).isEqualTo(700L); | ||
| } | ||
|
|
||
| @Test | ||
| @DisplayName("decreaseCoin - 코인 부족이면 COIN_LACK 예외") | ||
| void decreaseCoin_insufficientCoin_throwsException() { | ||
| Member member = buildMember(); | ||
| member.increaseCoin(100L); | ||
|
|
||
| assertThatThrownBy(() -> member.decreaseCoin(500L)) | ||
| .isInstanceOf(CustomException.class) | ||
| .satisfies(ex -> assertThat(((CustomException) ex).getErrorCode()) | ||
| .isEqualTo(CoinErrorCode.COIN_LACK)); | ||
| } | ||
|
|
||
| @Test | ||
| @DisplayName("decreaseCoin - 0 이하이면 COIN_NOT_POSITIVE 예외") | ||
| void decreaseCoin_zero_throwsException() { | ||
| Member member = buildMember(); | ||
|
|
||
| assertThatThrownBy(() -> member.decreaseCoin(0L)) | ||
| .isInstanceOf(CustomException.class) | ||
| .satisfies(ex -> assertThat(((CustomException) ex).getErrorCode()) | ||
| .isEqualTo(CoinErrorCode.COIN_NOT_POSITIVE)); | ||
| } | ||
|
|
||
| @Test | ||
| @DisplayName("decreaseCoin - 음수이면 COIN_NOT_POSITIVE 예외") | ||
| void decreaseCoin_negative_throwsException() { | ||
| Member member = buildMember(); | ||
|
|
||
| assertThatThrownBy(() -> member.decreaseCoin(-1L)) | ||
| .isInstanceOf(CustomException.class) | ||
| .satisfies(ex -> assertThat(((CustomException) ex).getErrorCode()) | ||
| .isEqualTo(CoinErrorCode.COIN_NOT_POSITIVE)); | ||
| } | ||
|
|
||
| @Test | ||
| @DisplayName("increasePromotionPoint - 양수 금액이면 포인트 증가") | ||
| void increasePromotionPoint_positiveAmount_increasesPoint() { | ||
| Member member = buildMember(); | ||
|
|
||
| member.increasePromotionPoint(200L); | ||
|
|
||
| assertThat(member.getPromotionPoint()).isEqualTo(200L); | ||
| } | ||
|
|
||
| @Test | ||
| @DisplayName("increasePromotionPoint - 0 이하이면 COIN_NOT_POSITIVE 예외") | ||
| void increasePromotionPoint_zero_throwsException() { | ||
| Member member = buildMember(); | ||
|
|
||
| assertThatThrownBy(() -> member.increasePromotionPoint(0L)) | ||
| .isInstanceOf(CustomException.class) | ||
| .satisfies(ex -> assertThat(((CustomException) ex).getErrorCode()) | ||
| .isEqualTo(CoinErrorCode.COIN_NOT_POSITIVE)); | ||
| } | ||
|
KJaeKwan marked this conversation as resolved.
|
||
|
|
||
| @Test | ||
| @DisplayName("increasePromotionPoint - 음수이면 COIN_NOT_POSITIVE 예외") | ||
| void increasePromotionPoint_negative_throwsException() { | ||
| Member member = buildMember(); | ||
|
|
||
| assertThatThrownBy(() -> member.increasePromotionPoint(-1L)) | ||
| .isInstanceOf(CustomException.class) | ||
| .satisfies(ex -> assertThat(((CustomException) ex).getErrorCode()) | ||
| .isEqualTo(CoinErrorCode.COIN_NOT_POSITIVE)); | ||
| } | ||
|
|
||
| @Test | ||
| @DisplayName("update - null 값은 무시하고 비null 값만 업데이트") | ||
| void update_nullFieldsIgnored() { | ||
| Member member = buildMember(); | ||
|
|
||
| member.update(null, "010-9999-9999", null, null, null, MemberStatus.ACTIVE); | ||
|
|
||
| assertThat(member.getName()).isEqualTo("홍길동"); | ||
| assertThat(member.getPhoneNumber()).isEqualTo("010-9999-9999"); | ||
| assertThat(member.getEmail()).isEqualTo("test@test.com"); | ||
| } | ||
|
|
||
| @Test | ||
| @DisplayName("updateAgreePolicy - serviceAgreed 항목 포함 시 서비스 동의 true") | ||
| void updateAgreePolicy_withServiceAgreed_setsTrue() { | ||
| Member member = buildMember(); | ||
|
|
||
| member.updateAgreePolicy(List.of("serviceAgreed")); | ||
|
|
||
| assertThat(member.isServiceAgreed()).isTrue(); | ||
| assertThat(member.isMarketingAgreed()).isFalse(); | ||
| } | ||
|
|
||
| @Test | ||
| @DisplayName("updateAgreePolicy - marketingAgreed 항목 포함 시 마케팅 동의 true") | ||
| void updateAgreePolicy_withMarketingAgreed_setsTrue() { | ||
| Member member = buildMember(); | ||
|
|
||
| member.updateAgreePolicy(List.of("marketingAgreed")); | ||
|
|
||
| assertThat(member.isMarketingAgreed()).isTrue(); | ||
| assertThat(member.isServiceAgreed()).isFalse(); | ||
| } | ||
|
|
||
| @Test | ||
| @DisplayName("updateAgreePolicy - null 이면 동의 상태 변경 없음") | ||
| void updateAgreePolicy_null_noChange() { | ||
| Member member = buildMember(); | ||
|
|
||
| member.updateAgreePolicy(null); | ||
|
|
||
| assertThat(member.isServiceAgreed()).isFalse(); | ||
| assertThat(member.isMarketingAgreed()).isFalse(); | ||
| } | ||
|
|
||
| @Test | ||
| @DisplayName("memberConnectOut - 상태 TOSS_CONNECT_OUT으로 변경") | ||
| void memberConnectOut_changesStatus() { | ||
| Member member = buildMember(); | ||
|
|
||
| member.memberConnectOut(); | ||
|
|
||
| assertThat(member.getStatus()).isEqualTo(MemberStatus.TOSS_CONNECT_OUT); | ||
| } | ||
|
|
||
| @Test | ||
| @DisplayName("changeProfileUrl - 프로필 URL 변경") | ||
| void changeProfileUrl_updatesUrl() { | ||
| Member member = buildMember(); | ||
|
|
||
| member.changeProfileUrl("https://cdn.example.com/avatar.png"); | ||
|
|
||
| assertThat(member.getProfileUrl()).isEqualTo("https://cdn.example.com/avatar.png"); | ||
| } | ||
|
|
||
| @Test | ||
| @DisplayName("completeOnboarding - 거주지, 관심사 설정 및 완료 플래그 true") | ||
| void completeOnboarding_setsResidenceAndInterests() { | ||
| Member member = buildMember(); | ||
|
|
||
| member.completeOnboarding(Residence.BUSAN, Set.of(Interest.CAREER, Interest.FINANCE)); | ||
|
|
||
| assertThat(member.isOnboardingCompleted()).isTrue(); | ||
| assertThat(member.getResidence()).isEqualTo(Residence.BUSAN); | ||
| assertThat(member.getInterests()).containsExactlyInAnyOrder(Interest.CAREER, Interest.FINANCE); | ||
| } | ||
|
|
||
| @Test | ||
| @DisplayName("completeOnboarding - interests가 null이면 빈 Set으로 처리") | ||
| void completeOnboarding_nullInterests_usesEmptySet() { | ||
| Member member = buildMember(); | ||
|
|
||
| member.completeOnboarding(Residence.SEOUL, null); | ||
|
|
||
| assertThat(member.isOnboardingCompleted()).isTrue(); | ||
| assertThat(member.getInterests()).isEmpty(); | ||
| } | ||
| } | ||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.