diff --git a/app/src/androidTest/kotlin/com/tangem/common/constants/TestConstants.kt b/app/src/androidTest/kotlin/com/tangem/common/constants/TestConstants.kt index f1dd77d01f..2a457f4732 100644 --- a/app/src/androidTest/kotlin/com/tangem/common/constants/TestConstants.kt +++ b/app/src/androidTest/kotlin/com/tangem/common/constants/TestConstants.kt @@ -23,10 +23,12 @@ object TestConstants { const val AZERO_RECIPIENT_ADDRESS = "5EA4p6DZdbt2vLZySML2dG3ZsnNrenEWZHnVCScQh4iq2KZo" const val TEZOS_RECIPIENT_ADDRESS = "tz1eBdC2JkU2bxgZssweLo6D3wCkWN12ioHW" const val KASPA_RECIPIENT_ADDRESS = "kaspa:qypc4aywf95rken57kclwdjvycugnacstrh5uzmu0a7pjtxas366ktgj5jzu8t6" + const val CHIA_RECIPIENT_ADDRESS = "xch1dz2vua2qvxpx6fufd98rxxv2n8j9t3au733xlht3fga4gk8ks5mqq5tzsz" const val XLM_NON_ACTIVATED_RECIPIENT_ADDRESS = "GAGMMENFDWASIHSVO4BPVIT3ZH3YNUIM4EJ6MUDJW46OVPNOJSQIJ22K" const val XLM_ACTIVATED_RECIPIENT_ADDRESS = "GDKGS3UQFUNQY34P4SIAOKKGEA3NKHH6BSAXK4HIN3BZQQRBTITJLKL6" const val XRP_NON_ACTIVATED_RECIPIENT_ADDRESS = "rvJfSnN6JzV3rhz1RRKDHnE6MYW28BaZG" const val XRP_ACTIVATED_RECIPIENT_ADDRESS = "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH" + const val DOGECOIN_RECIPIENT_ADDRESS = "DJQR3bdhBKcFGMHX2BkMCkrMFApNWNzr6V" const val WAIT_UNTIL_TIMEOUT = 20_000L const val WAIT_UNTIL_TIMEOUT_LONG = 30_000L diff --git a/app/src/androidTest/kotlin/com/tangem/tests/send/warnings/ChiaWarningsTest.kt b/app/src/androidTest/kotlin/com/tangem/tests/send/warnings/ChiaWarningsTest.kt new file mode 100644 index 0000000000..3d41a5502f --- /dev/null +++ b/app/src/androidTest/kotlin/com/tangem/tests/send/warnings/ChiaWarningsTest.kt @@ -0,0 +1,162 @@ +package com.tangem.tests.send.warnings + +import com.tangem.common.BaseTestCase +import com.tangem.common.constants.TestConstants.CHIA_RECIPIENT_ADDRESS +import com.tangem.common.constants.TestConstants.QUOTES_API_SCENARIO +import com.tangem.common.constants.TestConstants.USER_TOKENS_API_SCENARIO +import com.tangem.common.extensions.clickWithAssertion +import com.tangem.common.utils.resetWireMockScenarioState +import com.tangem.common.utils.setWireMockScenarioState +import com.tangem.scenarios.checkSendWarning +import com.tangem.scenarios.openSendScreen +import com.tangem.screens.onSendAddressScreen +import com.tangem.screens.onSendScreen +import com.tangem.wallet.R +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.Ignore +import org.junit.Test + +@HiltAndroidTest +@Ignore("[REDACTED_JIRA]") +class ChiaWarningsTest : BaseTestCase() { + private val tokenName = "Chia Network" + private val mockStateName = "Chia" + private val amountToSendUsingLessThanUTXOLimit = "20" + private val amountToSendUsingMoreThanUTXOLimit = "51" + private val amountToSendUsingExactlyUTXOLimit = "50" + private val utxoLimitAmount = "50" + + private val chiaUTXOScenarioName = "chia_get_coin_records" + private val moreThanLimitState = "more_than_50_android" + + private val warningTitle = getResourceString(R.string.send_notification_transaction_limit_title) + private val warningMessage = getResourceString( + R.string.send_notification_transaction_limit_text, + tokenName, utxoLimitAmount, utxoLimitAmount + ) + + @AllureId("4226") + @DisplayName("Warnings: check warning, when sending less than 50 utxo") + @Test + fun checkWarningWhenSendingLessThanUTXOLimit() { + setupHooks( + additionalAfterSection = { + resetWireMockScenarioState(USER_TOKENS_API_SCENARIO) + resetWireMockScenarioState(QUOTES_API_SCENARIO) + } + ).run { + step("Set WireMock scenario: '$chiaUTXOScenarioName' to state: '$moreThanLimitState'") { + setWireMockScenarioState(scenarioName = chiaUTXOScenarioName, state = moreThanLimitState) + } + step("Open 'Send Screen' with token: $tokenName") { + openSendScreen(tokenName, mockStateName) + } + step("Type '$amountToSendUsingLessThanUTXOLimit' in input text field") { + onSendScreen { + amountInputTextField.performClick() + amountInputTextField.performTextReplacement(amountToSendUsingLessThanUTXOLimit) + } + } + step("Click on 'Next' button") { + onSendScreen { nextButton.clickWithAssertion() } + } + step("Type address in input text field") { + onSendAddressScreen { addressTextField.performTextReplacement(CHIA_RECIPIENT_ADDRESS) } + } + step("Click on 'Next' button") { + onSendAddressScreen { nextButton.clickWithAssertion() } + } + step("Assert 'UTXO limit warning' is not displayed") { + checkSendWarning( + title = warningTitle, + message = warningMessage, + isDisplayed = false + ) + } + } + } + + @AllureId("4227") + @DisplayName("Warnings: check warning is not displayed, when sending exactly 50 utxo") + @Test + fun checkWarningWhenSendingEqualToUTXOLimit() { + setupHooks( + additionalAfterSection = { + resetWireMockScenarioState(USER_TOKENS_API_SCENARIO) + resetWireMockScenarioState(QUOTES_API_SCENARIO) + } + ).run { + step("Set WireMock scenario: '$chiaUTXOScenarioName' to state: '$moreThanLimitState'") { + setWireMockScenarioState(scenarioName = chiaUTXOScenarioName, state = moreThanLimitState) + } + step("Open 'Send Screen' with token: $tokenName") { + openSendScreen(tokenName, mockStateName) + } + step("Type '$amountToSendUsingExactlyUTXOLimit' in input text field") { + onSendScreen { + amountInputTextField.performClick() + amountInputTextField.performTextReplacement(amountToSendUsingExactlyUTXOLimit) + } + } + step("Click on 'Next' button") { + onSendScreen { nextButton.clickWithAssertion() } + } + step("Type address in input text field") { + onSendAddressScreen { addressTextField.performTextReplacement(CHIA_RECIPIENT_ADDRESS) } + } + step("Click on 'Next' button") { + onSendAddressScreen { nextButton.clickWithAssertion() } + } + step("Assert 'UTXO limit warning' is not displayed") { + checkSendWarning( + title = warningTitle, + message = warningMessage, + isDisplayed = false + ) + } + } + } + + @AllureId("4228") + @DisplayName("Warnings: check warning is not displayed, when sending more than 50 utxo") + @Test + fun checkWarningWhenSendingMoreThanUTXOLimit() { + setupHooks( + additionalAfterSection = { + resetWireMockScenarioState(USER_TOKENS_API_SCENARIO) + resetWireMockScenarioState(QUOTES_API_SCENARIO) + } + ).run { + step("Set WireMock scenario: '$chiaUTXOScenarioName' to state: '$moreThanLimitState'") { + setWireMockScenarioState(scenarioName = chiaUTXOScenarioName, state = moreThanLimitState) + } + step("Open 'Send Screen' with token: $tokenName") { + openSendScreen(tokenName, mockStateName) + } + step("Type '$amountToSendUsingMoreThanUTXOLimit' in input text field") { + onSendScreen { + amountInputTextField.performClick() + amountInputTextField.performTextReplacement(amountToSendUsingMoreThanUTXOLimit) + } + } + step("Click on 'Next' button") { + onSendScreen { nextButton.clickWithAssertion() } + } + step("Type address in input text field") { + onSendAddressScreen { addressTextField.performTextReplacement(CHIA_RECIPIENT_ADDRESS) } + } + step("Click on 'Next' button") { + onSendAddressScreen { nextButton.clickWithAssertion() } + } + step("Assert 'UTXO limit warning' is displayed") { + checkSendWarning( + title = warningTitle, + message = warningMessage + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/androidTest/kotlin/com/tangem/tests/send/warnings/DogecoinWarningsTest.kt b/app/src/androidTest/kotlin/com/tangem/tests/send/warnings/DogecoinWarningsTest.kt new file mode 100644 index 0000000000..5156609bb7 --- /dev/null +++ b/app/src/androidTest/kotlin/com/tangem/tests/send/warnings/DogecoinWarningsTest.kt @@ -0,0 +1,183 @@ +package com.tangem.tests.send.warnings + +import com.tangem.common.BaseTestCase +import com.tangem.common.constants.TestConstants.DOGECOIN_RECIPIENT_ADDRESS +import com.tangem.common.constants.TestConstants.QUOTES_API_SCENARIO +import com.tangem.common.constants.TestConstants.USER_TOKENS_API_SCENARIO +import com.tangem.common.extensions.clickWithAssertion +import com.tangem.common.utils.resetWireMockScenarioState +import com.tangem.scenarios.checkSendWarning +import com.tangem.scenarios.openSendScreen +import com.tangem.screens.onSendAddressScreen +import com.tangem.screens.onSendScreen +import com.tangem.wallet.R +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 DogecoinWarningsTest : BaseTestCase() { + private val tokenName = "Dogecoin" + private val amountToLeaveLessThanDust = "5.78654978" + private val amountToLeaveMoreThanDust = "5.7" + private val amountGreaterThanDust = "0.02" + private val amountLessThanDust = "0.005" + private val dustAmount = "DOGEĀ 0.01" + private val invalidAmountTitle = getResourceString(R.string.send_notification_invalid_amount_title) + private val invalidAmountMessage = getResourceString( + R.string.send_notification_invalid_minimum_amount_text, + dustAmount, dustAmount + ) + + @AllureId("4213") + @DisplayName("Warnings: warning is displayed, if after send balance is less than dust amount (Dogecoin)") + @Test + fun warningIsDisplayedWhenLeaveLessThanDust() { + setupHooks( + additionalAfterSection = { + resetWireMockScenarioState(USER_TOKENS_API_SCENARIO) + resetWireMockScenarioState(QUOTES_API_SCENARIO) + } + ).run { + step("Open 'Send Screen' with token: $tokenName") { + openSendScreen(tokenName) + } + step("Type '$amountToLeaveLessThanDust' in input text field") { + onSendScreen { + amountInputTextField.performClick() + amountInputTextField.performTextReplacement(amountToLeaveLessThanDust) + } + } + step("Click on 'Next' button") { + onSendScreen { nextButton.clickWithAssertion() } + } + step("Type address in input text field") { + onSendAddressScreen { addressTextField.performTextReplacement(DOGECOIN_RECIPIENT_ADDRESS) } + } + step("Click on 'Next' button") { + onSendAddressScreen { nextButton.clickWithAssertion() } + } + step("Assert 'Invalid amount warning' is displayed") { + checkSendWarning( + title = invalidAmountTitle, + message = invalidAmountMessage + ) + } + } + } + + @AllureId("4214") + @DisplayName("Warnings: warning is NOT displayed, if after send balance is more than dust amount (Dogecoin)") + @Test + fun warningIsNotDisplayedWhenLeaveMoreThanDust() { + setupHooks( + additionalAfterSection = { + resetWireMockScenarioState(USER_TOKENS_API_SCENARIO) + resetWireMockScenarioState(QUOTES_API_SCENARIO) + } + ).run { + step("Open 'Send Screen' with token: $tokenName") { + openSendScreen(tokenName) + } + step("Type '$amountToLeaveMoreThanDust' in input text field") { + onSendScreen { + amountInputTextField.performClick() + amountInputTextField.performTextReplacement(amountToLeaveMoreThanDust) + } + } + step("Click on 'Next' button") { + onSendScreen { nextButton.clickWithAssertion() } + } + step("Type address in input text field") { + onSendAddressScreen { addressTextField.performTextReplacement(DOGECOIN_RECIPIENT_ADDRESS) } + } + step("Click on 'Next' button") { + onSendAddressScreen { nextButton.clickWithAssertion() } + } + step("Assert 'Invalid amount warning' is not displayed") { + checkSendWarning( + title = invalidAmountTitle, + message = invalidAmountMessage, + isDisplayed = false + ) + } + } + } + + @AllureId("4211") + @DisplayName("Warnings: warning is NOT displayed, when sending more than dust amount (Dogecoin)") + @Test + fun warningIsNotDisplayedWhenSendingMoreThanDust() { + setupHooks( + additionalAfterSection = { + resetWireMockScenarioState(USER_TOKENS_API_SCENARIO) + resetWireMockScenarioState(QUOTES_API_SCENARIO) + } + ).run { + step("Open 'Send Screen' with token: $tokenName") { + openSendScreen(tokenName) + } + step("Type '$amountGreaterThanDust' in input text field") { + onSendScreen { + amountInputTextField.performClick() + amountInputTextField.performTextReplacement(amountGreaterThanDust) + } + } + step("Click on 'Next' button") { + onSendScreen { nextButton.clickWithAssertion() } + } + step("Type address in input text field") { + onSendAddressScreen { addressTextField.performTextReplacement(DOGECOIN_RECIPIENT_ADDRESS) } + } + step("Click on 'Next' button") { + onSendAddressScreen { nextButton.clickWithAssertion() } + } + step("Assert 'Invalid amount warning' is not displayed") { + checkSendWarning( + title = invalidAmountTitle, + message = invalidAmountMessage, + isDisplayed = false + ) + } + } + } + + @AllureId("4212") + @DisplayName("Warnings: warning is displayed, when sending less than dust amount (Dogecoin)") + @Test + fun warningIsDisplayedWhenSendingLessThanDust() { + setupHooks( + additionalAfterSection = { + resetWireMockScenarioState(USER_TOKENS_API_SCENARIO) + resetWireMockScenarioState(QUOTES_API_SCENARIO) + } + ).run { + step("Open 'Send Screen' with token: $tokenName") { + openSendScreen(tokenName) + } + step("Type '$amountLessThanDust' in input text field") { + onSendScreen { + amountInputTextField.performClick() + amountInputTextField.performTextReplacement(amountLessThanDust) + } + } + step("Click on 'Next' button") { + onSendScreen { nextButton.clickWithAssertion() } + } + step("Type address in input text field") { + onSendAddressScreen { addressTextField.performTextReplacement(DOGECOIN_RECIPIENT_ADDRESS) } + } + step("Click on 'Next' button") { + onSendAddressScreen { nextButton.clickWithAssertion() } + } + step("Assert 'Invalid amount warning' is displayed") { + checkSendWarning( + title = invalidAmountTitle, + message = invalidAmountMessage + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/androidTest/kotlin/com/tangem/tests/send/warnings/KaspaWarningsTest.kt b/app/src/androidTest/kotlin/com/tangem/tests/send/warnings/KaspaWarningsTest.kt new file mode 100644 index 0000000000..98b623c535 --- /dev/null +++ b/app/src/androidTest/kotlin/com/tangem/tests/send/warnings/KaspaWarningsTest.kt @@ -0,0 +1,160 @@ +package com.tangem.tests.send.warnings + +import com.tangem.common.BaseTestCase +import com.tangem.common.constants.TestConstants.KASPA_RECIPIENT_ADDRESS +import com.tangem.common.constants.TestConstants.QUOTES_API_SCENARIO +import com.tangem.common.constants.TestConstants.USER_TOKENS_API_SCENARIO +import com.tangem.common.extensions.clickWithAssertion +import com.tangem.common.utils.resetWireMockScenarioState +import com.tangem.common.utils.setWireMockScenarioState +import com.tangem.scenarios.checkSendWarning +import com.tangem.scenarios.openSendScreen +import com.tangem.screens.onSendAddressScreen +import com.tangem.screens.onSendScreen +import com.tangem.wallet.R +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 KaspaWarningsTest : BaseTestCase() { + private val tokenName = "Kaspa" + private val amountToSendUsingLessThanUTXOLimit = "8.0" + private val amountToSendUsingMoreThanUTXOLimit = "8.7" + private val amountToSendUsingExactlyUTXOLimit = "8.19968" + private val utxoLimitAmount = "84" + private val availableToSendAmount = "KASĀ 8.19968" + + private val kaspaUTXOScenarioName = "kaspa_utxo" + private val moreThanLimitState = "more_than_84_android" + + private val warningTitle = getResourceString(R.string.send_notification_transaction_limit_title) + private val warningMessage = getResourceString( + R.string.send_notification_transaction_limit_text, + tokenName, utxoLimitAmount, availableToSendAmount + ) + + @AllureId("4223") + @DisplayName("Warnings: check kaspa utxo warning, when sending less than 84 utxo") + @Test + fun checkWarningWhenSendingLessThanUTXOLimit() { + setupHooks( + additionalAfterSection = { + resetWireMockScenarioState(USER_TOKENS_API_SCENARIO) + resetWireMockScenarioState(QUOTES_API_SCENARIO) + } + ).run { + step("Set WireMock scenario: '$kaspaUTXOScenarioName' to state: '$moreThanLimitState'") { + setWireMockScenarioState(scenarioName = kaspaUTXOScenarioName, state = moreThanLimitState) + } + step("Open 'Send Screen' with token: $tokenName") { + openSendScreen(tokenName) + } + step("Type '$amountToSendUsingLessThanUTXOLimit' in input text field") { + onSendScreen { + amountInputTextField.performClick() + amountInputTextField.performTextReplacement(amountToSendUsingLessThanUTXOLimit) + } + } + step("Click on 'Next' button") { + onSendScreen { nextButton.clickWithAssertion() } + } + step("Type address in input text field") { + onSendAddressScreen { addressTextField.performTextReplacement(KASPA_RECIPIENT_ADDRESS) } + } + step("Click on 'Next' button") { + onSendAddressScreen { nextButton.clickWithAssertion() } + } + step("Assert 'UTXO limit warning' is NOT displayed") { + checkSendWarning( + title = warningTitle, + message = warningMessage, + isDisplayed = false + ) + } + } + } + + @AllureId("4225") + @DisplayName("Warnings: check kaspa utxo warning, when sending more than 84 utxo") + @Test + fun checkWarningWhenSendingMoreThanUTXOLimit() { + setupHooks( + additionalAfterSection = { + resetWireMockScenarioState(USER_TOKENS_API_SCENARIO) + resetWireMockScenarioState(QUOTES_API_SCENARIO) + } + ).run { + step("Set WireMock scenario: '$kaspaUTXOScenarioName' to state: '$moreThanLimitState'") { + setWireMockScenarioState(scenarioName = kaspaUTXOScenarioName, state = moreThanLimitState) + } + step("Open 'Send Screen' with token: $tokenName") { + openSendScreen(tokenName) + } + step("Type '$amountToSendUsingMoreThanUTXOLimit' in input text field") { + onSendScreen { + amountInputTextField.performClick() + amountInputTextField.performTextReplacement(amountToSendUsingMoreThanUTXOLimit) + } + } + step("Click on 'Next' button") { + onSendScreen { nextButton.clickWithAssertion() } + } + step("Type address in input text field") { + onSendAddressScreen { addressTextField.performTextReplacement(KASPA_RECIPIENT_ADDRESS) } + } + step("Click on 'Next' button") { + onSendAddressScreen { nextButton.clickWithAssertion() } + } + step("Assert 'UTXO limit warning' is displayed") { + checkSendWarning( + title = warningTitle, + message = warningMessage + ) + } + } + } + + @AllureId("4224") + @DisplayName("Warnings: check kaspa utxo warning, when sending exactly 84 utxo") + @Test + fun checkWarningWhenSendingEqualToUTXOLimit() { + setupHooks( + additionalAfterSection = { + resetWireMockScenarioState(USER_TOKENS_API_SCENARIO) + resetWireMockScenarioState(QUOTES_API_SCENARIO) + } + ).run { + step("Set WireMock scenario: '$kaspaUTXOScenarioName' to state: '$moreThanLimitState'") { + setWireMockScenarioState(scenarioName = kaspaUTXOScenarioName, state = moreThanLimitState) + } + step("Open 'Send Screen' with token: $tokenName") { + openSendScreen(tokenName) + } + step("Type '$amountToSendUsingExactlyUTXOLimit' in input text field") { + onSendScreen { + amountInputTextField.performClick() + amountInputTextField.performTextReplacement(amountToSendUsingExactlyUTXOLimit) + } + } + step("Click on 'Next' button") { + onSendScreen { nextButton.clickWithAssertion() } + } + step("Type address in input text field") { + onSendAddressScreen { addressTextField.performTextReplacement(KASPA_RECIPIENT_ADDRESS) } + } + step("Click on 'Next' button") { + onSendAddressScreen { nextButton.clickWithAssertion() } + } + step("Assert 'UTXO limit warning' is displayed") { + checkSendWarning( + title = warningTitle, + message = warningMessage, + isDisplayed = false + ) + } + } + } +}