Updated on 2026-08-14

This commit is contained in:
Tangem 2026-04-27 21:10:26 +04:00
parent b004f8df6b
commit 1964b3cfad
22 changed files with 204 additions and 173 deletions

View file

@ -8,6 +8,7 @@ import com.arkivanov.decompose.router.slot.dismiss
import com.tangem.blockchain.common.TransactionData
import com.tangem.blockchain.common.transaction.Fee
import com.tangem.blockchain.common.transaction.TransactionFee
import com.tangem.common.TangemBlogUrlBuilder
import com.tangem.common.getValidatorsCount
import com.tangem.common.routing.AppRouter
import com.tangem.common.ui.amountScreen.converters.AmountReduceByTransformer.ReduceByData
@ -95,7 +96,6 @@ import com.tangem.features.staking.impl.presentation.state.utils.isSingleAction
import com.tangem.features.staking.impl.presentation.state.utils.withStubUnstakeAction
import com.tangem.lib.crypto.BlockchainUtils.isTon
import com.tangem.utils.Provider
import com.tangem.utils.TangemBlogUrlBuilder.RESOURCE_TO_LEARN_ABOUT_APPROVING_IN_SWAP
import com.tangem.utils.coroutines.*
import com.tangem.utils.extensions.isSingleItem
import com.tangem.utils.extensions.orZero
@ -603,7 +603,9 @@ internal class StakingModel @Inject constructor(
override fun onInitialInfoBannerClick() {
analyticsEventHandler.send(StakingAnalyticsEvent.WhatIsStaking())
innerRouter.openUrl(WHAT_IS_STAKING_ARTICLE_URL)
modelScope.launch {
innerRouter.openUrl(TangemBlogUrlBuilder.build(TangemBlogUrlBuilder.Post.HowToStake))
}
}
override fun onInfoClick(infoType: InfoType) {
@ -1100,7 +1102,9 @@ internal class StakingModel @Inject constructor(
}
override fun onOpenLearnMoreAboutApproveClick() {
urlOpener.openUrl(RESOURCE_TO_LEARN_ABOUT_APPROVING_IN_SWAP)
modelScope.launch {
urlOpener.openUrl(TangemBlogUrlBuilder.build(TangemBlogUrlBuilder.Post.GiveRevokePermission))
}
}
override fun onActivateTonAccountNotificationClick() {
@ -1495,7 +1499,6 @@ internal class StakingModel @Inject constructor(
}
private companion object {
const val WHAT_IS_STAKING_ARTICLE_URL = "https://tangem.com/en/blog/post/how-to-stake-cryptocurrency/"
const val ALLOWANCE_UPDATE_DELAY = 10_000L
}
}

View file

@ -1,6 +1,7 @@
package com.tangem.features.staking.impl.presentation.model
import arrow.core.Either
import com.tangem.common.TangemBlogUrlBuilder
import com.tangem.core.analytics.models.Basic
import com.tangem.core.ui.haptic.TangemHapticEffect
import com.tangem.core.ui.message.DialogMessage
@ -300,21 +301,24 @@ internal class StakingModelNavigationTest : StakingModelTestBase() {
@Test
fun `WHEN onInitialInfoBannerClick THEN analytics sent and url opened`() = runTest {
val expectedUrl = "https://tangem.com/blog/post/how-to-stake-cryptocurrency/?utm_source=tangem-app"
mockkObject(TangemBlogUrlBuilder)
coEvery { TangemBlogUrlBuilder.build(TangemBlogUrlBuilder.Post.HowToStake) } returns expectedUrl
every { innerRouter.openUrl(any()) } just Runs
val model = createModel(testScope = this)
advanceUntilIdle()
model.onInitialInfoBannerClick()
advanceUntilIdle()
verify {
analyticsEventHandler.send(match { it is StakingAnalyticsEvent.WhatIsStaking })
}
verify {
innerRouter.openUrl("https://tangem.com/en/blog/post/how-to-stake-cryptocurrency/")
}
verify { innerRouter.openUrl(expectedUrl) }
model.onDestroy()
unmockkObject(TangemBlogUrlBuilder)
}
@Test
@ -478,15 +482,20 @@ internal class StakingModelNavigationTest : StakingModelTestBase() {
@Test
fun `WHEN onOpenLearnMoreAboutApproveClick THEN urlOpener opens approve url`() = runTest {
val expectedUrl = "https://tangem.com/blog/post/give-revoke-permission/?utm_source=tangem-app"
mockkObject(TangemBlogUrlBuilder)
coEvery { TangemBlogUrlBuilder.build(TangemBlogUrlBuilder.Post.GiveRevokePermission) } returns expectedUrl
every { urlOpener.openUrl(any()) } just Runs
val model = createModel(testScope = this)
advanceUntilIdle()
model.onOpenLearnMoreAboutApproveClick()
advanceUntilIdle()
verify { urlOpener.openUrl("https://tangem.com/en/blog/post/give-revoke-permission/") }
verify { urlOpener.openUrl(expectedUrl) }
unmockkObject(TangemBlogUrlBuilder)
model.onDestroy()
}
}