fix(recommendation): 추천 탭 배너 조회 조건을 보정한다
This commit is contained in:
+54
-11
@@ -8,6 +8,7 @@ import kr.co.vividnext.sodalive.content.comment.AudioContentComment
|
||||
import kr.co.vividnext.sodalive.content.like.AudioContentLike
|
||||
import kr.co.vividnext.sodalive.content.main.banner.AudioContentBanner
|
||||
import kr.co.vividnext.sodalive.content.main.banner.AudioContentBannerType
|
||||
import kr.co.vividnext.sodalive.content.main.tab.AudioContentMainTab
|
||||
import kr.co.vividnext.sodalive.content.theme.AudioContentTheme
|
||||
import kr.co.vividnext.sodalive.creator.admin.content.series.Series
|
||||
import kr.co.vividnext.sodalive.creator.admin.content.series.SeriesContent
|
||||
@@ -41,25 +42,58 @@ class DefaultAudioRecommendationQueryRepositoryTest @Autowired constructor(
|
||||
private val repository = DefaultAudioRecommendationQueryRepository(queryFactory, entityManager, "https://cdn.test")
|
||||
|
||||
@Test
|
||||
@DisplayName("배너는 홈 추천 배너와 같은 활성/탭/차단 정책과 CDN URL을 적용한다")
|
||||
fun shouldFindBannersWithHomeBannerPolicy() {
|
||||
@DisplayName("배너는 콘텐츠 추천 탭과 성인 조회 가능 여부를 적용한다")
|
||||
fun shouldFindBannersForContentRecommendationTabWithAdultVisibility() {
|
||||
val viewer = saveMember("viewer", MemberRole.USER)
|
||||
val visibleCreator = saveMember("visible-creator", MemberRole.CREATOR)
|
||||
val blockedCreator = saveMember("blocked-creator", MemberRole.CREATOR)
|
||||
val visibleBanner = saveBanner("visible.png", AudioContentBannerType.CREATOR, 1, creator = visibleCreator)
|
||||
val adultBanner = saveBanner("adult.png", AudioContentBannerType.LINK, 2, isAdult = true, link = "https://adult.test")
|
||||
saveBanner("inactive.png", AudioContentBannerType.LINK, 2, isActive = false, link = "https://inactive.test")
|
||||
saveBanner("blocked.png", AudioContentBannerType.CREATOR, 3, creator = blockedCreator)
|
||||
val recommendationTab = saveContentRecommendationTab()
|
||||
val visibleBanner = saveBanner(
|
||||
"visible.png",
|
||||
AudioContentBannerType.CREATOR,
|
||||
1,
|
||||
creator = visibleCreator,
|
||||
tab = recommendationTab
|
||||
)
|
||||
val adultBanner = saveBanner(
|
||||
"adult.png",
|
||||
AudioContentBannerType.LINK,
|
||||
2,
|
||||
isAdult = true,
|
||||
link = "https://adult.test",
|
||||
tab = recommendationTab
|
||||
)
|
||||
saveBanner(
|
||||
"inactive.png",
|
||||
AudioContentBannerType.LINK,
|
||||
3,
|
||||
isActive = false,
|
||||
link = "https://inactive.test",
|
||||
tab = recommendationTab
|
||||
)
|
||||
saveBanner(
|
||||
"blocked.png",
|
||||
AudioContentBannerType.CREATOR,
|
||||
4,
|
||||
creator = blockedCreator,
|
||||
tab = recommendationTab
|
||||
)
|
||||
saveBanner("home.png", AudioContentBannerType.LINK, 1, link = "https://home.test")
|
||||
saveBlock(viewer, blockedCreator)
|
||||
flushAndClear()
|
||||
|
||||
val banners = repository.findBanners(limit = 20, memberId = viewer.id, canViewAdultContent = false)
|
||||
val safeBanners = repository.findBanners(limit = 20, memberId = viewer.id, canViewAdultContent = false)
|
||||
val allBanners = repository.findBanners(limit = 20, memberId = viewer.id, canViewAdultContent = true)
|
||||
|
||||
assertEquals(
|
||||
listOf("https://cdn.test/${visibleBanner.thumbnailImage}", "https://cdn.test/${adultBanner.thumbnailImage}"),
|
||||
banners.map { it.imageUrl }
|
||||
listOf("https://cdn.test/${visibleBanner.thumbnailImage}"),
|
||||
safeBanners.map { it.imageUrl }
|
||||
)
|
||||
assertEquals(visibleCreator.id, banners.first().creatorId)
|
||||
assertEquals(
|
||||
listOf("https://cdn.test/${visibleBanner.thumbnailImage}", "https://cdn.test/${adultBanner.thumbnailImage}"),
|
||||
allBanners.map { it.imageUrl }
|
||||
)
|
||||
assertEquals(visibleCreator.id, safeBanners.first().creatorId)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -369,7 +403,8 @@ class DefaultAudioRecommendationQueryRepositoryTest @Autowired constructor(
|
||||
isActive: Boolean = true,
|
||||
isAdult: Boolean = false,
|
||||
creator: Member? = null,
|
||||
link: String? = null
|
||||
link: String? = null,
|
||||
tab: AudioContentMainTab? = null
|
||||
): AudioContentBanner {
|
||||
val banner = AudioContentBanner(
|
||||
thumbnailImage = thumbnailImage,
|
||||
@@ -380,10 +415,18 @@ class DefaultAudioRecommendationQueryRepositoryTest @Autowired constructor(
|
||||
)
|
||||
banner.creator = creator
|
||||
banner.link = link
|
||||
banner.tab = tab
|
||||
entityManager.persist(banner)
|
||||
return banner
|
||||
}
|
||||
|
||||
private fun saveContentRecommendationTab(): AudioContentMainTab {
|
||||
entityManager.createNativeQuery(
|
||||
"insert into audio_content_main_tab (id, title, is_active) values (2, '추천', true)"
|
||||
).executeUpdate()
|
||||
return entityManager.getReference(AudioContentMainTab::class.java, 2L)
|
||||
}
|
||||
|
||||
private fun saveSeries(
|
||||
title: String,
|
||||
creator: Member,
|
||||
|
||||
Reference in New Issue
Block a user