Updated on 2026-08-14

This commit is contained in:
Tangem 2026-07-16 09:36:16 +02:00
parent 503106376c
commit 2b943f239f
5 changed files with 22 additions and 28 deletions

View file

@ -1,12 +1,14 @@
package com.tangem.domain.promo.models package com.tangem.domain.promo.models
enum class PromoCampaignId(val deeplinkId: Int, val slug: String) { private const val CAMPAIGN_ID_WHALE = "whale-swap-cashback"
WhaleSwapCashback(deeplinkId = 1, slug = "whale-swap-cashback"), private const val CAMPAIGN_ID_REACTIVATION = "reactivation-cashback"
ReactivationCashback(deeplinkId = 2, slug = "reactivation-cashback"),
enum class PromoCampaignId(val slug: String) {
WhaleSwapCashback(slug = CAMPAIGN_ID_WHALE),
ReactivationCashback(slug = CAMPAIGN_ID_REACTIVATION),
; ;
companion object { companion object {
fun fromDeeplinkId(id: Int): PromoCampaignId? = entries.firstOrNull { it.deeplinkId == id }
fun fromSlug(slug: String): PromoCampaignId? = entries.firstOrNull { it.slug == slug } fun fromSlug(slug: String): PromoCampaignId? = entries.firstOrNull { it.slug == slug }
} }
} }

View file

@ -5,17 +5,6 @@ import org.junit.jupiter.api.Test
internal class PromoCampaignIdTest { internal class PromoCampaignIdTest {
@Test
fun `GIVEN known deeplink id WHEN fromDeeplinkId THEN returns campaign`() {
assertThat(PromoCampaignId.fromDeeplinkId(1)).isEqualTo(PromoCampaignId.WhaleSwapCashback)
assertThat(PromoCampaignId.fromDeeplinkId(2)).isEqualTo(PromoCampaignId.ReactivationCashback)
}
@Test
fun `GIVEN unknown deeplink id WHEN fromDeeplinkId THEN returns null`() {
assertThat(PromoCampaignId.fromDeeplinkId(99)).isNull()
}
@Test @Test
fun `GIVEN known slug WHEN fromSlug THEN returns campaign`() { fun `GIVEN known slug WHEN fromSlug THEN returns campaign`() {
assertThat(PromoCampaignId.fromSlug("whale-swap-cashback")).isEqualTo(PromoCampaignId.WhaleSwapCashback) assertThat(PromoCampaignId.fromSlug("whale-swap-cashback")).isEqualTo(PromoCampaignId.WhaleSwapCashback)

View file

@ -1,5 +1,6 @@
package com.tangem.features.promobanners.impl.campaigns.converters package com.tangem.features.promobanners.impl.campaigns.converters
import com.tangem.domain.promo.models.PromoCampaignId
import com.tangem.features.promobanners.impl.campaigns.entity.CampaignType import com.tangem.features.promobanners.impl.campaigns.entity.CampaignType
import com.tangem.utils.converter.Converter import com.tangem.utils.converter.Converter
import javax.inject.Inject import javax.inject.Inject
@ -9,14 +10,9 @@ internal class CampaignIdConverter @Inject constructor() :
override fun convert(value: String): CampaignType? { override fun convert(value: String): CampaignType? {
return when (value) { return when (value) {
CAMPAIGN_ID_REACTIVATION -> CampaignType.ReactivationCashback(campaignId = value) PromoCampaignId.ReactivationCashback.slug -> CampaignType.ReactivationCashback(campaignId = value)
CAMPAIGN_ID_WHALE -> CampaignType.WhaleSwapCashback(campaignId = value) PromoCampaignId.WhaleSwapCashback.slug -> CampaignType.WhaleSwapCashback(campaignId = value)
else -> null else -> null
} }
} }
private companion object {
const val CAMPAIGN_ID_WHALE = "1"
const val CAMPAIGN_ID_REACTIVATION = "2"
}
} }

View file

@ -22,8 +22,14 @@ internal class CampaignIdConverterTest {
} }
private fun provideConvertModels() = listOf( private fun provideConvertModels() = listOf(
ConvertModel(id = "1", expected = CampaignType.WhaleSwapCashback(campaignId = "1")), ConvertModel(
ConvertModel(id = "2", expected = CampaignType.ReactivationCashback(campaignId = "2")), id = "whale-swap-cashback",
expected = CampaignType.WhaleSwapCashback(campaignId = "whale-swap-cashback"),
),
ConvertModel(
id = "reactivation-cashback",
expected = CampaignType.ReactivationCashback(campaignId = "reactivation-cashback"),
),
ConvertModel(id = "0", expected = null), ConvertModel(id = "0", expected = null),
ConvertModel(id = "unknown", expected = null), ConvertModel(id = "unknown", expected = null),
ConvertModel(id = "", expected = null), ConvertModel(id = "", expected = null),

View file

@ -42,7 +42,6 @@ internal class CampaignsModelTest {
private val messageSender: UiMessageSender = mockk(relaxed = true) private val messageSender: UiMessageSender = mockk(relaxed = true)
private val analyticsEventHandler: AnalyticsEventHandler = mockk(relaxed = true) private val analyticsEventHandler: AnalyticsEventHandler = mockk(relaxed = true)
// Real converter: "1" -> WhaleSwapCashback, "2" -> ReactivationCashback, else null.
private val campaignIdConverter = CampaignIdConverter() private val campaignIdConverter = CampaignIdConverter()
@BeforeEach @BeforeEach
@ -82,7 +81,9 @@ internal class CampaignsModelTest {
// Arrange // Arrange
coEvery { getPromoCampaignStateUseCase.invoke(any(), any(), any()) } returns coEvery { getPromoCampaignStateUseCase.invoke(any(), any(), any()) } returns
Either.Left(RuntimeException("network")) Either.Left(RuntimeException("network"))
val model = createModel(campaignFlow = flowOf(CampaignRequest(campaignId = "1", userWalletId = userWalletId))) val model = createModel(
campaignFlow = flowOf(CampaignRequest(campaignId = "whale-swap-cashback", userWalletId = userWalletId)),
)
// Act // Act
advanceUntilIdle() advanceUntilIdle()
@ -180,8 +181,8 @@ internal class CampaignsModelTest {
} }
private fun provideKnownCampaignModels() = listOf( private fun provideKnownCampaignModels() = listOf(
KnownCampaignModel(campaignId = "1", expectedPromoId = PromoCampaignId.WhaleSwapCashback), KnownCampaignModel(campaignId = "whale-swap-cashback", expectedPromoId = PromoCampaignId.WhaleSwapCashback),
KnownCampaignModel(campaignId = "2", expectedPromoId = PromoCampaignId.ReactivationCashback), KnownCampaignModel(campaignId = "reactivation-cashback", expectedPromoId = PromoCampaignId.ReactivationCashback),
) )
internal data class KnownCampaignModel( internal data class KnownCampaignModel(