tangem-app-android-audited/app/src/androidTest/kotlin/com/tangem/tests/BlockchainTest.kt
2025-10-29 16:54:30 +05:00

191 lines
No EOL
8.2 KiB
Kotlin
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.tangem.tests
import com.tangem.common.BaseTestCase
import com.tangem.common.constants.TestConstants.CARDANO_ADDRESS
import com.tangem.common.constants.TestConstants.USER_TOKENS_API_SCENARIO
import com.tangem.common.extensions.clickWithAssertion
import com.tangem.common.extensions.pullToRefresh
import com.tangem.common.ui.R
import com.tangem.common.utils.resetWireMockScenarioState
import com.tangem.common.utils.setWireMockScenarioState
import com.tangem.scenarios.checkSendWarning
import com.tangem.scenarios.openMainScreen
import com.tangem.scenarios.openSendScreen
import com.tangem.scenarios.synchronizeAddresses
import com.tangem.screens.onMainScreen
import com.tangem.screens.onSendAddressScreen
import com.tangem.screens.onSendConfirmScreen
import com.tangem.screens.onSendScreen
import com.tangem.screens.onTokenDetailsScreen
import dagger.hilt.android.testing.HiltAndroidTest
import io.github.kakaocup.kakao.common.utilities.getResourceString
import io.qameta.allure.kotlin.AllureId
import io.qameta.allure.kotlin.junit4.DisplayName
import org.junit.Test
@HiltAndroidTest
class BlockchainTest : BaseTestCase() {
@AllureId("3644")
@DisplayName("ADA: Checking the min amount/change = 1ADA")
@Test
fun adaCheckMinAmountTest() {
val tokenName = "Cardano"
val errorSendAmount = "0.1"
val validSendAmount = "10"
val minAmount = "ADA 1.00"
val address = CARDANO_ADDRESS
val invalidAmountTitle = getResourceString(R.string.send_notification_invalid_amount_title)
val invalidAmountMessage =
getResourceString(R.string.send_notification_invalid_minimum_amount_text, minAmount, minAmount)
setupHooks(
additionalAfterSection = {
resetWireMockScenarioState(USER_TOKENS_API_SCENARIO)
}
).run {
step("Open 'Send Screen' with token: $tokenName") {
openSendScreen(tokenName)
}
step("Type '$errorSendAmount' in input text field") {
onSendScreen {
amountInputTextField.performClick()
amountInputTextField.performTextReplacement(errorSendAmount)
}
}
step("Click on 'Next' button") {
onSendScreen { nextButton.clickWithAssertion() }
}
step("Type address in input text field") {
onSendAddressScreen { addressTextField.performTextReplacement(address) }
}
step("Click on 'Next' button") {
onSendAddressScreen { nextButton.clickWithAssertion() }
}
step("Assert 'Invalid amount warning' is displayed") {
checkSendWarning(
title = invalidAmountTitle,
message = invalidAmountMessage,
)
}
step("Click on 'Amount' field") {
onSendConfirmScreen { primaryAmount.clickWithAssertion() }
}
step("Type '$validSendAmount' in input text field") {
onSendScreen {
amountInputTextField.performClick()
amountInputTextField.performTextReplacement(validSendAmount)
}
}
step("Click on 'Continue' button") {
onSendScreen { continueButton.clickWithAssertion() }
}
step("Assert 'Invalid amount warning' is not displayed") {
checkSendWarning(
title = invalidAmountTitle,
message = invalidAmountMessage,
isDisplayed = false
)
}
}
}
@AllureId("990")
@DisplayName("XRP: Check warning")
@Test
fun xrpCheckWarningTest() {
val tokenName = "XRP Ledger"
val amount = "1.00"
val currencySymbol = "XRP"
val userTokensScenarioName = "user_tokens_api"
val userTokensScenarioState = "XRP"
val rippleAccountInfoScenarioName = "ripple_account_info"
val rippleAccountInfoStartedState = "Started"
val rippleAccountInfoErrorState = "AccountNotFound"
val rippleAccountLinesScenarioName = "ripple_account_lines"
val rippleAccountLinesStartedState = "Started"
val rippleAccountLinesErrorState = "AccountNotFound"
setupHooks(
additionalAfterSection = {
resetWireMockScenarioState(userTokensScenarioName)
resetWireMockScenarioState(rippleAccountInfoScenarioName)
resetWireMockScenarioState(rippleAccountLinesScenarioName)
}
).run {
step("Set WireMock scenario: '$userTokensScenarioName' to state: '$userTokensScenarioState'") {
setWireMockScenarioState(scenarioName = userTokensScenarioName, state = userTokensScenarioState)
}
step("Set WireMock scenario: '$rippleAccountInfoScenarioName' to state: '$rippleAccountInfoErrorState'") {
setWireMockScenarioState(
scenarioName = rippleAccountInfoScenarioName,
state = rippleAccountInfoErrorState
)
}
step("Set WireMock scenario: '$rippleAccountLinesScenarioName' to state: '$rippleAccountLinesErrorState'") {
setWireMockScenarioState(
scenarioName = rippleAccountLinesScenarioName,
state = rippleAccountLinesErrorState
)
}
step("Open 'Main Screen'") {
openMainScreen()
}
step("Synchronize addresses") {
synchronizeAddresses()
}
step("Click on token with name: '$tokenName'") {
onMainScreen { tokenWithTitleAndAddress(tokenName).performClick() }
}
step("Assert 'Top up wallet' notification title is displayed") {
onTokenDetailsScreen { topUpYourWalletNotificationTitle.assertIsDisplayed() }
}
step("Assert 'Top up wallet' notification message is displayed") {
onTokenDetailsScreen {
topUpYourWalletNotificationMessage(
networkName = tokenName,
amount = amount,
currencySymbol = currencySymbol,
).assertIsDisplayed()
}
}
step("Assert 'Top up wallet' notification icon is displayed") {
onTokenDetailsScreen { topUpYourWalletNotificationIcon.assertIsDisplayed() }
}
step("Set WireMock scenario: '$userTokensScenarioName' to state: '$userTokensScenarioState'") {
setWireMockScenarioState(scenarioName = userTokensScenarioName, state = userTokensScenarioState)
}
step("Set WireMock scenario: '$rippleAccountInfoScenarioName' to state: '$rippleAccountInfoStartedState'") {
setWireMockScenarioState(
scenarioName = rippleAccountInfoScenarioName,
state = rippleAccountInfoStartedState
)
}
step("Set WireMock scenario: '$rippleAccountLinesScenarioName' to state: '$rippleAccountLinesStartedState'") {
setWireMockScenarioState(
scenarioName = rippleAccountLinesScenarioName,
state = rippleAccountLinesStartedState
)
}
step("Pull to refresh") {
pullToRefresh()
}
step("Assert 'Top up wallet' notification title is not displayed") {
onTokenDetailsScreen { topUpYourWalletNotificationTitle.assertIsNotDisplayed() }
}
step("Assert 'Top up wallet' notification message not is displayed") {
onTokenDetailsScreen {
topUpYourWalletNotificationMessage(
networkName = tokenName,
amount = amount,
currencySymbol = currencySymbol,
).assertIsNotDisplayed()
}
}
step("Assert 'Top up wallet' notification icon not is displayed") {
onTokenDetailsScreen { topUpYourWalletNotificationIcon.assertIsNotDisplayed() }
}
}
}
}