diff --git a/domain/account/status/src/main/java/com/tangem/domain/account/status/usecase/GetAccountCurrencyByAddressUseCase.kt b/domain/account/status/src/main/java/com/tangem/domain/account/status/usecase/GetAccountCurrencyByAddressUseCase.kt index 4043b8821f..7007084f00 100644 --- a/domain/account/status/src/main/java/com/tangem/domain/account/status/usecase/GetAccountCurrencyByAddressUseCase.kt +++ b/domain/account/status/src/main/java/com/tangem/domain/account/status/usecase/GetAccountCurrencyByAddressUseCase.kt @@ -84,7 +84,7 @@ class GetAccountCurrencyByAddressUseCase( params = MultiNetworkStatusProducer.Params(userWalletId = id), timeMillis = 1000L, ) - ?.firstOrNull { it.getAddress() == address } + ?.firstOrNull { it.getAddress().equals(address, ignoreCase = true) } if (networkStatus != null) { pair = id to networkStatus.network.id diff --git a/domain/account/status/src/test/kotlin/com/tangem/domain/account/status/usecase/GetAccountCurrencyByAddressUseCaseTest.kt b/domain/account/status/src/test/kotlin/com/tangem/domain/account/status/usecase/GetAccountCurrencyByAddressUseCaseTest.kt index 9471a7d81f..1958437c62 100644 --- a/domain/account/status/src/test/kotlin/com/tangem/domain/account/status/usecase/GetAccountCurrencyByAddressUseCaseTest.kt +++ b/domain/account/status/src/test/kotlin/com/tangem/domain/account/status/usecase/GetAccountCurrencyByAddressUseCaseTest.kt @@ -280,6 +280,35 @@ class GetAccountCurrencyByAddressUseCaseTest { } } + @Test + fun `returns Some when query address case differs from stored network address`() = runTest { + // Arrange + val currency = MockCryptoCurrencyFactory().ethereum + val networkStatus = NetworkStatus( + network = currency.network, + // Stored address is lower-case + value = NetworkStatus.Unreachable(address = validNetworkAddress), + ) + val accountList = AccountList.empty(userWalletId = userWalletId, cryptoCurrencies = listOf(currency)) + + every { userWalletsListRepository.userWallets.value } returns listOf(multiUserWallet) + coEvery { + multiNetworkStatusSupplier.getSyncOrNull(params = MultiNetworkStatusProducer.Params(userWalletId), 1000) + } returns setOf(networkStatus) + coEvery { + singleAccountListSupplier.getSyncOrNull( + params = SingleAccountListProducer.Params(userWalletId = userWalletId), + ) + } returns accountList + + // Act — query with an EIP-55 checksummed (mixed/upper-case) variant of the same address + val actual = useCase(validAddress.uppercase()) + + // Assert + val expected = AccountCryptoCurrency(account = accountList.mainAccount, cryptoCurrency = currency) + assertSome(actual, expected) + } + private companion object Companion { const val validAddress = "0x1234567890abcdef" val validNetworkAddress = NetworkAddress.Single(