fix(creator): 후원 empty 실패 메시지를 표시한다
This commit is contained in:
@@ -123,10 +123,19 @@ class CreatorChannelDonationViewModel(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun consumeActionToastMessage() {
|
fun consumeActionToastMessage() {
|
||||||
val content = _donationStateLiveData.value as? CreatorChannelDonationUiState.Content ?: return
|
when (val state = _donationStateLiveData.value) {
|
||||||
if (content.actionToastMessage == null) return
|
is CreatorChannelDonationUiState.Empty -> {
|
||||||
|
if (state.actionToastMessage != null) {
|
||||||
_donationStateLiveData.value = content.copy(actionToastMessage = null)
|
_donationStateLiveData.value = state.copy(actionToastMessage = null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
is CreatorChannelDonationUiState.Content -> {
|
||||||
|
if (state.actionToastMessage != null) {
|
||||||
|
_donationStateLiveData.value = state.copy(actionToastMessage = null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else -> Unit
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun consumeDonationSuccessEvent(): Boolean {
|
fun consumeDonationSuccessEvent(): Boolean {
|
||||||
@@ -188,8 +197,11 @@ class CreatorChannelDonationViewModel(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setActionToastMessage(message: String?) {
|
private fun setActionToastMessage(message: String?) {
|
||||||
val content = _donationStateLiveData.value as? CreatorChannelDonationUiState.Content ?: return
|
when (val state = _donationStateLiveData.value) {
|
||||||
_donationStateLiveData.value = content.copy(actionToastMessage = message)
|
is CreatorChannelDonationUiState.Empty -> _donationStateLiveData.value = state.copy(actionToastMessage = message)
|
||||||
|
is CreatorChannelDonationUiState.Content -> _donationStateLiveData.value = state.copy(actionToastMessage = message)
|
||||||
|
else -> Unit
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun CreatorChannelDonationTabResponse.toContentState(
|
private fun CreatorChannelDonationTabResponse.toContentState(
|
||||||
@@ -220,7 +232,11 @@ class CreatorChannelDonationViewModel(
|
|||||||
|
|
||||||
sealed interface CreatorChannelDonationUiState {
|
sealed interface CreatorChannelDonationUiState {
|
||||||
data object Loading : CreatorChannelDonationUiState
|
data object Loading : CreatorChannelDonationUiState
|
||||||
data class Empty(val donationCount: Int, val isOwner: Boolean) : CreatorChannelDonationUiState
|
data class Empty(
|
||||||
|
val donationCount: Int,
|
||||||
|
val isOwner: Boolean,
|
||||||
|
val actionToastMessage: String? = null
|
||||||
|
) : CreatorChannelDonationUiState
|
||||||
data class Error(val message: String?) : CreatorChannelDonationUiState
|
data class Error(val message: String?) : CreatorChannelDonationUiState
|
||||||
data class Content(
|
data class Content(
|
||||||
val donationCount: Int,
|
val donationCount: Int,
|
||||||
|
|||||||
@@ -133,6 +133,25 @@ class CreatorChannelDonationViewModelTest {
|
|||||||
assertEquals(0, SharedPreferenceManager.can)
|
assertEquals(0, SharedPreferenceManager.can)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `Empty 상태에서 채널 후원 실패는 action toast message를 emit하고 consume한다`() {
|
||||||
|
stubGetDonations(response = Single.just(ApiResponse(true, donationResponse(donationCount = 0, ids = emptyList()), null)))
|
||||||
|
whenever(repository.postChannelDonation(100L, 50, false, "응원", "Bearer test-token")).thenReturn(
|
||||||
|
Single.just(ApiResponse(false, Any(), "후원 실패"))
|
||||||
|
)
|
||||||
|
viewModel.loadDonations(100L, isOwner = false)
|
||||||
|
|
||||||
|
viewModel.postChannelDonation(can = 50, isSecret = false, message = "응원")
|
||||||
|
|
||||||
|
val state = viewModel.donationStateLiveData.requireValue() as CreatorChannelDonationUiState.Empty
|
||||||
|
assertEquals("후원 실패", state.actionToastMessage)
|
||||||
|
|
||||||
|
viewModel.consumeActionToastMessage()
|
||||||
|
|
||||||
|
val consumed = viewModel.donationStateLiveData.requireValue() as CreatorChannelDonationUiState.Empty
|
||||||
|
assertEquals(null, consumed.actionToastMessage)
|
||||||
|
}
|
||||||
|
|
||||||
private fun stubGetDonations(
|
private fun stubGetDonations(
|
||||||
page: Int = 0,
|
page: Int = 0,
|
||||||
response: Single<ApiResponse<CreatorChannelDonationTabResponse>>
|
response: Single<ApiResponse<CreatorChannelDonationTabResponse>>
|
||||||
|
|||||||
Reference in New Issue
Block a user