feat(content-ranking): 오디오 랭킹 facade를 추가한다
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
package kr.co.vividnext.sodalive.v2.api.content.ranking.application
|
||||
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import kr.co.vividnext.sodalive.v2.api.content.ranking.dto.AudioRankingResponse
|
||||
import kr.co.vividnext.sodalive.v2.content.ranking.application.AudioRankingQueryService
|
||||
import kr.co.vividnext.sodalive.v2.content.ranking.domain.AudioRankingType
|
||||
import org.springframework.stereotype.Component
|
||||
|
||||
@Component
|
||||
class AudioRankingFacade(
|
||||
private val queryService: AudioRankingQueryService
|
||||
) {
|
||||
fun getRankings(type: AudioRankingType, member: Member?): AudioRankingResponse {
|
||||
return AudioRankingResponse.from(queryService.getRankings(type, member))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package kr.co.vividnext.sodalive.v2.content.ranking.application
|
||||
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import kr.co.vividnext.sodalive.v2.content.ranking.domain.AudioRanking
|
||||
import kr.co.vividnext.sodalive.v2.content.ranking.domain.AudioRankingType
|
||||
import org.springframework.stereotype.Service
|
||||
|
||||
@Service
|
||||
class AudioRankingQueryService {
|
||||
fun getRankings(type: AudioRankingType, member: Member?): AudioRanking {
|
||||
return AudioRanking(
|
||||
showRankChange = false,
|
||||
type = type,
|
||||
items = emptyList()
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package kr.co.vividnext.sodalive.v2.api.content.ranking.application
|
||||
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import kr.co.vividnext.sodalive.v2.content.ranking.application.AudioRankingQueryService
|
||||
import kr.co.vividnext.sodalive.v2.content.ranking.domain.AudioRanking
|
||||
import kr.co.vividnext.sodalive.v2.content.ranking.domain.AudioRankingItem
|
||||
import kr.co.vividnext.sodalive.v2.content.ranking.domain.AudioRankingType
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.mockito.Mockito
|
||||
|
||||
class AudioRankingFacadeTest {
|
||||
private val queryService = Mockito.mock(AudioRankingQueryService::class.java)
|
||||
private val facade = AudioRankingFacade(queryService)
|
||||
|
||||
@Test
|
||||
@DisplayName("facade는 랭킹 타입과 회원을 쿼리 서비스에 그대로 전달하고 공개 응답으로 변환한다")
|
||||
fun shouldDelegateTypeAndMemberAndConvertDomainRankingToResponse() {
|
||||
val member = Mockito.mock(Member::class.java)
|
||||
val ranking = AudioRanking(
|
||||
showRankChange = true,
|
||||
type = AudioRankingType.RISING,
|
||||
items = listOf(
|
||||
AudioRankingItem(
|
||||
contentId = 1L,
|
||||
title = "audio",
|
||||
creatorNickname = "creator",
|
||||
rank = 1,
|
||||
rankChange = 2,
|
||||
isNew = false,
|
||||
coverImageUrl = "https://cdn.test/audio.png"
|
||||
)
|
||||
)
|
||||
)
|
||||
Mockito.doReturn(ranking).`when`(queryService).getRankings(AudioRankingType.RISING, member)
|
||||
|
||||
val response = facade.getRankings(AudioRankingType.RISING, member)
|
||||
|
||||
Mockito.verify(queryService).getRankings(AudioRankingType.RISING, member)
|
||||
assertEquals(true, response.showRankChange)
|
||||
assertEquals(AudioRankingType.RISING, response.type)
|
||||
assertEquals(1, response.items.size)
|
||||
assertEquals(1L, response.items[0].contentId)
|
||||
assertEquals("audio", response.items[0].title)
|
||||
assertEquals("creator", response.items[0].creatorNickname)
|
||||
assertEquals(1, response.items[0].rank)
|
||||
assertEquals(2, response.items[0].rankChange)
|
||||
assertEquals(false, response.items[0].isNew)
|
||||
assertEquals("https://cdn.test/audio.png", response.items[0].coverImageUrl)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user