-
Notifications
You must be signed in to change notification settings - Fork 0
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
[OMCT-410] jwt,content 단위 테스트, feedReader 상세 조회 테스트 #218
Merged
Merged
Changes from all commits
Commits
Show all changes
15 commits
Select commit
Hold shift + click to select a range
0dcbe57
Merge branch 'main' into OMCT-410--domain-layer-test
HandmadeCloud 35c0fe5
test : jwt 토큰 검사 테스트 구현
HandmadeCloud 5fce082
refactor : jwt 토큰 검사 로직 수정
HandmadeCloud 6a0a24b
refactor : content 댓글 최소 수 검증 로직 추가
HandmadeCloud 165fb9f
test : 댓글 내용 도메인 테스트
HandmadeCloud 53584ba
chore : 테스트 이름 설명 추가
HandmadeCloud ae22a55
test : 피드 상세 조회 테스트
HandmadeCloud d406cf7
test : memberBuilder 생성 로직 추가
HandmadeCloud 701973a
test : 인터페이스에 의존하도록 롤백
HandmadeCloud 7ab802f
Merge branch 'main' into OMCT-410--domain-layer-test
HandmadeCloud 512a75e
test : refresh Token 적용으로 인한 단위테스트 수정
HandmadeCloud 674da17
refactoring : toString -> string valueOf 변경
HandmadeCloud 4e67f97
test : 피드 상세 조회 로직 memberBuilder 삭제
HandmadeCloud ff18c37
test : 피드 상세 조회 로직 memberBuilder 삭제, private메소드 => public메소드 테스트로 수정함
HandmadeCloud c7f56ec
test : 기존 memberBuilder 삭제
HandmadeCloud 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
This file contains 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
77 changes: 77 additions & 0 deletions
77
...i/src/test/java/com/programmers/bucketback/global/config/security/jwt/JwtServiceTest.java
This file contains 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,77 @@ | ||
package com.programmers.bucketback.global.config.security.jwt; | ||
|
||
import static org.assertj.core.api.Assertions.*; | ||
|
||
import org.junit.jupiter.api.DisplayName; | ||
import org.junit.jupiter.api.Nested; | ||
import org.junit.jupiter.api.Test; | ||
import org.junit.jupiter.params.ParameterizedTest; | ||
import org.junit.jupiter.params.provider.ValueSource; | ||
|
||
import com.programmers.bucketback.domains.member.domain.Member; | ||
import com.programmers.bucketback.domains.member.domain.MemberBuilder; | ||
|
||
import io.jsonwebtoken.JwtException; | ||
|
||
class JwtServiceTest { | ||
|
||
private String accessSecretKey = "testsecretkeydaslkjslsdnmflsdkgjsldgkjlweptojkgn"; | ||
private String refreshSecretKey = "testsecretkeydaslkjslsdnmflsdkgjsldgkjlweptojkgn"; | ||
private JwtConfig jwtConfig = new JwtConfig(accessSecretKey, 100, refreshSecretKey, 100); | ||
private JwtService jwtService = new JwtService(jwtConfig); | ||
|
||
@Test | ||
@DisplayName("access token 생성에 성공한다.") | ||
void successAccessTokenCreate() { | ||
//given | ||
Long memberId = 1L; | ||
Member member = MemberBuilder.build(memberId); | ||
|
||
//when | ||
String token = jwtService.generateAccessToken(String.valueOf(member.getId())); | ||
String username = jwtService.extractUsername(token); | ||
|
||
//then | ||
assertThat(jwtService.isAccessTokenValid(token)).isEqualTo(true); | ||
assertThat(username).isEqualTo(String.valueOf(member.getId())); | ||
} | ||
|
||
@Nested | ||
@DisplayName("유효한 토큰 유효성 검사") | ||
class ValidAccessToken { | ||
|
||
@ParameterizedTest | ||
@ValueSource(ints = {1, 10, 1000}) | ||
@DisplayName("유효한 토큰 검사에 성공한다.") | ||
void successValidTokenEvaluation(int expirationSecond) { | ||
//given | ||
JwtConfig jwtConfig = new JwtConfig(accessSecretKey, expirationSecond, refreshSecretKey, 100); | ||
JwtService jwtService = new JwtService(jwtConfig); | ||
|
||
Long memberId = 1L; | ||
Member member = MemberBuilder.build(memberId); | ||
String token = jwtService.generateAccessToken(String.valueOf(member.getId())); | ||
|
||
//given | ||
boolean result = jwtService.isAccessTokenValid(token); | ||
assertThat(result).isEqualTo(true); | ||
} | ||
|
||
@ParameterizedTest | ||
@ValueSource(ints = {0}) | ||
@DisplayName("만료된 토큰 검증에 성공한다.") | ||
void successExpiredTokenEvaluation(int expirationSecond) { | ||
//given | ||
JwtConfig jwtConfig = new JwtConfig(accessSecretKey, expirationSecond, refreshSecretKey, 100); | ||
JwtService jwtService = new JwtService(jwtConfig); | ||
|
||
Long memberId = 1L; | ||
Member member = MemberBuilder.build(memberId); | ||
String token = jwtService.generateAccessToken(String.valueOf(member.getId())); | ||
|
||
//given | ||
assertThatThrownBy(() -> jwtService.isAccessTokenValid(token)).isInstanceOf(JwtException.class); | ||
} | ||
} | ||
|
||
} |
This file contains 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
39 changes: 39 additions & 0 deletions
39
...omain/src/test/java/com/programmers/bucketback/domains/comment/domain/vo/ContentTest.java
This file contains 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,39 @@ | ||
package com.programmers.bucketback.domains.comment.domain.vo; | ||
|
||
import static org.assertj.core.api.Assertions.*; | ||
|
||
import org.junit.jupiter.api.DisplayName; | ||
import org.junit.jupiter.params.ParameterizedTest; | ||
import org.junit.jupiter.params.provider.NullAndEmptySource; | ||
import org.junit.jupiter.params.provider.ValueSource; | ||
|
||
import com.programmers.bucketback.error.BusinessException; | ||
|
||
class ContentTest { | ||
|
||
@ParameterizedTest | ||
@DisplayName("댓글 내용 유효한 값의 길이 검증 성공") | ||
@ValueSource(ints = {1, 10, 300}) | ||
void successValidateContentLength(int count) { | ||
String fill = "a"; | ||
Content content = new Content(fill.repeat(count)); | ||
assertThat(content).isNotNull(); | ||
} | ||
|
||
@ParameterizedTest | ||
@DisplayName("댓글 내용 유효하지 않은 값 예외 검증 성공") | ||
@ValueSource(ints = {301, 0}) | ||
void successValidateInvalidContentLength(int count) { | ||
String fill = "a"; | ||
assertThatThrownBy(() -> new Content(fill.repeat(count))) | ||
.isInstanceOf(BusinessException.class); | ||
} | ||
|
||
@ParameterizedTest | ||
@DisplayName("빈 내용과 null 값에 대한 예외 성공") | ||
@NullAndEmptySource | ||
void successValidateEmptyAndNullContent(String fill) { | ||
assertThatThrownBy(() -> new Content(fill)) | ||
.isInstanceOf(BusinessException.class); | ||
} | ||
} |
96 changes: 96 additions & 0 deletions
96
.../src/test/java/com/programmers/bucketback/domains/feed/implementation/FeedReaderTest.java
This file contains 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,96 @@ | ||
package com.programmers.bucketback.domains.feed.implementation; | ||
|
||
import static org.assertj.core.api.Assertions.*; | ||
import static org.mockito.BDDMockito.*; | ||
|
||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
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 com.programmers.bucketback.domains.bucket.domain.Bucket; | ||
import com.programmers.bucketback.domains.bucket.domain.BucketBuilder; | ||
import com.programmers.bucketback.domains.feed.FeedBuilder; | ||
import com.programmers.bucketback.domains.feed.domain.Feed; | ||
import com.programmers.bucketback.domains.feed.domain.FeedItem; | ||
import com.programmers.bucketback.domains.feed.model.FeedDetail; | ||
import com.programmers.bucketback.domains.feed.model.FeedInfo; | ||
import com.programmers.bucketback.domains.feed.model.FeedItemInfo; | ||
import com.programmers.bucketback.domains.feed.repository.FeedLikeRepository; | ||
import com.programmers.bucketback.domains.feed.repository.FeedRepository; | ||
import com.programmers.bucketback.domains.member.domain.Member; | ||
import com.programmers.bucketback.domains.member.domain.MemberBuilder; | ||
import com.programmers.bucketback.domains.member.implementation.MemberReader; | ||
import com.programmers.bucketback.domains.member.model.MemberInfo; | ||
|
||
@ExtendWith(MockitoExtension.class) | ||
class FeedReaderTest { | ||
|
||
@Mock | ||
private FeedRepository feedRepository; | ||
|
||
@Mock | ||
private FeedLikeRepository feedLikeRepository; | ||
|
||
@Mock | ||
private MemberReader memberReader; | ||
|
||
@InjectMocks | ||
private FeedReader feedReader; | ||
|
||
@Test | ||
@DisplayName("피드 상세 조회에 성공한다.") | ||
void successReadFeedDetail() { | ||
//given | ||
Long memberId = 1L; | ||
Member member = MemberBuilder.build(1L); | ||
Feed feed = FeedBuilder.build(); | ||
Long feedId = 1L; | ||
|
||
MemberInfo memberInfo = new MemberInfo(member.getId(), | ||
member.getNickname(), | ||
member.getProfileImage(), | ||
member.getLevel() | ||
); | ||
|
||
Bucket bucket = BucketBuilder.build(); | ||
List<FeedItem> feedItems = bucket.getBucketItems().stream() | ||
.map(bucketItem -> new FeedItem(bucketItem.getItem())) | ||
.toList(); | ||
feedItems.forEach(feed::addFeedItem); | ||
|
||
FeedInfo feedInfo = FeedInfo.builder() | ||
.id(feed.getId()) | ||
.hobby(feed.getHobby().getHobbyValue()) | ||
.content(feed.getFeedContent()) | ||
.bucketName(feed.getName()) | ||
.bucketBudget(feed.getBudget()) | ||
.totalPrice(feed.getTotalPrice()) | ||
.createdAt(feed.getCreatedAt()) | ||
.hasAdoptedComment(false) | ||
.isLiked(true) | ||
.likeCount(feed.getLikes().size()) | ||
.build(); | ||
|
||
List<FeedItemInfo> feedItemInfos = feedItems.stream() | ||
.map(FeedItemInfo::from) | ||
.toList(); | ||
|
||
given(memberReader.read(anyLong())).willReturn(member); | ||
given(feedLikeRepository.existsByMemberIdAndFeed(anyLong(), any())).willReturn(true); | ||
given(feedRepository.findById(anyLong())).willReturn(Optional.ofNullable(feed)); | ||
|
||
//when | ||
FeedDetail feedDetail = feedReader.readDetail(feedId, memberId); | ||
|
||
//then | ||
assertThat(feedDetail.feedInfo()).usingRecursiveComparison().isEqualTo(feedInfo); | ||
assertThat(feedDetail.memberInfo()).usingRecursiveComparison().isEqualTo(memberInfo); | ||
assertThat(feedDetail.feedItems()).usingRecursiveComparison().isEqualTo(feedItemInfos); | ||
} | ||
} |
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p1;
isNotNull 보다는 예외가 터지지 않는 것을 확인하는 메서드니까 doesNotThrowAnyException를 사용하는 것은 어떤가요??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
예외가 터지지 않는다 = 값이 정상적으로 잘 생성되었다. 이렇게 볼 수 있을 것 같아요
테스트를 예외 중심으로 바라봐는 시각과 생성 중심으로 바라보냐의 차이로 생각했을 때 저는 후자를 선택했습니다.