From b3dc6938fd90cdfc3b6ef8cf3a31b6bcce8968e7 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 14 Jul 2026 20:28:20 +0200 Subject: [PATCH] Updated on 2026-08-14 --- .../tokendetails/model/TokenDetailsModel.kt | 1 - .../UpdateZeroBalanceActionsTransformer.kt | 6 +-- ...UpdateZeroBalanceActionsTransformerTest.kt | 40 +++---------------- 3 files changed, 6 insertions(+), 41 deletions(-) diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt index 73fd82bed5..1075626032 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt @@ -376,7 +376,6 @@ internal class TokenDetailsModel @Inject constructor( redesignStateController.update( UpdateZeroBalanceActionsTransformer( actions = state.states, - networkSource = networkSource, clickIntents = this@TokenDetailsModel, ), ) diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/transformer/UpdateZeroBalanceActionsTransformer.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/transformer/UpdateZeroBalanceActionsTransformer.kt index 097379958e..5ec1dd92d2 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/transformer/UpdateZeroBalanceActionsTransformer.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/transformer/UpdateZeroBalanceActionsTransformer.kt @@ -1,6 +1,5 @@ package com.tangem.feature.tokendetails.presentation.tokendetails.state.transformer -import com.tangem.domain.models.StatusSource import com.tangem.domain.tokens.model.ScenarioUnavailabilityReason import com.tangem.domain.tokens.model.TokenActionsState import com.tangem.domain.tokens.model.isLoading @@ -11,7 +10,6 @@ import com.tangem.utils.transformer.Transformer internal class UpdateZeroBalanceActionsTransformer( private val actions: List, - private val networkSource: StatusSource, private val clickIntents: TokenDetailsClickIntents, ) : Transformer { @@ -29,7 +27,6 @@ internal class UpdateZeroBalanceActionsTransformer( receive = receiveAction?.toRow( onClick = clickIntents::onReceiveClick, onLongClick = { clickIntents.onCopyAddress() }, - forceLoading = networkSource == StatusSource.CACHE, ), ), ) @@ -38,11 +35,10 @@ internal class UpdateZeroBalanceActionsTransformer( private fun TokenActionsState.ActionState.toRow( onClick: (ScenarioUnavailabilityReason) -> Unit, onLongClick: (() -> Unit)? = null, - forceLoading: Boolean = false, ): ZeroBalanceActionsUM.Row { val reason = unavailabilityReason return ZeroBalanceActionsUM.Row( - isLoading = reason.isLoading || forceLoading, + isLoading = reason.isLoading, isEnabled = reason == ScenarioUnavailabilityReason.None, onClick = { onClick(reason) }, onLongClick = onLongClick, diff --git a/features/tokendetails/impl/src/test/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/transformer/UpdateZeroBalanceActionsTransformerTest.kt b/features/tokendetails/impl/src/test/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/transformer/UpdateZeroBalanceActionsTransformerTest.kt index d0649f4dac..c9ffb6737e 100644 --- a/features/tokendetails/impl/src/test/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/transformer/UpdateZeroBalanceActionsTransformerTest.kt +++ b/features/tokendetails/impl/src/test/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/transformer/UpdateZeroBalanceActionsTransformerTest.kt @@ -4,17 +4,11 @@ import com.google.common.truth.Truth.assertThat import com.tangem.core.ui.components.containers.pullToRefresh.PullToRefreshConfig import com.tangem.core.ui.components.marketprice.MarketPriceBlockState import com.tangem.core.ui.extensions.stringReference -import com.tangem.domain.models.StatusSource import com.tangem.domain.tokens.model.ScenarioUnavailabilityReason import com.tangem.domain.tokens.model.TokenActionsState import com.tangem.feature.tokendetails.presentation.tokendetails.model.TokenDetailsClickIntents -import com.tangem.feature.tokendetails.presentation.tokendetails.state.AddFundsUM -import com.tangem.feature.tokendetails.presentation.tokendetails.state.TokenDetailsBalanceBlockUM -import com.tangem.feature.tokendetails.presentation.tokendetails.state.TokenDetailsTopAppBarUM +import com.tangem.feature.tokendetails.presentation.tokendetails.state.* import com.tangem.feature.tokendetails.presentation.tokendetails.state.TokenDetailsTopAppBarUM.TitleState -import com.tangem.feature.tokendetails.presentation.tokendetails.state.TokenDetailsUM -import com.tangem.feature.tokendetails.presentation.tokendetails.state.TransferUM -import com.tangem.feature.tokendetails.presentation.tokendetails.state.ZeroBalanceActionsUM import io.mockk.mockk import io.mockk.verify import kotlinx.collections.immutable.persistentListOf @@ -193,37 +187,15 @@ class UpdateZeroBalanceActionsTransformerTest { } @Test - fun `GIVEN Receive with None reason AND networkSource is CACHE WHEN transform THEN only Receive is marked isLoading`() { - // GIVEN — networkSource=CACHE is the "still loading" signal for Receive (which has no - // Loading reason of its own). Buy/Swap rely on their own reasons and must not be flipped. + fun `GIVEN Receive action present WHEN transform THEN Receive is enabled and never loading`() { + // GIVEN — Receive only needs the local address (already available whenever the action is present), + // so it must be immediately usable and never show a spinner, regardless of network freshness. val transformer = createTransformer( actions = listOf( TokenActionsState.ActionState.Buy(ScenarioUnavailabilityReason.None), - TokenActionsState.ActionState.Swap(ScenarioUnavailabilityReason.None, false), + TokenActionsState.ActionState.Swap(ScenarioUnavailabilityReason.DataLoading, false), TokenActionsState.ActionState.Receive(ScenarioUnavailabilityReason.None), ), - networkSource = StatusSource.CACHE, - ) - - // WHEN - val result = transformer.transform(initialState()) - - // THEN - val content = result.zeroBalanceActionsUM as ZeroBalanceActionsUM.Content - assertThat(content.receive?.isLoading).isTrue() - assertThat(content.receive?.isEnabled).isTrue() - assertThat(content.buy?.isLoading).isFalse() - assertThat(content.swap?.isLoading).isFalse() - } - - @Test - fun `GIVEN Receive with None reason AND networkSource is ONLY_CACHE WHEN transform THEN Receive is not loading`() { - // GIVEN — ONLY_CACHE is the terminal "refresh failed" state; Receive drops the spinner. - val transformer = createTransformer( - actions = listOf( - TokenActionsState.ActionState.Receive(ScenarioUnavailabilityReason.None), - ), - networkSource = StatusSource.ONLY_CACHE, ) // WHEN @@ -251,10 +223,8 @@ class UpdateZeroBalanceActionsTransformerTest { private fun createTransformer( actions: List, - networkSource: StatusSource = StatusSource.ACTUAL, ) = UpdateZeroBalanceActionsTransformer( actions = actions, - networkSource = networkSource, clickIntents = clickIntents, )