feat(creator): 채널 홈 오디오 주문 상태를 조회한다
This commit is contained in:
@@ -8,6 +8,8 @@ import kr.co.vividnext.sodalive.chat.character.ChatCharacter
|
||||
import kr.co.vividnext.sodalive.configs.QueryDslConfig
|
||||
import kr.co.vividnext.sodalive.content.AudioContent
|
||||
import kr.co.vividnext.sodalive.content.ContentType
|
||||
import kr.co.vividnext.sodalive.content.order.Order
|
||||
import kr.co.vividnext.sodalive.content.order.OrderType
|
||||
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
|
||||
@@ -526,6 +528,44 @@ class DefaultCreatorChannelHomeQueryRepositoryTest @Autowired constructor(
|
||||
assertTrue(records.last().isPointAvailable)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("최신 오디오와 오디오 목록은 조회자의 유효한 소장/대여 주문 상태를 함께 반환한다")
|
||||
fun shouldFindAudioContentOwnershipFlagsByViewerOrders() {
|
||||
val now = LocalDateTime.of(2026, 6, 12, 12, 0)
|
||||
val viewer = saveMember("audio-order-viewer", MemberRole.USER)
|
||||
val creator = saveMember("audio-order-creator", MemberRole.CREATOR)
|
||||
val keepAndRental = saveAudioContent(creator, now.minusDays(3), isAdult = false)
|
||||
val rentalOnly = saveAudioContent(creator, now.minusDays(2), isAdult = false)
|
||||
val keepOnly = saveAudioContent(creator, now.minusDays(1), isAdult = false)
|
||||
saveOrder(viewer, creator, keepOnly, OrderType.KEEP)
|
||||
saveOrder(viewer, creator, rentalOnly, OrderType.RENTAL, endDate = now.plusDays(1))
|
||||
saveOrder(viewer, creator, keepAndRental, OrderType.KEEP)
|
||||
saveOrder(viewer, creator, keepAndRental, OrderType.RENTAL, endDate = now.plusDays(1))
|
||||
flushAndClear()
|
||||
|
||||
val latestRecord = repository.findLatestAudioContent(
|
||||
creator.id!!,
|
||||
now,
|
||||
canViewAdultContent = false,
|
||||
viewerId = viewer.id!!
|
||||
)
|
||||
val records = repository.findAudioContents(
|
||||
creator.id!!,
|
||||
now,
|
||||
latestAudioContentId = latestRecord!!.audioContentId,
|
||||
canViewAdultContent = false,
|
||||
viewerId = viewer.id!!,
|
||||
limit = 9
|
||||
)
|
||||
|
||||
assertEquals(keepOnly.id, latestRecord.audioContentId)
|
||||
assertTrue(latestRecord.isOwned)
|
||||
assertFalse(latestRecord.isRented)
|
||||
assertEquals(listOf(rentalOnly.id, keepAndRental.id), records.map { it.audioContentId })
|
||||
assertEquals(listOf(false, true), records.map { it.isOwned })
|
||||
assertEquals(listOf(true, true), records.map { it.isRented })
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("오디오 목록은 releaseDate가 null인 콘텐츠를 제외한다")
|
||||
fun shouldExcludeNullReleaseDateAudioContent() {
|
||||
@@ -1441,6 +1481,23 @@ class DefaultCreatorChannelHomeQueryRepositoryTest @Autowired constructor(
|
||||
return useCan
|
||||
}
|
||||
|
||||
private fun saveOrder(
|
||||
member: Member,
|
||||
creator: Member,
|
||||
content: AudioContent,
|
||||
type: OrderType,
|
||||
isActive: Boolean = true,
|
||||
endDate: LocalDateTime? = null
|
||||
): Order {
|
||||
val order = Order(type = type, isActive = isActive)
|
||||
order.member = member
|
||||
order.creator = creator
|
||||
order.audioContent = content
|
||||
endDate?.let { order.endDate = it }
|
||||
entityManager.persist(order)
|
||||
return order
|
||||
}
|
||||
|
||||
private fun saveCheers(
|
||||
member: Member,
|
||||
creator: Member,
|
||||
|
||||
Reference in New Issue
Block a user