diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/donation/adapter/out/legacy/LegacyCreatorChannelDonationRankingAdapter.kt b/src/main/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/donation/adapter/out/legacy/LegacyCreatorChannelDonationRankingAdapter.kt new file mode 100644 index 00000000..58fb7722 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/donation/adapter/out/legacy/LegacyCreatorChannelDonationRankingAdapter.kt @@ -0,0 +1,33 @@ +package kr.co.vividnext.sodalive.v2.creator.channel.donation.adapter.out.legacy + +import kr.co.vividnext.sodalive.explorer.profile.CreatorDonationRankingService +import kr.co.vividnext.sodalive.member.DonationRankingPeriod +import kr.co.vividnext.sodalive.v2.creator.channel.donation.port.out.CreatorChannelDonationRankingPort +import kr.co.vividnext.sodalive.v2.creator.channel.donation.port.out.CreatorChannelDonationRankingRecord +import org.springframework.stereotype.Component + +@Component +class LegacyCreatorChannelDonationRankingAdapter( + private val creatorDonationRankingService: CreatorDonationRankingService +) : CreatorChannelDonationRankingPort { + override fun findTopRankings( + creatorId: Long, + period: DonationRankingPeriod, + withDonationCan: Boolean + ): List { + return creatorDonationRankingService.getMemberDonationRanking( + creatorId = creatorId, + offset = 0L, + limit = 8L, + withDonationCan = withDonationCan, + period = period + ).map { + CreatorChannelDonationRankingRecord( + userId = it.userId, + nickname = it.nickname, + profileImage = it.profileImage, + donationCan = it.donationCan + ) + } + } +} diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/donation/adapter/out/legacy/LegacyCreatorChannelDonationRankingAdapterTest.kt b/src/test/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/donation/adapter/out/legacy/LegacyCreatorChannelDonationRankingAdapterTest.kt new file mode 100644 index 00000000..147d770f --- /dev/null +++ b/src/test/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/donation/adapter/out/legacy/LegacyCreatorChannelDonationRankingAdapterTest.kt @@ -0,0 +1,87 @@ +package kr.co.vividnext.sodalive.v2.creator.channel.donation.adapter.out.legacy + +import kr.co.vividnext.sodalive.explorer.MemberDonationRankingResponse +import kr.co.vividnext.sodalive.explorer.profile.CreatorDonationRankingService +import kr.co.vividnext.sodalive.member.DonationRankingPeriod +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Test +import org.mockito.Mockito + +class LegacyCreatorChannelDonationRankingAdapterTest { + private val creatorDonationRankingService = Mockito.mock(CreatorDonationRankingService::class.java) + private val adapter = LegacyCreatorChannelDonationRankingAdapter(creatorDonationRankingService) + + @Test + @DisplayName("누적 기간 후원 랭킹 Top 8을 legacy service에 위임한다") + fun shouldDelegateCumulativeRankingRequestToLegacyService() { + Mockito.`when`( + creatorDonationRankingService.getMemberDonationRanking( + creatorId = 10L, + offset = 0L, + limit = 8L, + withDonationCan = false, + period = DonationRankingPeriod.CUMULATIVE + ) + ).thenReturn(emptyList()) + + val rankings = adapter.findTopRankings( + creatorId = 10L, + period = DonationRankingPeriod.CUMULATIVE, + withDonationCan = false + ) + + assertEquals(emptyList(), rankings) + Mockito.verify(creatorDonationRankingService).getMemberDonationRanking( + creatorId = 10L, + offset = 0L, + limit = 8L, + withDonationCan = false, + period = DonationRankingPeriod.CUMULATIVE + ) + Mockito.verifyNoMoreInteractions(creatorDonationRankingService) + } + + @Test + @DisplayName("주간 기간 후원 랭킹 Top 8을 legacy service에 위임하고 필드를 그대로 매핑한다") + fun shouldDelegateWeeklyRankingRequestAndMapFields() { + Mockito.`when`( + creatorDonationRankingService.getMemberDonationRanking( + creatorId = 20L, + offset = 0L, + limit = 8L, + withDonationCan = true, + period = DonationRankingPeriod.WEEKLY + ) + ).thenReturn( + listOf( + MemberDonationRankingResponse( + userId = 30L, + nickname = "donor", + profileImage = "https://cdn.test/profile.png", + donationCan = 1234 + ) + ) + ) + + val rankings = adapter.findTopRankings( + creatorId = 20L, + period = DonationRankingPeriod.WEEKLY, + withDonationCan = true + ) + + assertEquals(1, rankings.size) + assertEquals(30L, rankings[0].userId) + assertEquals("donor", rankings[0].nickname) + assertEquals("https://cdn.test/profile.png", rankings[0].profileImage) + assertEquals(1234, rankings[0].donationCan) + Mockito.verify(creatorDonationRankingService).getMemberDonationRanking( + creatorId = 20L, + offset = 0L, + limit = 8L, + withDonationCan = true, + period = DonationRankingPeriod.WEEKLY + ) + Mockito.verifyNoMoreInteractions(creatorDonationRankingService) + } +}