feat(creator): 후원 empty 랭킹 상태를 유지한다

This commit is contained in:
2026-06-22 23:55:36 +09:00
parent 092dff2a9d
commit 933e118c36
2 changed files with 10 additions and 6 deletions

View File

@@ -151,10 +151,11 @@ class CreatorChannelDonationViewModel(
val data = response.data val data = response.data
if (response.success && data != null) { if (response.success && data != null) {
val donations = data.toDonationUiModels() val donations = data.toDonationUiModels()
val rankings = data.toDonationRankingUiModels()
_donationStateLiveData.value = if (donations.isEmpty() || data.donationCount == 0) { _donationStateLiveData.value = if (donations.isEmpty() || data.donationCount == 0) {
CreatorChannelDonationUiState.Empty(data.donationCount, isOwner) CreatorChannelDonationUiState.Empty(data.donationCount, rankings, isOwner)
} else { } else {
data.toContentState(donations) data.toContentState(rankings, donations)
} }
} else { } else {
_donationStateLiveData.value = CreatorChannelDonationUiState.Error(response.message) _donationStateLiveData.value = CreatorChannelDonationUiState.Error(response.message)
@@ -205,10 +206,11 @@ class CreatorChannelDonationViewModel(
} }
private fun CreatorChannelDonationTabResponse.toContentState( private fun CreatorChannelDonationTabResponse.toContentState(
rankings: List<CreatorChannelDonationRankingUiModel>,
donations: List<CreatorChannelDonationUiModel> donations: List<CreatorChannelDonationUiModel>
) = CreatorChannelDonationUiState.Content( ) = CreatorChannelDonationUiState.Content(
donationCount = donationCount, donationCount = donationCount,
rankings = toDonationRankingUiModels(), rankings = rankings,
donations = donations, donations = donations,
page = page, page = page,
size = size, size = size,
@@ -234,6 +236,7 @@ sealed interface CreatorChannelDonationUiState {
data object Loading : CreatorChannelDonationUiState data object Loading : CreatorChannelDonationUiState
data class Empty( data class Empty(
val donationCount: Int, val donationCount: Int,
val rankings: List<CreatorChannelDonationRankingUiModel>,
val isOwner: Boolean, val isOwner: Boolean,
val actionToastMessage: String? = null val actionToastMessage: String? = null
) : CreatorChannelDonationUiState ) : CreatorChannelDonationUiState

View File

@@ -20,7 +20,6 @@ import kr.co.vividnext.sodalive.v2.creator.channel.donation.data.CreatorChannelD
import kr.co.vividnext.sodalive.v2.creator.channel.donation.data.MemberDonationRankingResponse import kr.co.vividnext.sodalive.v2.creator.channel.donation.data.MemberDonationRankingResponse
import org.junit.After import org.junit.After
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
@@ -80,15 +79,17 @@ class CreatorChannelDonationViewModelTest {
val state = viewModel.donationStateLiveData.requireValue() as CreatorChannelDonationUiState.Empty val state = viewModel.donationStateLiveData.requireValue() as CreatorChannelDonationUiState.Empty
assertEquals(0, state.donationCount) assertEquals(0, state.donationCount)
assertEquals(listOf(10L), state.rankings.map { it.userId })
} }
@Test @Test
fun `표시 가능한 donations가 없으면 Empty 상태가 된다`() { fun `표시 가능한 donations가 없으면 랭킹을 유지한 Empty 상태가 된다`() {
stubGetDonations(response = Single.just(ApiResponse(true, donationResponse(ids = emptyList()), null))) stubGetDonations(response = Single.just(ApiResponse(true, donationResponse(ids = emptyList()), null)))
viewModel.loadDonations(100L, isOwner = false) viewModel.loadDonations(100L, isOwner = false)
assertTrue(viewModel.donationStateLiveData.requireValue() is CreatorChannelDonationUiState.Empty) val state = viewModel.donationStateLiveData.requireValue() as CreatorChannelDonationUiState.Empty
assertEquals(listOf(10L), state.rankings.map { it.userId })
} }
@Test @Test