Updated on 2026-08-14
This commit is contained in:
parent
7310b74876
commit
64cd1ae5a9
19 changed files with 149 additions and 95 deletions
|
|
@ -1,7 +1,7 @@
|
|||
package com.tangem.tap.common.analytics.appsflyer
|
||||
|
||||
import com.appsflyer.deeplink.DeepLink
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerConversionStore
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
|
||||
import com.tangem.domain.wallets.models.AppsFlyerConversionData
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
|
@ -17,7 +17,7 @@ import kotlin.contracts.contract
|
|||
|
||||
@Singleton
|
||||
class AppsFlyerReferralParamsHandler @Inject constructor(
|
||||
private val appsFlyerConversionStore: AppsFlyerConversionStore,
|
||||
private val appsFlyerStore: AppsFlyerStore,
|
||||
dispatchers: CoroutineDispatcherProvider,
|
||||
) {
|
||||
|
||||
|
|
@ -69,7 +69,7 @@ class AppsFlyerReferralParamsHandler @Inject constructor(
|
|||
private fun storeConversionData(refcode: String, campaign: String?) {
|
||||
coroutineScope.launch {
|
||||
mutex.withLock {
|
||||
appsFlyerConversionStore.storeIfAbsent(
|
||||
appsFlyerStore.storeIfAbsent(
|
||||
value = AppsFlyerConversionData(refcode = refcode, campaign = campaign),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,13 +5,18 @@ import com.appsflyer.AppsFlyerLib
|
|||
import com.appsflyer.attribution.AppsFlyerRequestListener
|
||||
import com.tangem.core.analytics.api.EventLogger
|
||||
import com.tangem.core.analytics.api.UserIdHolder
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
|
||||
import com.tangem.tap.common.analytics.appsflyer.AppsFlyerDeepLinkListener
|
||||
import com.tangem.tap.common.analytics.appsflyer.TangemAFConversionListener
|
||||
import com.tangem.tap.common.analytics.handlers.firebase.UnderscoreAnalyticsEventConverter
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
import kotlinx.coroutines.launch
|
||||
import timber.log.Timber
|
||||
|
||||
interface AppsFlyerAnalyticsClient : EventLogger, UserIdHolder
|
||||
|
|
@ -21,11 +26,15 @@ class AppsFlyerClient @AssistedInject constructor(
|
|||
@ApplicationContext private val context: Context,
|
||||
appsFlyerDeepLinkListener: AppsFlyerDeepLinkListener,
|
||||
tangemAFConversionListener: TangemAFConversionListener,
|
||||
dispatchers: CoroutineDispatcherProvider,
|
||||
private val appsFlyerStore: AppsFlyerStore,
|
||||
) : AppsFlyerAnalyticsClient {
|
||||
|
||||
private val appsFlyerLib: AppsFlyerLib = AppsFlyerLib.getInstance()
|
||||
private val eventConverter = UnderscoreAnalyticsEventConverter()
|
||||
|
||||
private val coroutineScope = CoroutineScope(SupervisorJob() + dispatchers.default)
|
||||
|
||||
init {
|
||||
with(appsFlyerLib) {
|
||||
setAppId(context.packageName)
|
||||
|
|
@ -38,6 +47,8 @@ class AppsFlyerClient @AssistedInject constructor(
|
|||
Timber.i("Starting AppsFlyer SDK")
|
||||
start(context, apiKey, InitializationListener)
|
||||
Timber.i("AppsFlyer SDK started")
|
||||
|
||||
saveUID()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -59,6 +70,16 @@ class AppsFlyerClient @AssistedInject constructor(
|
|||
)
|
||||
}
|
||||
|
||||
private fun saveUID() {
|
||||
coroutineScope.launch {
|
||||
val appsFlyerUID = appsFlyerLib.getAppsFlyerUID(context)
|
||||
|
||||
if (appsFlyerUID != null) {
|
||||
appsFlyerStore.storeUIDIfAbsent(appsFlyerUID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private object InitializationListener : AppsFlyerRequestListener {
|
||||
override fun onSuccess() {
|
||||
Timber.d("AppsFlyer initialized successfully")
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package com.tangem.tap.common.analytics.appsflyer
|
||||
|
||||
import com.appsflyer.deeplink.DeepLink
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerConversionStore
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
|
||||
import com.tangem.domain.wallets.models.AppsFlyerConversionData
|
||||
import com.tangem.test.core.ProvideTestModels
|
||||
import com.tangem.utils.coroutines.TestingCoroutineDispatcherProvider
|
||||
|
|
@ -21,15 +21,15 @@ import org.junit.jupiter.params.ParameterizedTest
|
|||
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
||||
class AppsFlyerReferralParamsHandlerTest {
|
||||
|
||||
private val appsFlyerConversionStore: AppsFlyerConversionStore = mockk(relaxUnitFun = true)
|
||||
private val appsFlyerStore: AppsFlyerStore = mockk(relaxUnitFun = true)
|
||||
private val handler = AppsFlyerReferralParamsHandler(
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
dispatchers = TestingCoroutineDispatcherProvider(),
|
||||
)
|
||||
|
||||
@AfterEach
|
||||
fun tearDown() {
|
||||
clearMocks(appsFlyerConversionStore)
|
||||
clearMocks(appsFlyerStore)
|
||||
}
|
||||
|
||||
@Nested
|
||||
|
|
@ -43,9 +43,9 @@ class AppsFlyerReferralParamsHandlerTest {
|
|||
|
||||
if (model.shouldStore) {
|
||||
val value = AppsFlyerConversionData(refcode = SUCCESS_REFCODE, campaign = SUCCESS_CAMPAIGN)
|
||||
coVerify { appsFlyerConversionStore.storeIfAbsent(value = value) }
|
||||
coVerify { appsFlyerStore.storeIfAbsent(value = value) }
|
||||
} else {
|
||||
coVerify(inverse = true) { appsFlyerConversionStore.storeIfAbsent(value = any()) }
|
||||
coVerify(inverse = true) { appsFlyerStore.storeIfAbsent(value = any()) }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -112,9 +112,9 @@ class AppsFlyerReferralParamsHandlerTest {
|
|||
|
||||
if (model.shouldStore) {
|
||||
val value = AppsFlyerConversionData(refcode = SUCCESS_REFCODE, campaign = SUCCESS_CAMPAIGN)
|
||||
coVerify { appsFlyerConversionStore.storeIfAbsent(value = value) }
|
||||
coVerify { appsFlyerStore.storeIfAbsent(value = value) }
|
||||
} else {
|
||||
coVerify(inverse = true) { appsFlyerConversionStore.storeIfAbsent(value = any()) }
|
||||
coVerify(inverse = true) { appsFlyerStore.storeIfAbsent(value = any()) }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ data class NotificationApplicationCreateBody(
|
|||
@Json(name = "version") val version: String? = null,
|
||||
@Json(name = "language") val language: String? = null,
|
||||
@Json(name = "timezone") val timezone: String? = null,
|
||||
@Json(name = "appsflyerId") val appsflyerId: String? = null,
|
||||
)
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package com.tangem.datasource.di
|
||||
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerConversionStore
|
||||
import com.tangem.datasource.local.appsflyer.DefaultAppsFlyerConversionStore
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
|
||||
import com.tangem.datasource.local.appsflyer.DefaultAppsFlyerStore
|
||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
|
|
@ -15,7 +15,7 @@ internal object AppsFlyerConversionStoreModule {
|
|||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideAppFlyerConversionStore(appPreferencesStore: AppPreferencesStore): AppsFlyerConversionStore {
|
||||
return DefaultAppsFlyerConversionStore(appPreferencesStore = appPreferencesStore)
|
||||
fun provideAppFlyerStore(appPreferencesStore: AppPreferencesStore): AppsFlyerStore {
|
||||
return DefaultAppsFlyerStore(appPreferencesStore = appPreferencesStore)
|
||||
}
|
||||
}
|
||||
|
|
@ -2,11 +2,15 @@ package com.tangem.datasource.local.appsflyer
|
|||
|
||||
import com.tangem.domain.wallets.models.AppsFlyerConversionData
|
||||
|
||||
interface AppsFlyerConversionStore {
|
||||
interface AppsFlyerStore {
|
||||
|
||||
suspend fun get(): AppsFlyerConversionData?
|
||||
|
||||
suspend fun getUID(): String?
|
||||
|
||||
suspend fun store(value: AppsFlyerConversionData)
|
||||
|
||||
suspend fun storeIfAbsent(value: AppsFlyerConversionData)
|
||||
|
||||
suspend fun storeUIDIfAbsent(value: String)
|
||||
}
|
||||
|
|
@ -5,44 +5,61 @@ import com.squareup.moshi.Json
|
|||
import com.squareup.moshi.JsonClass
|
||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||
import com.tangem.datasource.local.preferences.utils.getObjectSyncOrNull
|
||||
import com.tangem.datasource.local.preferences.utils.getSyncOrNull
|
||||
import com.tangem.datasource.local.preferences.utils.storeObject
|
||||
import com.tangem.domain.wallets.models.AppsFlyerConversionData
|
||||
import timber.log.Timber
|
||||
|
||||
internal class DefaultAppsFlyerConversionStore(
|
||||
internal class DefaultAppsFlyerStore(
|
||||
private val appPreferencesStore: AppPreferencesStore,
|
||||
) : AppsFlyerConversionStore {
|
||||
) : AppsFlyerStore {
|
||||
|
||||
override suspend fun get(): AppsFlyerConversionData? {
|
||||
val dto = appPreferencesStore.getObjectSyncOrNull<ConversionDataDTO>(KEY) ?: return null
|
||||
val dto = appPreferencesStore.getObjectSyncOrNull<ConversionDataDTO>(CONVERSION_DATA_KEY) ?: return null
|
||||
|
||||
return ConversionDataConverter.convertBack(value = dto).also {
|
||||
Timber.i("Getting conversion data from store: $it")
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun getUID(): String? = appPreferencesStore.getSyncOrNull(UID_KEY)
|
||||
|
||||
override suspend fun store(value: AppsFlyerConversionData) {
|
||||
Timber.i("Storing conversion data to store: $value")
|
||||
|
||||
val dto = ConversionDataConverter.convert(value)
|
||||
|
||||
appPreferencesStore.storeObject(KEY, dto)
|
||||
appPreferencesStore.storeObject(CONVERSION_DATA_KEY, dto)
|
||||
}
|
||||
|
||||
override suspend fun storeIfAbsent(value: AppsFlyerConversionData) {
|
||||
Timber.i("Storing conversion data to store if absent: $value")
|
||||
appPreferencesStore.editData { preferences ->
|
||||
val saved = preferences[CONVERSION_DATA_KEY]
|
||||
|
||||
val dto = appPreferencesStore.getObjectSyncOrNull<ConversionDataDTO>(KEY)
|
||||
if (saved == null) {
|
||||
Timber.i("Conversion data is absent, storing $value")
|
||||
preferences.setObject(CONVERSION_DATA_KEY, ConversionDataConverter.convert(value))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (dto == null) {
|
||||
Timber.i("Conversion data is absent, storing $value")
|
||||
appPreferencesStore.storeObject(KEY, ConversionDataConverter.convert(value))
|
||||
override suspend fun storeUIDIfAbsent(value: String) {
|
||||
Timber.i("Storing UID to store if absent: $value")
|
||||
appPreferencesStore.editData { preferences ->
|
||||
val saved = preferences[UID_KEY]
|
||||
|
||||
if (saved == null) {
|
||||
Timber.i("UID is absent, storing $value")
|
||||
preferences[UID_KEY] = value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
val KEY = stringPreferencesKey("APPS_FLYER_CONVERSION_DATA")
|
||||
val UID_KEY = stringPreferencesKey("APPS_FLYER_UID")
|
||||
val CONVERSION_DATA_KEY = stringPreferencesKey("APPS_FLYER_CONVERSION_DATA")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -9,7 +9,7 @@ import com.tangem.datasource.api.common.response.isNetworkError
|
|||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||
import com.tangem.datasource.api.tangemTech.models.UserTokensResponse
|
||||
import com.tangem.datasource.api.tangemTech.models.WalletType
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerConversionStore
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
|
||||
import com.tangem.datasource.local.token.UserTokensResponseStore
|
||||
import com.tangem.datasource.local.userwallet.UserWalletsStore
|
||||
import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles
|
||||
|
|
@ -29,7 +29,7 @@ class UserTokensSaver(
|
|||
private val dispatchers: CoroutineDispatcherProvider,
|
||||
private val addressesEnricher: UserTokensResponseAddressesEnricher,
|
||||
private val walletServerBinder: WalletServerBinder,
|
||||
private val appsFlyerConversionStore: AppsFlyerConversionStore,
|
||||
private val appsFlyerStore: AppsFlyerStore,
|
||||
private val accountsFeatureToggles: AccountsFeatureToggles,
|
||||
private val pushTokensRetryerPool: RetryerPool,
|
||||
) {
|
||||
|
|
@ -72,7 +72,7 @@ class UserTokensSaver(
|
|||
|
||||
pushNew(userWallet = userWallet, response = enrichedResponse, onFailSend = onFailSend)
|
||||
} else {
|
||||
val conversionData = appsFlyerConversionStore.get()
|
||||
val conversionData = appsFlyerStore.get()
|
||||
|
||||
val enrichedResponse = response.enrichIf(userWalletId = userWalletId, condition = useEnricher).copy(
|
||||
walletName = userWallet.name,
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import com.tangem.data.common.quote.QuotesFetcher
|
|||
import com.tangem.data.common.wallet.DefaultWalletServerBinder
|
||||
import com.tangem.data.common.wallet.WalletServerBinder
|
||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerConversionStore
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
|
||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||
import com.tangem.datasource.local.token.UserTokensResponseStore
|
||||
import com.tangem.datasource.local.userwallet.UserWalletsStore
|
||||
|
|
@ -76,7 +76,7 @@ internal object DataCommonModule {
|
|||
dispatchers: CoroutineDispatcherProvider,
|
||||
addressesEnricher: UserTokensResponseAddressesEnricher,
|
||||
walletServerBinder: WalletServerBinder,
|
||||
appsFlyerConversionStore: AppsFlyerConversionStore,
|
||||
appsFlyerStore: AppsFlyerStore,
|
||||
accountsFeatureToggles: AccountsFeatureToggles,
|
||||
): UserTokensSaver {
|
||||
return UserTokensSaver(
|
||||
|
|
@ -90,7 +90,7 @@ internal object DataCommonModule {
|
|||
coroutineScope = CoroutineScope(SupervisorJob() + dispatchers.default),
|
||||
),
|
||||
walletServerBinder = walletServerBinder,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -110,13 +110,13 @@ internal object DataCommonModule {
|
|||
@Singleton
|
||||
fun provideWalletServerBinder(
|
||||
userWalletsStore: UserWalletsStore,
|
||||
appsFlyerConversionStore: AppsFlyerConversionStore,
|
||||
appsFlyerStore: AppsFlyerStore,
|
||||
tangemTechApi: TangemTechApi,
|
||||
dispatchers: CoroutineDispatcherProvider,
|
||||
): WalletServerBinder {
|
||||
return DefaultWalletServerBinder(
|
||||
userWalletsStore = userWalletsStore,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
tangemTechApi = tangemTechApi,
|
||||
dispatchers = dispatchers,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package com.tangem.data.common.wallet
|
|||
import com.tangem.datasource.api.common.response.ApiResponse
|
||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||
import com.tangem.datasource.api.tangemTech.converters.WalletIdBodyConverter
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerConversionStore
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
|
||||
import com.tangem.datasource.local.userwallet.UserWalletsStore
|
||||
import com.tangem.domain.models.wallet.UserWallet
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
|
|
@ -12,7 +12,7 @@ import kotlinx.coroutines.withContext
|
|||
|
||||
internal class DefaultWalletServerBinder(
|
||||
private val userWalletsStore: UserWalletsStore,
|
||||
private val appsFlyerConversionStore: AppsFlyerConversionStore,
|
||||
private val appsFlyerStore: AppsFlyerStore,
|
||||
private val tangemTechApi: TangemTechApi,
|
||||
private val dispatchers: CoroutineDispatcherProvider,
|
||||
) : WalletServerBinder {
|
||||
|
|
@ -24,7 +24,7 @@ internal class DefaultWalletServerBinder(
|
|||
}
|
||||
|
||||
override suspend fun bind(userWallet: UserWallet): ApiResponse<Unit> {
|
||||
val conversionData = appsFlyerConversionStore.get()
|
||||
val conversionData = appsFlyerStore.get()
|
||||
|
||||
return withContext(dispatchers.io) {
|
||||
tangemTechApi.createWallet(
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import com.tangem.datasource.api.common.response.ApiResponseError
|
|||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||
import com.tangem.datasource.api.tangemTech.models.UserTokensResponse
|
||||
import com.tangem.datasource.api.tangemTech.models.WalletType
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerConversionStore
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
|
||||
import com.tangem.datasource.local.token.UserTokensResponseStore
|
||||
import com.tangem.datasource.local.userwallet.UserWalletsStore
|
||||
import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles
|
||||
|
|
@ -30,7 +30,7 @@ class UserTokensSaverTest {
|
|||
every { this@mockk.isFeatureEnabled } returns true
|
||||
}
|
||||
private val walletServerBinder: WalletServerBinder = mockk()
|
||||
private val appsFlyerConversionStore: AppsFlyerConversionStore = mockk()
|
||||
private val appsFlyerStore: AppsFlyerStore = mockk()
|
||||
|
||||
private val userTokensSaver: UserTokensSaver = UserTokensSaver(
|
||||
tangemTechApi = tangemTechApi,
|
||||
|
|
@ -39,7 +39,7 @@ class UserTokensSaverTest {
|
|||
dispatchers = TestingCoroutineDispatcherProvider(),
|
||||
addressesEnricher = enricher,
|
||||
walletServerBinder = walletServerBinder,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
accountsFeatureToggles = accountsFeatureToggles,
|
||||
pushTokensRetryerPool = mockk(),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import com.tangem.datasource.api.common.response.ApiResponseError
|
|||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||
import com.tangem.datasource.api.tangemTech.models.WalletIdBody
|
||||
import com.tangem.datasource.api.tangemTech.models.WalletType
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerConversionStore
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
|
||||
import com.tangem.datasource.local.userwallet.UserWalletsStore
|
||||
import com.tangem.domain.models.wallet.UserWallet
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
|
|
@ -27,13 +27,13 @@ import org.junit.jupiter.api.TestInstance
|
|||
internal class DefaultWalletServerBinderTest {
|
||||
|
||||
private val userWalletsStore: UserWalletsStore = mockk()
|
||||
private val appsFlyerConversionStore: AppsFlyerConversionStore = mockk()
|
||||
private val appsFlyerStore: AppsFlyerStore = mockk()
|
||||
private val tangemTechApi: TangemTechApi = mockk()
|
||||
private val dispatchers: CoroutineDispatcherProvider = TestingCoroutineDispatcherProvider()
|
||||
|
||||
private val binder = DefaultWalletServerBinder(
|
||||
userWalletsStore = userWalletsStore,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
tangemTechApi = tangemTechApi,
|
||||
dispatchers = dispatchers
|
||||
)
|
||||
|
|
@ -47,7 +47,7 @@ internal class DefaultWalletServerBinderTest {
|
|||
|
||||
@AfterEach
|
||||
fun tearDown() {
|
||||
clearMocks(userWalletsStore, appsFlyerConversionStore, tangemTechApi)
|
||||
clearMocks(userWalletsStore, appsFlyerStore, tangemTechApi)
|
||||
}
|
||||
|
||||
@Nested
|
||||
|
|
@ -66,7 +66,7 @@ internal class DefaultWalletServerBinderTest {
|
|||
val apiResponse = ApiResponse.Success(Unit)
|
||||
|
||||
coEvery { userWalletsStore.getSyncOrNull(userWalletId) } returns userWallet
|
||||
coEvery { appsFlyerConversionStore.get() } returns conversionData
|
||||
coEvery { appsFlyerStore.get() } returns conversionData
|
||||
coEvery { tangemTechApi.createWallet(requestBody) } returns apiResponse
|
||||
|
||||
val actual = binder.bind(userWalletId = userWalletId)
|
||||
|
|
@ -75,7 +75,7 @@ internal class DefaultWalletServerBinderTest {
|
|||
|
||||
coVerifyOrder {
|
||||
userWalletsStore.getSyncOrNull(userWalletId)
|
||||
appsFlyerConversionStore.get()
|
||||
appsFlyerStore.get()
|
||||
tangemTechApi.createWallet(requestBody)
|
||||
}
|
||||
}
|
||||
|
|
@ -93,7 +93,7 @@ internal class DefaultWalletServerBinderTest {
|
|||
}
|
||||
|
||||
coVerify(inverse = true) {
|
||||
appsFlyerConversionStore.get()
|
||||
appsFlyerStore.get()
|
||||
tangemTechApi.createWallet(any())
|
||||
}
|
||||
}
|
||||
|
|
@ -108,7 +108,7 @@ internal class DefaultWalletServerBinderTest {
|
|||
val apiResponse = ApiResponse.Success(Unit)
|
||||
|
||||
coEvery { userWalletsStore.getSyncOrNull(userWalletId) } returns userWallet
|
||||
coEvery { appsFlyerConversionStore.get() } returns null
|
||||
coEvery { appsFlyerStore.get() } returns null
|
||||
coEvery { tangemTechApi.createWallet(requestBody) } returns apiResponse
|
||||
|
||||
val actual = binder.bind(userWalletId = userWalletId)
|
||||
|
|
@ -117,7 +117,7 @@ internal class DefaultWalletServerBinderTest {
|
|||
|
||||
coVerifyOrder {
|
||||
userWalletsStore.getSyncOrNull(userWalletId)
|
||||
appsFlyerConversionStore.get()
|
||||
appsFlyerStore.get()
|
||||
tangemTechApi.createWallet(requestBody)
|
||||
}
|
||||
}
|
||||
|
|
@ -134,7 +134,7 @@ internal class DefaultWalletServerBinderTest {
|
|||
val apiResponse = ApiResponse.Error(ApiResponseError.TimeoutException()) as ApiResponse<Unit>
|
||||
|
||||
coEvery { userWalletsStore.getSyncOrNull(userWalletId) } returns userWallet
|
||||
coEvery { appsFlyerConversionStore.get() } returns conversionData
|
||||
coEvery { appsFlyerStore.get() } returns conversionData
|
||||
coEvery { tangemTechApi.createWallet(requestBody) } returns apiResponse
|
||||
|
||||
val actual = binder.bind(userWalletId = userWalletId)
|
||||
|
|
@ -143,7 +143,7 @@ internal class DefaultWalletServerBinderTest {
|
|||
|
||||
coVerifyOrder {
|
||||
userWalletsStore.getSyncOrNull(userWalletId)
|
||||
appsFlyerConversionStore.get()
|
||||
appsFlyerStore.get()
|
||||
tangemTechApi.createWallet(requestBody)
|
||||
}
|
||||
}
|
||||
|
|
@ -164,7 +164,7 @@ internal class DefaultWalletServerBinderTest {
|
|||
)
|
||||
val apiResponse = ApiResponse.Success(Unit)
|
||||
|
||||
coEvery { appsFlyerConversionStore.get() } returns conversionData
|
||||
coEvery { appsFlyerStore.get() } returns conversionData
|
||||
coEvery { tangemTechApi.createWallet(requestBody) } returns apiResponse
|
||||
|
||||
val actual = binder.bind(userWallet = userWallet)
|
||||
|
|
@ -172,7 +172,7 @@ internal class DefaultWalletServerBinderTest {
|
|||
Truth.assertThat(actual).isEqualTo(apiResponse)
|
||||
|
||||
coVerifyOrder {
|
||||
appsFlyerConversionStore.get()
|
||||
appsFlyerStore.get()
|
||||
tangemTechApi.createWallet(requestBody)
|
||||
}
|
||||
}
|
||||
|
|
@ -186,7 +186,7 @@ internal class DefaultWalletServerBinderTest {
|
|||
)
|
||||
val apiResponse = ApiResponse.Success(Unit)
|
||||
|
||||
coEvery { appsFlyerConversionStore.get() } returns null
|
||||
coEvery { appsFlyerStore.get() } returns null
|
||||
coEvery { tangemTechApi.createWallet(requestBody) } returns apiResponse
|
||||
|
||||
val actual = binder.bind(userWallet = userWallet)
|
||||
|
|
@ -194,7 +194,7 @@ internal class DefaultWalletServerBinderTest {
|
|||
Truth.assertThat(actual).isEqualTo(apiResponse)
|
||||
|
||||
coVerifyOrder {
|
||||
appsFlyerConversionStore.get()
|
||||
appsFlyerStore.get()
|
||||
tangemTechApi.createWallet(requestBody)
|
||||
}
|
||||
}
|
||||
|
|
@ -210,7 +210,7 @@ internal class DefaultWalletServerBinderTest {
|
|||
)
|
||||
val apiResponse = ApiResponse.Error(ApiResponseError.TimeoutException()) as ApiResponse<Unit>
|
||||
|
||||
coEvery { appsFlyerConversionStore.get() } returns conversionData
|
||||
coEvery { appsFlyerStore.get() } returns conversionData
|
||||
coEvery { tangemTechApi.createWallet(requestBody) } returns apiResponse
|
||||
|
||||
val actual = binder.bind(userWallet = userWallet)
|
||||
|
|
@ -218,7 +218,7 @@ internal class DefaultWalletServerBinderTest {
|
|||
Truth.assertThat(actual).isEqualTo(apiResponse)
|
||||
|
||||
coVerifyOrder {
|
||||
appsFlyerConversionStore.get()
|
||||
appsFlyerStore.get()
|
||||
tangemTechApi.createWallet(requestBody)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,14 +4,16 @@ import com.tangem.data.notifications.converters.NotificationsEligibleNetworkConv
|
|||
import com.tangem.datasource.api.common.response.getOrThrow
|
||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||
import com.tangem.datasource.api.tangemTech.models.NotificationApplicationCreateBody
|
||||
import com.tangem.utils.info.AppInfoProvider
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
|
||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||
import com.tangem.datasource.local.preferences.PreferencesKeys
|
||||
import com.tangem.datasource.local.preferences.utils.*
|
||||
import com.tangem.datasource.local.preferences.utils.getSyncOrNull
|
||||
import com.tangem.datasource.local.preferences.utils.store
|
||||
import com.tangem.domain.notifications.models.ApplicationId
|
||||
import com.tangem.domain.notifications.repository.PushNotificationsRepository
|
||||
import com.tangem.domain.notifications.models.NotificationsEligibleNetwork
|
||||
import com.tangem.domain.notifications.repository.PushNotificationsRepository
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import com.tangem.utils.info.AppInfoProvider
|
||||
import kotlinx.coroutines.withContext
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
@ -19,6 +21,7 @@ internal class DefaultPushNotificationsRepository @Inject constructor(
|
|||
private val tangemTechApi: TangemTechApi,
|
||||
private val appInfoProvider: AppInfoProvider,
|
||||
private val appPreferencesStore: AppPreferencesStore,
|
||||
private val appsFlyerStore: AppsFlyerStore,
|
||||
private val dispatchers: CoroutineDispatcherProvider,
|
||||
) : PushNotificationsRepository {
|
||||
|
||||
|
|
@ -32,6 +35,7 @@ internal class DefaultPushNotificationsRepository @Inject constructor(
|
|||
timezone = appInfoProvider.timezone,
|
||||
version = appInfoProvider.appVersion,
|
||||
pushToken = pushToken,
|
||||
appsflyerId = appsFlyerStore.getUID(),
|
||||
),
|
||||
).getOrThrow().appId
|
||||
|
||||
|
|
|
|||
|
|
@ -3,17 +3,20 @@ package com.tangem.data.notifications
|
|||
import androidx.datastore.core.DataStore
|
||||
import androidx.datastore.preferences.core.Preferences
|
||||
import androidx.datastore.preferences.core.stringPreferencesKey
|
||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||
import com.tangem.utils.info.AppInfoProvider
|
||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||
import com.tangem.datasource.local.preferences.PreferencesKeys
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import com.squareup.moshi.Moshi
|
||||
import com.tangem.data.notifications.converters.NotificationsEligibleNetworkConverter
|
||||
import com.tangem.datasource.api.common.response.ApiResponse
|
||||
import com.tangem.datasource.api.tangemTech.models.*
|
||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||
import com.tangem.datasource.api.tangemTech.models.CryptoNetworkResponse
|
||||
import com.tangem.datasource.api.tangemTech.models.NotificationApplicationCreateBody
|
||||
import com.tangem.datasource.api.tangemTech.models.NotificationApplicationIdResponse
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
|
||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||
import com.tangem.datasource.local.preferences.PreferencesKeys
|
||||
import com.tangem.domain.notifications.models.ApplicationId
|
||||
import com.tangem.utils.coroutines.TestingCoroutineDispatcherProvider
|
||||
import com.tangem.utils.info.AppInfoProvider
|
||||
import io.mockk.coEvery
|
||||
import io.mockk.coVerify
|
||||
import io.mockk.every
|
||||
|
|
@ -31,10 +34,12 @@ class DefaultPushNotificationsRepositoryTest {
|
|||
dispatchers = TestingCoroutineDispatcherProvider(),
|
||||
preferencesDataStore = preferencesDataStore,
|
||||
)
|
||||
private val appsFlyerStore: AppsFlyerStore = mockk()
|
||||
private val repository = DefaultPushNotificationsRepository(
|
||||
tangemTechApi = tangemTechApi,
|
||||
appInfoProvider = appInfoProvider,
|
||||
appPreferencesStore = appPreferencesStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
dispatchers = TestingCoroutineDispatcherProvider(),
|
||||
)
|
||||
|
||||
|
|
@ -52,6 +57,7 @@ class DefaultPushNotificationsRepositoryTest {
|
|||
coEvery { appInfoProvider.language } returns "en"
|
||||
coEvery { appInfoProvider.appVersion } returns "5.21.1"
|
||||
coEvery { appInfoProvider.timezone } returns "UTC"
|
||||
coEvery { appsFlyerStore.getUID() } returns "UID"
|
||||
coEvery { tangemTechApi.createApplicationId(any()) } returns ApiResponse.Success(
|
||||
expectedAppIdResponse,
|
||||
)
|
||||
|
|
@ -71,6 +77,7 @@ class DefaultPushNotificationsRepositoryTest {
|
|||
timezone = "UTC",
|
||||
version = "5.21.1",
|
||||
pushToken = pushToken,
|
||||
appsflyerId = "UID",
|
||||
),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import com.tangem.datasource.api.tangemTech.TangemTechApi
|
|||
import com.tangem.datasource.api.tangemTech.converters.WalletIdBodyConverter
|
||||
import com.tangem.datasource.api.tangemTech.models.*
|
||||
import com.tangem.datasource.api.tangemTech.models.SeedPhraseNotificationDTO.Status
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerConversionStore
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
|
||||
import com.tangem.datasource.local.datastore.RuntimeStateStore
|
||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||
import com.tangem.datasource.local.preferences.PreferencesKeys
|
||||
|
|
@ -49,7 +49,7 @@ internal class DefaultWalletsRepository(
|
|||
private val dispatchers: CoroutineDispatcherProvider,
|
||||
private val authProvider: AuthProvider,
|
||||
private val walletServerBinder: WalletServerBinder,
|
||||
private val appsFlyerConversionStore: AppsFlyerConversionStore,
|
||||
private val appsFlyerStore: AppsFlyerStore,
|
||||
private val accountsFeatureToggles: AccountsFeatureToggles,
|
||||
private val moshi: com.squareup.moshi.Moshi,
|
||||
) : WalletsRepository {
|
||||
|
|
@ -411,7 +411,7 @@ internal class DefaultWalletsRepository(
|
|||
associateApplicationIdWithWallets().getOrThrow()
|
||||
}
|
||||
} else {
|
||||
val conversionData = appsFlyerConversionStore.get()
|
||||
val conversionData = appsFlyerStore.get()
|
||||
val publicKeys = authProvider.getCardsPublicKeys()
|
||||
val walletsBody = wallets.map { userWallet ->
|
||||
WalletIdBodyConverter.convert(
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import com.tangem.data.wallets.hot.DefaultHotWalletAccessCodeAttemptsRepository
|
|||
import com.tangem.datasource.api.common.AuthProvider
|
||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||
import com.tangem.datasource.di.NetworkMoshi
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerConversionStore
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
|
||||
import com.tangem.datasource.local.datastore.RuntimeStateStore
|
||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||
import com.tangem.datasource.local.userwallet.UserWalletsStore
|
||||
|
|
@ -45,7 +45,7 @@ internal object WalletsDataModule {
|
|||
dispatchers: CoroutineDispatcherProvider,
|
||||
authProvider: AuthProvider,
|
||||
walletServerBinder: WalletServerBinder,
|
||||
appsFlyerConversionStore: AppsFlyerConversionStore,
|
||||
appsFlyerStore: AppsFlyerStore,
|
||||
accountsFeatureToggles: AccountsFeatureToggles,
|
||||
@NetworkMoshi moshi: Moshi,
|
||||
): WalletsRepository {
|
||||
|
|
@ -57,7 +57,7 @@ internal object WalletsDataModule {
|
|||
dispatchers = dispatchers,
|
||||
authProvider = authProvider,
|
||||
walletServerBinder = walletServerBinder,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
accountsFeatureToggles = accountsFeatureToggles,
|
||||
moshi = moshi,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import com.tangem.datasource.api.tangemTech.TangemTechApi
|
|||
import com.tangem.datasource.api.tangemTech.models.PromocodeActivationBody
|
||||
import com.tangem.datasource.api.tangemTech.models.PromocodeActivationResponse
|
||||
import com.tangem.datasource.api.tangemTech.models.WalletResponse
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerConversionStore
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
|
||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||
import com.tangem.datasource.local.preferences.PreferencesKeys
|
||||
import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles
|
||||
|
|
@ -41,7 +41,7 @@ class DefaultWalletsRepositoryTest {
|
|||
private lateinit var tangemTechApi: TangemTechApi
|
||||
private lateinit var dispatchers: CoroutineDispatcherProvider
|
||||
private lateinit var walletServerBinder: WalletServerBinder
|
||||
private lateinit var appsFlyerConversionStore: AppsFlyerConversionStore
|
||||
private lateinit var appsFlyerStore: AppsFlyerStore
|
||||
|
||||
private val testWalletId = UserWalletId("1234567890abcdef")
|
||||
|
||||
|
|
@ -49,7 +49,7 @@ class DefaultWalletsRepositoryTest {
|
|||
fun setup() {
|
||||
tangemTechApi = mockk()
|
||||
walletServerBinder = mockk()
|
||||
appsFlyerConversionStore = mockk()
|
||||
appsFlyerStore = mockk()
|
||||
dispatchers = TestingCoroutineDispatcherProvider()
|
||||
repository = DefaultWalletsRepository(
|
||||
appPreferencesStore = appPreferenceStore,
|
||||
|
|
@ -59,7 +59,7 @@ class DefaultWalletsRepositoryTest {
|
|||
dispatchers = dispatchers,
|
||||
authProvider = mockk(),
|
||||
walletServerBinder = walletServerBinder,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
accountsFeatureToggles = mockk(),
|
||||
moshi = mockk(),
|
||||
)
|
||||
|
|
@ -227,12 +227,12 @@ class DefaultWalletsRepositoryTest {
|
|||
dispatchers = dispatchers,
|
||||
authProvider = authProvider,
|
||||
walletServerBinder = walletServerBinder,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
accountsFeatureToggles = accountsFeatureToggles,
|
||||
moshi = mockk(),
|
||||
)
|
||||
|
||||
coEvery { appsFlyerConversionStore.get() } returns null
|
||||
coEvery { appsFlyerStore.get() } returns null
|
||||
|
||||
coEvery {
|
||||
tangemTechApi.associateApplicationIdWithWallets(
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import com.tangem.core.ui.extensions.mask
|
|||
import com.tangem.core.ui.extensions.resourceReference
|
||||
import com.tangem.core.ui.message.DialogMessage
|
||||
import com.tangem.core.ui.message.GlobalLoadingMessage
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerConversionStore
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
|
||||
import com.tangem.domain.models.network.NetworkStatus
|
||||
import com.tangem.domain.models.wallet.UserWallet
|
||||
import com.tangem.domain.networks.multi.MultiNetworkStatusProducer
|
||||
|
|
@ -48,7 +48,7 @@ internal class DefaultPromoDeeplinkHandler @AssistedInject constructor(
|
|||
private val multiWalletCryptoCurrenciesSupplier: MultiWalletCryptoCurrenciesSupplier,
|
||||
private val activateBitcoinPromocodeUseCase: ActivateBitcoinPromocodeUseCase,
|
||||
private val getSelectedWalletSyncUseCase: GetSelectedWalletSyncUseCase,
|
||||
private val appsFlyerConversionStore: AppsFlyerConversionStore,
|
||||
private val appsFlyerStore: AppsFlyerStore,
|
||||
private val bindRefcodeWithWalletUseCase: BindRefcodeWithWalletUseCase,
|
||||
private val analyticsEventsHandler: AnalyticsEventHandler,
|
||||
private val dispatchers: CoroutineDispatcherProvider,
|
||||
|
|
@ -194,7 +194,7 @@ internal class DefaultPromoDeeplinkHandler @AssistedInject constructor(
|
|||
if (!refcode.isNullOrBlank()) {
|
||||
val conversionData = AppsFlyerConversionData(refcode = refcode, campaign = campaign)
|
||||
|
||||
appsFlyerConversionStore.storeIfAbsent(value = conversionData)
|
||||
appsFlyerStore.storeIfAbsent(value = conversionData)
|
||||
|
||||
bindRefcodeWithWalletUseCase(conversionData)
|
||||
.onLeft { Timber.e("Failed to bind refcode with wallets: $it") }
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import com.tangem.core.decompose.ui.UiMessageSender
|
|||
import com.tangem.core.ui.extensions.TextReference
|
||||
import com.tangem.core.ui.extensions.resourceReference
|
||||
import com.tangem.core.ui.message.DialogMessage
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerConversionStore
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
|
||||
import com.tangem.domain.models.StatusSource
|
||||
import com.tangem.domain.models.currency.CryptoCurrency
|
||||
import com.tangem.domain.models.network.Network
|
||||
|
|
@ -72,7 +72,7 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
private lateinit var bindRefcodeWithWalletUseCase: BindRefcodeWithWalletUseCase
|
||||
|
||||
@MockK
|
||||
private lateinit var appsFlyerConversionStore: AppsFlyerConversionStore
|
||||
private lateinit var appsFlyerStore: AppsFlyerStore
|
||||
|
||||
private lateinit var messages: MutableList<UiMessage>
|
||||
|
||||
|
|
@ -114,7 +114,7 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
activateBitcoinPromocodeUseCase = activateBitcoinPromocodeUseCase,
|
||||
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
|
||||
bindRefcodeWithWalletUseCase = bindRefcodeWithWalletUseCase,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
analyticsEventsHandler = analyticsEventHandler,
|
||||
dispatchers = dispatcherProvider,
|
||||
)
|
||||
|
|
@ -148,7 +148,7 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
activateBitcoinPromocodeUseCase = activateBitcoinPromocodeUseCase,
|
||||
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
|
||||
bindRefcodeWithWalletUseCase = bindRefcodeWithWalletUseCase,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
analyticsEventsHandler = analyticsEventHandler,
|
||||
dispatchers = TestingCoroutineDispatcherProvider(),
|
||||
)
|
||||
|
|
@ -181,7 +181,7 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
activateBitcoinPromocodeUseCase = activateBitcoinPromocodeUseCase,
|
||||
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
|
||||
bindRefcodeWithWalletUseCase = bindRefcodeWithWalletUseCase,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
analyticsEventsHandler = analyticsEventHandler,
|
||||
dispatchers = TestingCoroutineDispatcherProvider(),
|
||||
)
|
||||
|
|
@ -220,7 +220,7 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
activateBitcoinPromocodeUseCase = activateBitcoinPromocodeUseCase,
|
||||
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
|
||||
bindRefcodeWithWalletUseCase = bindRefcodeWithWalletUseCase,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
analyticsEventsHandler = analyticsEventHandler,
|
||||
dispatchers = dispatcherProvider,
|
||||
)
|
||||
|
|
@ -263,7 +263,7 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
activateBitcoinPromocodeUseCase = activateBitcoinPromocodeUseCase,
|
||||
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
|
||||
bindRefcodeWithWalletUseCase = bindRefcodeWithWalletUseCase,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
analyticsEventsHandler = analyticsEventHandler,
|
||||
dispatchers = dispatcherProvider,
|
||||
)
|
||||
|
|
@ -381,7 +381,7 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
activateBitcoinPromocodeUseCase = activateBitcoinPromocodeUseCase,
|
||||
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
|
||||
bindRefcodeWithWalletUseCase = bindRefcodeWithWalletUseCase,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
analyticsEventsHandler = analyticsEventHandler,
|
||||
dispatchers = dispatcherProvider,
|
||||
)
|
||||
|
|
@ -414,7 +414,7 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
activateBitcoinPromocodeUseCase = activateBitcoinPromocodeUseCase,
|
||||
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
|
||||
bindRefcodeWithWalletUseCase = bindRefcodeWithWalletUseCase,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
analyticsEventsHandler = analyticsEventHandler,
|
||||
dispatchers = dispatcherProvider,
|
||||
)
|
||||
|
|
@ -456,7 +456,7 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
activateBitcoinPromocodeUseCase = activateBitcoinPromocodeUseCase,
|
||||
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
|
||||
bindRefcodeWithWalletUseCase = bindRefcodeWithWalletUseCase,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
analyticsEventsHandler = analyticsEventHandler,
|
||||
dispatchers = dispatcherProvider,
|
||||
)
|
||||
|
|
@ -519,7 +519,7 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
activateBitcoinPromocodeUseCase = activateBitcoinPromocodeUseCase,
|
||||
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
|
||||
bindRefcodeWithWalletUseCase = bindRefcodeWithWalletUseCase,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
analyticsEventsHandler = analyticsEventHandler,
|
||||
dispatchers = dispatcherProvider,
|
||||
)
|
||||
|
|
@ -573,7 +573,7 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
activateBitcoinPromocodeUseCase = activateBitcoinPromocodeUseCase,
|
||||
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
|
||||
bindRefcodeWithWalletUseCase = bindRefcodeWithWalletUseCase,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
analyticsEventsHandler = analyticsEventHandler,
|
||||
dispatchers = dispatcherProvider,
|
||||
)
|
||||
|
|
@ -633,7 +633,7 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
activateBitcoinPromocodeUseCase = activateBitcoinPromocodeUseCase,
|
||||
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
|
||||
bindRefcodeWithWalletUseCase = bindRefcodeWithWalletUseCase,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
analyticsEventsHandler = analyticsEventHandler,
|
||||
dispatchers = dispatcherProvider,
|
||||
)
|
||||
|
|
@ -692,7 +692,7 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
activateBitcoinPromocodeUseCase = activateBitcoinPromocodeUseCase,
|
||||
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
|
||||
bindRefcodeWithWalletUseCase = bindRefcodeWithWalletUseCase,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
analyticsEventsHandler = analyticsEventHandler,
|
||||
dispatchers = dispatcherProvider,
|
||||
)
|
||||
|
|
@ -747,7 +747,7 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
activateBitcoinPromocodeUseCase = activateBitcoinPromocodeUseCase,
|
||||
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
|
||||
bindRefcodeWithWalletUseCase = bindRefcodeWithWalletUseCase,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
analyticsEventsHandler = analyticsEventHandler,
|
||||
dispatchers = dispatcherProvider,
|
||||
)
|
||||
|
|
@ -802,7 +802,7 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
activateBitcoinPromocodeUseCase = activateBitcoinPromocodeUseCase,
|
||||
getSelectedWalletSyncUseCase = getSelectedWalletSyncUseCase,
|
||||
bindRefcodeWithWalletUseCase = bindRefcodeWithWalletUseCase,
|
||||
appsFlyerConversionStore = appsFlyerConversionStore,
|
||||
appsFlyerStore = appsFlyerStore,
|
||||
analyticsEventsHandler = analyticsEventHandler,
|
||||
dispatchers = dispatcherProvider,
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue