test(home): 팔로잉 최근 소식 E2E를 확장한다
This commit is contained in:
@@ -3,6 +3,9 @@ package kr.co.vividnext.sodalive.v2.api.home.following.adapter.`in`.web
|
|||||||
import kr.co.vividnext.sodalive.common.CountryContext
|
import kr.co.vividnext.sodalive.common.CountryContext
|
||||||
import kr.co.vividnext.sodalive.content.AudioContent
|
import kr.co.vividnext.sodalive.content.AudioContent
|
||||||
import kr.co.vividnext.sodalive.content.theme.AudioContentTheme
|
import kr.co.vividnext.sodalive.content.theme.AudioContentTheme
|
||||||
|
import kr.co.vividnext.sodalive.explorer.profile.creatorCommunity.CreatorCommunity
|
||||||
|
import kr.co.vividnext.sodalive.explorer.profile.creatorCommunity.comment.CreatorCommunityComment
|
||||||
|
import kr.co.vividnext.sodalive.explorer.profile.creatorCommunity.like.CreatorCommunityLike
|
||||||
import kr.co.vividnext.sodalive.live.room.LiveRoom
|
import kr.co.vividnext.sodalive.live.room.LiveRoom
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import kr.co.vividnext.sodalive.member.MemberAdapter
|
import kr.co.vividnext.sodalive.member.MemberAdapter
|
||||||
@@ -87,10 +90,34 @@ class HomeFollowingEndToEndTest @Autowired constructor(
|
|||||||
.andExpect(jsonPath("$.data.monthlySchedules[0].scheduleId").value("LIVE:${fixture.liveId}"))
|
.andExpect(jsonPath("$.data.monthlySchedules[0].scheduleId").value("LIVE:${fixture.liveId}"))
|
||||||
.andExpect(jsonPath("$.data.monthlySchedules[1].scheduleId").value("AUDIO:${fixture.audioId}"))
|
.andExpect(jsonPath("$.data.monthlySchedules[1].scheduleId").value("AUDIO:${fixture.audioId}"))
|
||||||
.andExpect(jsonPath("$.data.recentNews[0].newsId").value(fixture.rankedNewsId.toString()))
|
.andExpect(jsonPath("$.data.recentNews[0].newsId").value(fixture.rankedNewsId.toString()))
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[0].type").value("CREATOR_RANKING"))
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[0].visibleFromAtUtc").exists())
|
||||||
.andExpect(jsonPath("$.data.recentNews[0].creatorId").doesNotExist())
|
.andExpect(jsonPath("$.data.recentNews[0].creatorId").doesNotExist())
|
||||||
.andExpect(jsonPath("$.data.recentNews[0].ranking").doesNotExist())
|
.andExpect(jsonPath("$.data.recentNews[0].rank").doesNotExist())
|
||||||
.andExpect(jsonPath("$.data.recentNews[0].rank").value(7))
|
.andExpect(jsonPath("$.data.recentNews[0].creatorRanking.rank").value(7))
|
||||||
.andExpect(jsonPath("$.data.recentNews[1].rank").value(nullValue()))
|
.andExpect(jsonPath("$.data.recentNews[0].creatorRanking.creatorId").value(fixture.creatorId))
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[0].audioContent").value(nullValue()))
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[0].communityPost").value(nullValue()))
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[1].type").value("COMMUNITY_POST"))
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[1].communityPost.postId").value(fixture.freePostId))
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[1].communityPost.creatorProfileImage").value("https://cdn.test/creator.png"))
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[1].communityPost.creatorNickname").value("home-following-creator"))
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[1].communityPost.imageUrl").value("https://cdn.test/community/free.png"))
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[1].communityPost.content").value("free community body"))
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[1].communityPost.createdAt").exists())
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[1].communityPost.likeCount").value(1))
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[1].communityPost.commentCount").value(1))
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[1].creatorRanking").value(nullValue()))
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[2].type").value("AUDIO_CONTENT"))
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[2].audioContent.contentId").value(fixture.audioId))
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[2].audioContent.title").value("home-following-audio"))
|
||||||
|
.andExpect(
|
||||||
|
jsonPath("$.data.recentNews[2].audioContent.contentImageUrl")
|
||||||
|
.value("https://cdn.test/audio/home-following.png")
|
||||||
|
)
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[2].audioContent.releaseDate").doesNotExist())
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[2].communityPost").value(nullValue()))
|
||||||
|
.andExpect(jsonPath("$.data.recentNews[?(@.communityPost.postId == ${fixture.paidPostId})]").isEmpty)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createFixture(): Fixture {
|
private fun createFixture(): Fixture {
|
||||||
@@ -110,7 +137,36 @@ class HomeFollowingEndToEndTest @Autowired constructor(
|
|||||||
val live = saveLiveRoom(creator, scheduleBaseUtc.plusHours(1), channelName = "on-air")
|
val live = saveLiveRoom(creator, scheduleBaseUtc.plusHours(1), channelName = "on-air")
|
||||||
val theme = saveTheme()
|
val theme = saveTheme()
|
||||||
val audio = saveAudioContent(creator, theme, scheduleBaseUtc.plusHours(2))
|
val audio = saveAudioContent(creator, theme, scheduleBaseUtc.plusHours(2))
|
||||||
val oldNews = saveNews(viewer.id!!, creator.id!!, "old-news", now.minusHours(2), rank = null)
|
audio.coverImage = "audio/home-following.png"
|
||||||
|
val freePost = saveCommunityPost(creator, "free community body", price = 0, imagePath = "community/free.png")
|
||||||
|
val paidPost = saveCommunityPost(creator, "paid community body", price = 10, imagePath = "community/paid.png")
|
||||||
|
saveCommunityLike(viewer, freePost, isActive = true)
|
||||||
|
saveCommunityComment(viewer, freePost, isActive = true)
|
||||||
|
saveNews(viewer.id!!, creator.id!!, "old-news", now.minusHours(2), rank = null)
|
||||||
|
val audioNews = saveNews(
|
||||||
|
memberId = viewer.id!!,
|
||||||
|
creatorId = creator.id!!,
|
||||||
|
sourceKey = "audio-news",
|
||||||
|
visibleFromAtUtc = now.minusHours(3),
|
||||||
|
newsType = FollowingNewsType.AUDIO_CONTENT,
|
||||||
|
targetId = audio.id!!
|
||||||
|
)
|
||||||
|
val communityNews = saveNews(
|
||||||
|
memberId = viewer.id!!,
|
||||||
|
creatorId = creator.id!!,
|
||||||
|
sourceKey = "free-community-news",
|
||||||
|
visibleFromAtUtc = now.minusHours(2),
|
||||||
|
newsType = FollowingNewsType.COMMUNITY_POST,
|
||||||
|
targetId = freePost.id!!
|
||||||
|
)
|
||||||
|
saveNews(
|
||||||
|
memberId = viewer.id!!,
|
||||||
|
creatorId = creator.id!!,
|
||||||
|
sourceKey = "paid-community-news",
|
||||||
|
visibleFromAtUtc = now.minusMinutes(30),
|
||||||
|
newsType = FollowingNewsType.COMMUNITY_POST,
|
||||||
|
targetId = paidPost.id!!
|
||||||
|
)
|
||||||
val rankedNews = saveNews(viewer.id!!, creator.id!!, "ranked-news", now.minusHours(1), rank = 7)
|
val rankedNews = saveNews(viewer.id!!, creator.id!!, "ranked-news", now.minusHours(1), rank = 7)
|
||||||
val chatRoom = saveDmChatRoom(viewer, creator, now.minusMinutes(10))
|
val chatRoom = saveDmChatRoom(viewer, creator, now.minusMinutes(10))
|
||||||
entityManager.flush()
|
entityManager.flush()
|
||||||
@@ -123,7 +179,10 @@ class HomeFollowingEndToEndTest @Autowired constructor(
|
|||||||
audioId = audio.id!!,
|
audioId = audio.id!!,
|
||||||
chatRoomId = chatRoom.id!!,
|
chatRoomId = chatRoom.id!!,
|
||||||
rankedNewsId = rankedNews.id!!,
|
rankedNewsId = rankedNews.id!!,
|
||||||
oldNewsId = oldNews.id!!
|
audioNewsId = audioNews.id!!,
|
||||||
|
communityNewsId = communityNews.id!!,
|
||||||
|
freePostId = freePost.id!!,
|
||||||
|
paidPostId = paidPost.id!!
|
||||||
)
|
)
|
||||||
}!!
|
}!!
|
||||||
}
|
}
|
||||||
@@ -192,14 +251,16 @@ class HomeFollowingEndToEndTest @Autowired constructor(
|
|||||||
creatorId: Long,
|
creatorId: Long,
|
||||||
sourceKey: String,
|
sourceKey: String,
|
||||||
visibleFromAtUtc: LocalDateTime,
|
visibleFromAtUtc: LocalDateTime,
|
||||||
rank: Int?
|
rank: Int? = null,
|
||||||
|
newsType: FollowingNewsType = FollowingNewsType.CREATOR_RANKING,
|
||||||
|
targetId: Long = creatorId
|
||||||
): HomeFollowingNewsInbox {
|
): HomeFollowingNewsInbox {
|
||||||
val news = HomeFollowingNewsInbox(
|
val news = HomeFollowingNewsInbox(
|
||||||
memberId = memberId,
|
memberId = memberId,
|
||||||
creatorId = creatorId,
|
creatorId = creatorId,
|
||||||
newsType = FollowingNewsType.CREATOR_RANKING,
|
newsType = newsType,
|
||||||
sourceKey = sourceKey,
|
sourceKey = sourceKey,
|
||||||
targetId = creatorId,
|
targetId = targetId,
|
||||||
occurredAtUtc = visibleFromAtUtc.minusMinutes(30),
|
occurredAtUtc = visibleFromAtUtc.minusMinutes(30),
|
||||||
visibleFromAtUtc = visibleFromAtUtc,
|
visibleFromAtUtc = visibleFromAtUtc,
|
||||||
creatorNickname = "home-following-creator",
|
creatorNickname = "home-following-creator",
|
||||||
@@ -214,6 +275,39 @@ class HomeFollowingEndToEndTest @Autowired constructor(
|
|||||||
return news
|
return news
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun saveCommunityPost(creator: Member, content: String, price: Int, imagePath: String): CreatorCommunity {
|
||||||
|
val post = CreatorCommunity(
|
||||||
|
content = content,
|
||||||
|
price = price,
|
||||||
|
isCommentAvailable = true,
|
||||||
|
isAdult = false,
|
||||||
|
imagePath = imagePath,
|
||||||
|
isActive = true
|
||||||
|
).apply {
|
||||||
|
member = creator
|
||||||
|
}
|
||||||
|
entityManager.persist(post)
|
||||||
|
return post
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun saveCommunityLike(member: Member, post: CreatorCommunity, isActive: Boolean): CreatorCommunityLike {
|
||||||
|
val like = CreatorCommunityLike(isActive = isActive).apply {
|
||||||
|
this.member = member
|
||||||
|
creatorCommunity = post
|
||||||
|
}
|
||||||
|
entityManager.persist(like)
|
||||||
|
return like
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun saveCommunityComment(member: Member, post: CreatorCommunity, isActive: Boolean): CreatorCommunityComment {
|
||||||
|
val comment = CreatorCommunityComment(comment = "comment", isActive = isActive).apply {
|
||||||
|
this.member = member
|
||||||
|
creatorCommunity = post
|
||||||
|
}
|
||||||
|
entityManager.persist(comment)
|
||||||
|
return comment
|
||||||
|
}
|
||||||
|
|
||||||
private fun saveDmChatRoom(viewer: Member, creator: Member, messageCreatedAt: LocalDateTime): UserCreatorChatRoom {
|
private fun saveDmChatRoom(viewer: Member, creator: Member, messageCreatedAt: LocalDateTime): UserCreatorChatRoom {
|
||||||
val room = UserCreatorChatRoom()
|
val room = UserCreatorChatRoom()
|
||||||
entityManager.persist(room)
|
entityManager.persist(room)
|
||||||
@@ -241,6 +335,9 @@ class HomeFollowingEndToEndTest @Autowired constructor(
|
|||||||
val audioId: Long,
|
val audioId: Long,
|
||||||
val chatRoomId: Long,
|
val chatRoomId: Long,
|
||||||
val rankedNewsId: Long,
|
val rankedNewsId: Long,
|
||||||
val oldNewsId: Long
|
val audioNewsId: Long,
|
||||||
|
val communityNewsId: Long,
|
||||||
|
val freePostId: Long,
|
||||||
|
val paidPostId: Long
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user