Updated on 2026-08-14
This commit is contained in:
parent
d2b02493a8
commit
63da6a3729
4 changed files with 88 additions and 131 deletions
|
|
@ -7,7 +7,6 @@ import com.squareup.moshi.JsonAdapter
|
|||
import com.squareup.moshi.Moshi
|
||||
import com.squareup.moshi.adapter
|
||||
import com.tangem.blockchainsdk.BlockchainProvidersResponse
|
||||
import com.tangem.datasource.api.common.AuthProvider
|
||||
import com.tangem.datasource.api.tangemTech.TangemTechServiceApi
|
||||
import com.tangem.datasource.asset.loader.AssetLoader
|
||||
import com.tangem.datasource.asset.reader.AssetReader
|
||||
|
|
@ -26,7 +25,6 @@ import org.junit.Test
|
|||
internal class BlockchainProvidersResponseLoaderTest {
|
||||
|
||||
private val tangemTechServiceApi = mockk<TangemTechServiceApi>()
|
||||
private val authProvider = mockk<AuthProvider>()
|
||||
private val assetReader = mockk<AssetReader>()
|
||||
private val moshi = mockk<Moshi>()
|
||||
private val jsonAdapter = mockk<JsonAdapter<BlockchainProvidersResponse>>()
|
||||
|
|
@ -36,7 +34,6 @@ internal class BlockchainProvidersResponseLoaderTest {
|
|||
|
||||
private val loader = BlockchainProvidersResponseLoader(
|
||||
tangemTechServiceApi = tangemTechServiceApi,
|
||||
authProvider = authProvider,
|
||||
assetLoader = assetLoader,
|
||||
dispatchers = TestingCoroutineDispatcherProvider(),
|
||||
)
|
||||
|
|
@ -62,32 +59,23 @@ internal class BlockchainProvidersResponseLoaderTest {
|
|||
jsonAdapter.fromJson(emptyJson)
|
||||
}
|
||||
|
||||
coVerify(inverse = true) {
|
||||
authProvider.getCardPublicKey()
|
||||
authProvider.getCardId()
|
||||
tangemTechServiceApi.getBlockchainProviders(any(), any())
|
||||
}
|
||||
coVerify(inverse = true) { tangemTechServiceApi.getBlockchainProviders() }
|
||||
|
||||
Truth.assertThat(actual).isEqualTo(null)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun test_load_if_remote_config_loading_is_loaded_failure() = runTest {
|
||||
everyGettingLocalConfig(json = localProvidersJson) returns localProviders
|
||||
everyGettingRemoteConfig() throws IllegalStateException("Test exception")
|
||||
everyGettingLocalConfig(json = LOCAL_PROVIDERS_JSON) returns localProviders
|
||||
coEvery { tangemTechServiceApi.getBlockchainProviders() } throws IllegalStateException("Test exception")
|
||||
|
||||
val actual = loader.load()
|
||||
|
||||
coVerifyOrder {
|
||||
assetReader.read(LOCAL_CONFIG_FILE_NAME)
|
||||
moshi.adapter<BlockchainProvidersResponse>()
|
||||
jsonAdapter.fromJson(localProvidersJson)
|
||||
authProvider.getCardPublicKey()
|
||||
authProvider.getCardId()
|
||||
tangemTechServiceApi.getBlockchainProviders(
|
||||
cardPublicKey = DEFAULT_CARD_PUBLIC_KEY,
|
||||
cardId = DEFAULT_CARD_ID,
|
||||
)
|
||||
jsonAdapter.fromJson(LOCAL_PROVIDERS_JSON)
|
||||
tangemTechServiceApi.getBlockchainProviders()
|
||||
}
|
||||
|
||||
Truth.assertThat(actual).isEqualTo(localProviders)
|
||||
|
|
@ -95,21 +83,16 @@ internal class BlockchainProvidersResponseLoaderTest {
|
|||
|
||||
@Test
|
||||
fun test_load_if_remote_config_loading_is_loaded_successful() = runTest {
|
||||
everyGettingLocalConfig(json = localProvidersJson) returns localProviders
|
||||
everyGettingRemoteConfig() returns remoteProviders
|
||||
everyGettingLocalConfig(json = LOCAL_PROVIDERS_JSON) returns localProviders
|
||||
coEvery { tangemTechServiceApi.getBlockchainProviders() } returns remoteProviders
|
||||
|
||||
val actual = loader.load()
|
||||
|
||||
coVerifyOrder {
|
||||
assetReader.read(LOCAL_CONFIG_FILE_NAME)
|
||||
moshi.adapter<BlockchainProvidersResponse>()
|
||||
jsonAdapter.fromJson(localProvidersJson)
|
||||
authProvider.getCardPublicKey()
|
||||
authProvider.getCardId()
|
||||
tangemTechServiceApi.getBlockchainProviders(
|
||||
cardPublicKey = DEFAULT_CARD_PUBLIC_KEY,
|
||||
cardId = DEFAULT_CARD_ID,
|
||||
)
|
||||
jsonAdapter.fromJson(LOCAL_PROVIDERS_JSON)
|
||||
tangemTechServiceApi.getBlockchainProviders()
|
||||
}
|
||||
|
||||
Truth.assertThat(actual).isEqualTo(remoteProviders)
|
||||
|
|
@ -119,21 +102,16 @@ internal class BlockchainProvidersResponseLoaderTest {
|
|||
fun test_load_if_remote_config_is_the_same_as_local() = runTest {
|
||||
val remoteProviders = localProviders
|
||||
|
||||
everyGettingLocalConfig(json = localProvidersJson) returns localProviders
|
||||
everyGettingRemoteConfig() returns remoteProviders
|
||||
everyGettingLocalConfig(json = LOCAL_PROVIDERS_JSON) returns localProviders
|
||||
coEvery { tangemTechServiceApi.getBlockchainProviders() } returns remoteProviders
|
||||
|
||||
val actual = loader.load()
|
||||
|
||||
coVerifyOrder {
|
||||
assetReader.read(LOCAL_CONFIG_FILE_NAME)
|
||||
moshi.adapter<BlockchainProvidersResponse>()
|
||||
jsonAdapter.fromJson(localProvidersJson)
|
||||
authProvider.getCardPublicKey()
|
||||
authProvider.getCardId()
|
||||
tangemTechServiceApi.getBlockchainProviders(
|
||||
cardPublicKey = DEFAULT_CARD_PUBLIC_KEY,
|
||||
cardId = DEFAULT_CARD_ID,
|
||||
)
|
||||
jsonAdapter.fromJson(LOCAL_PROVIDERS_JSON)
|
||||
tangemTechServiceApi.getBlockchainProviders()
|
||||
}
|
||||
|
||||
Truth.assertThat(actual).isEqualTo(remoteProviders)
|
||||
|
|
@ -144,8 +122,8 @@ internal class BlockchainProvidersResponseLoaderTest {
|
|||
val ethProvider = "ethereum" to emptyList<ProviderModel>()
|
||||
val remoteProvidersWithEth = remoteProviders + ethProvider
|
||||
|
||||
everyGettingLocalConfig(json = localProvidersJson) returns localProviders
|
||||
everyGettingRemoteConfig() returns remoteProvidersWithEth
|
||||
everyGettingLocalConfig(json = LOCAL_PROVIDERS_JSON) returns localProviders
|
||||
coEvery { tangemTechServiceApi.getBlockchainProviders() } returns remoteProvidersWithEth
|
||||
everyCrashlyticsRecording() just Runs
|
||||
|
||||
val actual = loader.load()
|
||||
|
|
@ -153,13 +131,8 @@ internal class BlockchainProvidersResponseLoaderTest {
|
|||
coVerifyOrder {
|
||||
assetReader.read(LOCAL_CONFIG_FILE_NAME)
|
||||
moshi.adapter<BlockchainProvidersResponse>()
|
||||
jsonAdapter.fromJson(localProvidersJson)
|
||||
authProvider.getCardPublicKey()
|
||||
authProvider.getCardId()
|
||||
tangemTechServiceApi.getBlockchainProviders(
|
||||
cardPublicKey = DEFAULT_CARD_PUBLIC_KEY,
|
||||
cardId = DEFAULT_CARD_ID,
|
||||
)
|
||||
jsonAdapter.fromJson(LOCAL_PROVIDERS_JSON)
|
||||
tangemTechServiceApi.getBlockchainProviders()
|
||||
firebaseCrashlytics.recordException(any())
|
||||
}
|
||||
|
||||
|
|
@ -170,21 +143,16 @@ internal class BlockchainProvidersResponseLoaderTest {
|
|||
fun test_load_if_local_config_has_empty_providers() = runTest {
|
||||
val localProvidersWithEmptyApt = localProviders.mapValues { if (it.key == "aptos") emptyList() else it.value }
|
||||
|
||||
everyGettingLocalConfig(json = localProvidersJson) returns localProvidersWithEmptyApt
|
||||
everyGettingRemoteConfig() returns remoteProviders
|
||||
everyGettingLocalConfig(json = LOCAL_PROVIDERS_JSON) returns localProvidersWithEmptyApt
|
||||
coEvery { tangemTechServiceApi.getBlockchainProviders() } returns remoteProviders
|
||||
|
||||
val actual = loader.load()
|
||||
|
||||
coVerifyOrder {
|
||||
assetReader.read(LOCAL_CONFIG_FILE_NAME)
|
||||
moshi.adapter<BlockchainProvidersResponse>()
|
||||
jsonAdapter.fromJson(localProvidersJson)
|
||||
authProvider.getCardPublicKey()
|
||||
authProvider.getCardId()
|
||||
tangemTechServiceApi.getBlockchainProviders(
|
||||
cardPublicKey = DEFAULT_CARD_PUBLIC_KEY,
|
||||
cardId = DEFAULT_CARD_ID,
|
||||
)
|
||||
jsonAdapter.fromJson(LOCAL_PROVIDERS_JSON)
|
||||
tangemTechServiceApi.getBlockchainProviders()
|
||||
}
|
||||
|
||||
val expected = localProvidersWithEmptyApt + remoteProviders
|
||||
|
|
@ -196,8 +164,8 @@ internal class BlockchainProvidersResponseLoaderTest {
|
|||
fun test_load_if_remote_config_doesnt_contain_local_providers() = runTest {
|
||||
val remoteProvidersWithoutLocal: BlockchainProvidersResponse = remoteProviders - localProviders.keys
|
||||
|
||||
everyGettingLocalConfig(json = localProvidersJson) returns localProviders
|
||||
everyGettingRemoteConfig() returns remoteProvidersWithoutLocal
|
||||
everyGettingLocalConfig(json = LOCAL_PROVIDERS_JSON) returns localProviders
|
||||
coEvery { tangemTechServiceApi.getBlockchainProviders() } returns remoteProvidersWithoutLocal
|
||||
everyCrashlyticsRecording() just Runs
|
||||
|
||||
val actual = loader.load()
|
||||
|
|
@ -205,13 +173,8 @@ internal class BlockchainProvidersResponseLoaderTest {
|
|||
coVerifyOrder {
|
||||
assetReader.read(LOCAL_CONFIG_FILE_NAME)
|
||||
moshi.adapter<BlockchainProvidersResponse>()
|
||||
jsonAdapter.fromJson(localProvidersJson)
|
||||
authProvider.getCardPublicKey()
|
||||
authProvider.getCardId()
|
||||
tangemTechServiceApi.getBlockchainProviders(
|
||||
cardPublicKey = DEFAULT_CARD_PUBLIC_KEY,
|
||||
cardId = DEFAULT_CARD_ID,
|
||||
)
|
||||
jsonAdapter.fromJson(LOCAL_PROVIDERS_JSON)
|
||||
tangemTechServiceApi.getBlockchainProviders()
|
||||
firebaseCrashlytics.recordException(any())
|
||||
}
|
||||
|
||||
|
|
@ -223,8 +186,8 @@ internal class BlockchainProvidersResponseLoaderTest {
|
|||
val ethProvider = "ethereum" to listOf(ProviderModel.UnsupportedType, ProviderModel.Private(name = "nownodes"))
|
||||
val remoteProvidersWithEth = remoteProviders + ethProvider
|
||||
|
||||
everyGettingLocalConfig(json = localProvidersJson) returns localProviders
|
||||
everyGettingRemoteConfig() returns remoteProvidersWithEth
|
||||
everyGettingLocalConfig(json = LOCAL_PROVIDERS_JSON) returns localProviders
|
||||
coEvery { tangemTechServiceApi.getBlockchainProviders() } returns remoteProvidersWithEth
|
||||
everyCrashlyticsRecording() just Runs
|
||||
|
||||
val actual = loader.load()
|
||||
|
|
@ -232,13 +195,8 @@ internal class BlockchainProvidersResponseLoaderTest {
|
|||
coVerifyOrder {
|
||||
assetReader.read(LOCAL_CONFIG_FILE_NAME)
|
||||
moshi.adapter<BlockchainProvidersResponse>()
|
||||
jsonAdapter.fromJson(localProvidersJson)
|
||||
authProvider.getCardPublicKey()
|
||||
authProvider.getCardId()
|
||||
tangemTechServiceApi.getBlockchainProviders(
|
||||
cardPublicKey = DEFAULT_CARD_PUBLIC_KEY,
|
||||
cardId = DEFAULT_CARD_ID,
|
||||
)
|
||||
jsonAdapter.fromJson(LOCAL_PROVIDERS_JSON)
|
||||
tangemTechServiceApi.getBlockchainProviders()
|
||||
firebaseCrashlytics.recordException(any())
|
||||
}
|
||||
|
||||
|
|
@ -255,8 +213,8 @@ internal class BlockchainProvidersResponseLoaderTest {
|
|||
val remoteEthProvider = "ethereum" to listOf(ProviderModel.UnsupportedType, ProviderModel.Public("adbw2138"))
|
||||
val remoteProvidersWithEth = remoteProviders + remoteEthProvider
|
||||
|
||||
everyGettingLocalConfig(json = localProvidersJson) returns localProvidersWithEth
|
||||
everyGettingRemoteConfig() returns remoteProvidersWithEth
|
||||
everyGettingLocalConfig(json = LOCAL_PROVIDERS_JSON) returns localProvidersWithEth
|
||||
coEvery { tangemTechServiceApi.getBlockchainProviders() } returns remoteProvidersWithEth
|
||||
everyCrashlyticsRecording() just Runs
|
||||
|
||||
val actual = loader.load()
|
||||
|
|
@ -264,13 +222,8 @@ internal class BlockchainProvidersResponseLoaderTest {
|
|||
coVerifyOrder {
|
||||
assetReader.read(LOCAL_CONFIG_FILE_NAME)
|
||||
moshi.adapter<BlockchainProvidersResponse>()
|
||||
jsonAdapter.fromJson(localProvidersJson)
|
||||
authProvider.getCardPublicKey()
|
||||
authProvider.getCardId()
|
||||
tangemTechServiceApi.getBlockchainProviders(
|
||||
cardPublicKey = DEFAULT_CARD_PUBLIC_KEY,
|
||||
cardId = DEFAULT_CARD_ID,
|
||||
)
|
||||
jsonAdapter.fromJson(LOCAL_PROVIDERS_JSON)
|
||||
tangemTechServiceApi.getBlockchainProviders()
|
||||
firebaseCrashlytics.recordException(any())
|
||||
}
|
||||
|
||||
|
|
@ -279,6 +232,37 @@ internal class BlockchainProvidersResponseLoaderTest {
|
|||
Truth.assertThat(actual).isEqualTo(expected)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun test_load_if_configs_contain_public_providers_without_slash_in_the_end() = runTest {
|
||||
val localPublicProviderUrl = "https://qwe.com"
|
||||
val localEthProvider = "ethereum" to listOf(ProviderModel.Public(url = localPublicProviderUrl))
|
||||
val localProvidersWithEth = localProviders + localEthProvider
|
||||
|
||||
val remotePublicProviderUrl = "https://rty.com"
|
||||
val remoteDogeProvider = "dogecoin" to listOf(ProviderModel.Public(url = remotePublicProviderUrl))
|
||||
val remoteProvidersWithDoge = remoteProviders + remoteDogeProvider
|
||||
|
||||
everyGettingLocalConfig(json = LOCAL_PROVIDERS_JSON) returns localProvidersWithEth
|
||||
coEvery { tangemTechServiceApi.getBlockchainProviders() } returns remoteProvidersWithDoge
|
||||
everyCrashlyticsRecording() just Runs
|
||||
|
||||
val actual = loader.load()
|
||||
|
||||
coVerifyOrder {
|
||||
assetReader.read(LOCAL_CONFIG_FILE_NAME)
|
||||
moshi.adapter<BlockchainProvidersResponse>()
|
||||
jsonAdapter.fromJson(LOCAL_PROVIDERS_JSON)
|
||||
tangemTechServiceApi.getBlockchainProviders()
|
||||
firebaseCrashlytics.recordException(any())
|
||||
}
|
||||
|
||||
val expected = remoteProviders +
|
||||
localEthProvider.copy(second = listOf(ProviderModel.Public(url = "$localPublicProviderUrl/"))) +
|
||||
remoteDogeProvider.copy(second = listOf(ProviderModel.Public(url = "$remotePublicProviderUrl/")))
|
||||
|
||||
Truth.assertThat(actual).isEqualTo(expected)
|
||||
}
|
||||
|
||||
private fun everyGettingLocalConfig(
|
||||
json: String,
|
||||
): MockKStubScope<BlockchainProvidersResponse?, BlockchainProvidersResponse?> {
|
||||
|
|
@ -287,51 +271,18 @@ internal class BlockchainProvidersResponseLoaderTest {
|
|||
return coEvery { jsonAdapter.fromJson(json) }
|
||||
}
|
||||
|
||||
private fun everyGettingRemoteConfig(): MockKStubScope<BlockchainProvidersResponse, BlockchainProvidersResponse> {
|
||||
every { authProvider.getCardPublicKey() } returns DEFAULT_CARD_PUBLIC_KEY
|
||||
every { authProvider.getCardId() } returns DEFAULT_CARD_ID
|
||||
|
||||
return coEvery {
|
||||
tangemTechServiceApi.getBlockchainProviders(
|
||||
cardPublicKey = DEFAULT_CARD_PUBLIC_KEY,
|
||||
cardId = DEFAULT_CARD_ID,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun everyCrashlyticsRecording() = every { firebaseCrashlytics.recordException(any()) }
|
||||
|
||||
private companion object {
|
||||
const val LOCAL_CONFIG_FILE_NAME = "tangem-app-config/providers_order.json"
|
||||
const val DEFAULT_CARD_PUBLIC_KEY = "card_public_key"
|
||||
const val DEFAULT_CARD_ID = "card_id"
|
||||
|
||||
val localProvidersJson = """
|
||||
{
|
||||
"aptos": [
|
||||
{
|
||||
"type": "private",
|
||||
"name": "private_apt"
|
||||
}
|
||||
],
|
||||
"algorand": [
|
||||
{
|
||||
"type": "private",
|
||||
"name": "private_alg"
|
||||
},
|
||||
{
|
||||
"type": "public",
|
||||
"name": "https://public_alg.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
""".trimIndent()
|
||||
const val LOCAL_PROVIDERS_JSON = "doesn't matter"
|
||||
|
||||
val localProviders: BlockchainProvidersResponse = mapOf(
|
||||
"aptos" to listOf(ProviderModel.Private(name = "private_apt")),
|
||||
"algorand" to listOf(
|
||||
ProviderModel.Private(name = "private_alg"),
|
||||
ProviderModel.Public(url = "https://public_alg.com"),
|
||||
ProviderModel.Public(url = "https://public_alg.com/"),
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue