diff --git a/app/src/androidTest/kotlin/com/tangem/common/BaseTestCase.kt b/app/src/androidTest/kotlin/com/tangem/common/BaseTestCase.kt index 5322b95a0c..feebdbf578 100644 --- a/app/src/androidTest/kotlin/com/tangem/common/BaseTestCase.kt +++ b/app/src/androidTest/kotlin/com/tangem/common/BaseTestCase.kt @@ -145,7 +145,7 @@ abstract class BaseTestCase : TestCase( private fun setFeatureToggles() { runBlocking { with(featureTogglesManager as MutableFeatureTogglesManager) { - changeToggle("WALLET_CONNECT_REDESIGN_ENABLED", true) + changeToggle("NEW_TOKEN_RECEIVE_ENABLED", true) changeToggle("WALLET_BALANCE_FETCHER_ENABLED", true) changeToggle("SWAP_REDESIGN_ENABLED", true) changeToggle("NEW_ONRAMP_MAIN_ENABLED", true) diff --git a/app/src/androidTest/kotlin/com/tangem/scenarios/BaseScenarios.kt b/app/src/androidTest/kotlin/com/tangem/scenarios/BaseScenarios.kt index d07178f3cb..1761e307c2 100644 --- a/app/src/androidTest/kotlin/com/tangem/scenarios/BaseScenarios.kt +++ b/app/src/androidTest/kotlin/com/tangem/scenarios/BaseScenarios.kt @@ -1,5 +1,6 @@ package com.tangem.scenarios +import androidx.compose.ui.test.hasText import com.tangem.common.BaseTestCase import com.tangem.common.extensions.clickWithAssertion import com.tangem.domain.models.scan.ProductType @@ -7,6 +8,7 @@ import com.tangem.screens.* import com.tangem.screens.AlreadyUsedWalletDialogPageObject.thisIsMyWalletButton import com.tangem.tap.domain.sdk.mocks.MockContent import com.tangem.tap.domain.sdk.mocks.MockProvider +import com.tangem.utils.StringsSigns.DASH_SIGN import io.qameta.allure.kotlin.Allure.step fun BaseTestCase.scanCard( @@ -65,12 +67,29 @@ fun BaseTestCase.openMainScreen( } } -fun BaseTestCase.synchronizeAddresses(balance: String) { +fun BaseTestCase.synchronizeAddresses( + balance: String? = null, + isBalanceAvailable: Boolean = true +) { step("Click on 'Synchronize addresses' button") { onMainScreen { synchronizeAddressesButton.clickWithAssertion() } } - step("Assert wallet balance = '$balance'") { - onMainScreen { totalBalanceText.assertTextContains(balance) } + + when { + !isBalanceAvailable -> step("Assert wallet balance = '$DASH_SIGN'") { + onMainScreen { totalBalanceText.assertTextContains(DASH_SIGN) } + } + balance != null -> { + step("Assert wallet balance != '$DASH_SIGN'") { + onMainScreen { totalBalanceText.assert(!hasText(DASH_SIGN)) } + } + step("Assert wallet balance = '$balance'") { + onMainScreen { totalBalanceText.assertTextContains(balance) } + } + } + else -> step("Assert wallet balance != '$DASH_SIGN'") { + onMainScreen { totalBalanceText.assert(!hasText(DASH_SIGN)) } + } } } diff --git a/app/src/androidTest/kotlin/com/tangem/screens/SendConfirmPageObject.kt b/app/src/androidTest/kotlin/com/tangem/screens/SendConfirmPageObject.kt index 32772d416d..5821029a67 100644 --- a/app/src/androidTest/kotlin/com/tangem/screens/SendConfirmPageObject.kt +++ b/app/src/androidTest/kotlin/com/tangem/screens/SendConfirmPageObject.kt @@ -5,6 +5,7 @@ import com.tangem.common.BaseTestCase import com.tangem.core.ui.R import com.tangem.core.ui.test.BaseButtonTestTags import com.tangem.core.ui.test.NotificationTestTags +import com.tangem.core.ui.test.SendConfirmScreenTestTags import com.tangem.core.ui.test.TopAppBarTestTags import io.github.kakaocup.compose.node.element.ComposeScreen import io.github.kakaocup.compose.node.element.ComposeScreen.Companion.onComposeScreen @@ -34,6 +35,11 @@ class SendConfirmPageObject(semanticsProvider: SemanticsNodeInteractionsProvider useUnmergedTree = true } + val sendingText: KNode = child { + hasTestTag(SendConfirmScreenTestTags.SENDING_TEXT) + useUnmergedTree = true + } + fun minimumSendAmountErrorIcon(amount: String): KNode = child { hasAnySibling( withText( diff --git a/app/src/androidTest/kotlin/com/tangem/screens/ChromeBrowserPageObject.kt b/app/src/androidTest/kotlin/com/tangem/screens/ThirdPartyAppPageObject.kt similarity index 96% rename from app/src/androidTest/kotlin/com/tangem/screens/ChromeBrowserPageObject.kt rename to app/src/androidTest/kotlin/com/tangem/screens/ThirdPartyAppPageObject.kt index 78c2fa41dd..a294d2464d 100644 --- a/app/src/androidTest/kotlin/com/tangem/screens/ChromeBrowserPageObject.kt +++ b/app/src/androidTest/kotlin/com/tangem/screens/ThirdPartyAppPageObject.kt @@ -7,7 +7,7 @@ import androidx.test.uiautomator.UiObject2 import androidx.test.uiautomator.Until import com.kaspersky.kaspresso.screens.KScreen -object ChromeBrowserPageObject : KScreen() { +object ThirdPartyAppPageObject : KScreen() { override val layoutId: Int? = null override val viewClass: Class<*>? = null diff --git a/app/src/androidTest/kotlin/com/tangem/tests/BlockchainTest.kt b/app/src/androidTest/kotlin/com/tangem/tests/BlockchainTest.kt index d1ca4801ee..28b46d345c 100644 --- a/app/src/androidTest/kotlin/com/tangem/tests/BlockchainTest.kt +++ b/app/src/androidTest/kotlin/com/tangem/tests/BlockchainTest.kt @@ -9,10 +9,6 @@ import com.tangem.common.utils.setWireMockScenarioState import com.tangem.scenarios.openMainScreen import com.tangem.scenarios.synchronizeAddresses import com.tangem.screens.* -import com.tangem.screens.onMainScreen -import com.tangem.screens.onSendAddressScreen -import com.tangem.screens.onSendScreen -import com.tangem.screens.onTokenDetailsScreen import dagger.hilt.android.testing.HiltAndroidTest import io.qameta.allure.kotlin.AllureId import io.qameta.allure.kotlin.junit4.DisplayName @@ -26,7 +22,6 @@ class BlockchainTest : BaseTestCase() { @Test fun adaCheckMinAmountTest() { val tokenName = "Cardano" - val balance = "$0.00" val errorSendAmount = "0.1" val validSendAmount = "10" val minAmount = "ADA 1.00" @@ -46,7 +41,7 @@ class BlockchainTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Click on token with name: '$tokenName'") { onMainScreen { tokenWithTitleAndAddress(tokenName).clickWithAssertion() } @@ -121,7 +116,6 @@ class BlockchainTest : BaseTestCase() { val tokenName = "XRP Ledger" val amount = "1.00" val currencySymbol = "XRP" - val balance = "$0.00" val userTokensScenarioName = "user_tokens_api" val userTokensScenarioState = "XRP" val rippleAccountInfoScenarioName = "ripple_account_info" @@ -151,7 +145,7 @@ class BlockchainTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Click on token with name: '$tokenName'") { onMainScreen { tokenWithTitleAndAddress(tokenName).performClick() } diff --git a/app/src/androidTest/kotlin/com/tangem/tests/BuyTokenTest.kt b/app/src/androidTest/kotlin/com/tangem/tests/BuyTokenTest.kt index 1cdfa840e5..da13bb553c 100644 --- a/app/src/androidTest/kotlin/com/tangem/tests/BuyTokenTest.kt +++ b/app/src/androidTest/kotlin/com/tangem/tests/BuyTokenTest.kt @@ -1,7 +1,6 @@ package com.tangem.tests import com.tangem.common.BaseTestCase -import com.tangem.common.constants.TestConstants.TOTAL_BALANCE import com.tangem.common.extensions.clickWithAssertion import com.tangem.common.utils.resetWireMockScenarioState import com.tangem.common.utils.setWireMockScenarioState @@ -22,7 +21,6 @@ class BuyTokenTest : BaseTestCase() { fun errorInProvidersLoadingTest() { val scenarioName = "payment_methods" val tokenTitle = "Bitcoin" - val balance = TOTAL_BALANCE setupHooks( additionalAfterSection = { @@ -39,7 +37,7 @@ class BuyTokenTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Click on 'Buy' button") { onMainScreen { buyButton.clickWithAssertion() } @@ -68,7 +66,6 @@ class BuyTokenTest : BaseTestCase() { fun validateCurrencySelectorTest() { setupHooks().run { val tokenTitle = "Polygon" - val balance = TOTAL_BALANCE val popularFiatsTitle = "Popular Fiats" val otherCurrenciesTitle = "Other currencies" val australianDollar = "AUD" @@ -84,7 +81,7 @@ class BuyTokenTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Click on 'Buy' button") { onMainScreen { buyButton.clickWithAssertion() } @@ -146,7 +143,6 @@ class BuyTokenTest : BaseTestCase() { fun validateBuyTokenScreenTest() { setupHooks().run { val tokenTitle = "Polygon" - val balance = TOTAL_BALANCE val euro = "EUR" val fiatAmount = "1" val tokenAmount = "~488.24938338 POL" @@ -160,7 +156,7 @@ class BuyTokenTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Click on 'Buy' button") { onMainScreen { buyButton.clickWithAssertion() } @@ -237,7 +233,6 @@ class BuyTokenTest : BaseTestCase() { fun validateResidenceSettingsScreenTest() { setupHooks().run { val tokenTitle = "Polygon" - val balance = TOTAL_BALANCE val country = "Albania" val unavailableCountry = "Lebanon" val scenarioName = "payment_methods" @@ -250,7 +245,7 @@ class BuyTokenTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Click on 'Buy' button") { onMainScreen { buyButton.clickWithAssertion() } @@ -318,7 +313,6 @@ class BuyTokenTest : BaseTestCase() { fun validateProvidersScreenTest() { setupHooks().run { val tokenTitle = "Polygon" - val balance = TOTAL_BALANCE val paymentMethod = "Invoice Revolut Pay" val fiatAmount = "1" val providerNameMercuryo = "Mercuryo" @@ -333,7 +327,7 @@ class BuyTokenTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Click on 'Buy' button") { onMainScreen { buyButton.clickWithAssertion() } @@ -407,7 +401,6 @@ class BuyTokenTest : BaseTestCase() { fun validatePaymentMethodScreenTest() { setupHooks().run { val tokenTitle = "Polygon" - val balance = TOTAL_BALANCE val card = "Card" val googlePay = "Google Pay" val invoiceRevolutPay = "Invoice Revolut Pay" @@ -424,7 +417,7 @@ class BuyTokenTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Click on 'Buy' button") { onMainScreen { buyButton.clickWithAssertion() } diff --git a/app/src/androidTest/kotlin/com/tangem/tests/FeedbackTest.kt b/app/src/androidTest/kotlin/com/tangem/tests/FeedbackTest.kt index 2264356999..210063dedb 100644 --- a/app/src/androidTest/kotlin/com/tangem/tests/FeedbackTest.kt +++ b/app/src/androidTest/kotlin/com/tangem/tests/FeedbackTest.kt @@ -3,7 +3,6 @@ package com.tangem.tests import androidx.test.internal.runner.junit4.statement.UiThreadStatement.runOnUiThread import com.tangem.common.BaseTestCase import com.tangem.common.constants.TestConstants.RECIPIENT_ADDRESS -import com.tangem.common.constants.TestConstants.TOTAL_BALANCE import com.tangem.common.constants.TestConstants.WAIT_UNTIL_TIMEOUT import com.tangem.common.core.TangemSdkError import com.tangem.common.extensions.clickWithAssertion @@ -28,6 +27,8 @@ class FeedbackTest : BaseTestCase() { @DisplayName("Send feedback: from details") @Test fun sendFeedbackFromDetailsTest() { + val gmailText = "Welcome to Gmail" + setupHooks( additionalAfterSection = { device.uiDevice.pressBack() @@ -42,8 +43,8 @@ class FeedbackTest : BaseTestCase() { step("Click 'Contact support' button") { onDetailsScreen { contactSupportButton.clickWithAssertion() } } - step("Check 'Contact support' intent is called") { - checkSendEMailIntentCalled() + step("Assert 'Gmail' app is open") { + ThirdPartyAppPageObject { assertElementWithTextExists(gmailText) } } } } @@ -52,10 +53,10 @@ class FeedbackTest : BaseTestCase() { @DisplayName("Send feedback: failed transaction") @Test fun sendFeedbackFromFailedTransactionTest() { - val balance = TOTAL_BALANCE val tokenName = "Polygon" val recipientAddress = RECIPIENT_ADDRESS val sendAmount = "1" + val gmailText = "Welcome to Gmail" setupHooks( additionalAfterSection = { @@ -66,7 +67,7 @@ class FeedbackTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Click on token with name: '$tokenName'") { onMainScreen { tokenWithTitleAndAddress(tokenName).clickWithAssertion() } @@ -92,6 +93,9 @@ class FeedbackTest : BaseTestCase() { step("Click 'Next' button") { onSendAddressScreen { nextButton.clickWithAssertion() } } + step("Assert sanding text is displayed") { + onSendConfirmScreen { sendingText.assertIsDisplayed() } + } step("Click 'Send' button") { waitForIdle() onSendConfirmScreen { @@ -100,6 +104,7 @@ class FeedbackTest : BaseTestCase() { } } step("Check 'Failed transaction' dialog") { + waitForIdle() flakySafely(WAIT_UNTIL_TIMEOUT) { checkFailedTransactionDialog() } @@ -107,8 +112,8 @@ class FeedbackTest : BaseTestCase() { step("Click on 'Support' button") { onFailedTransactionDialog { supportButton.performClick() } } - step("Check 'Contact support' intent is called") { - checkSendEMailIntentCalled() + step("Assert 'Gmail' app is open") { + ThirdPartyAppPageObject { assertElementWithTextExists(gmailText) } } } } @@ -117,6 +122,8 @@ class FeedbackTest : BaseTestCase() { @DisplayName("Send feedback: from 'Warning' dialog after card scan") @Test fun sendFeedbackFromScanScreenTest() { + val gmailText = "Welcome to Gmail" + setupHooks( additionalAfterSection = { device.uiDevice.pressBack() @@ -145,8 +152,8 @@ class FeedbackTest : BaseTestCase() { step("Click on 'Request support' button") { ScanWarningDialogPageObject { requestSupportButton.click() } } - step("Check 'Contact support' intent is called") { - checkSendEMailIntentCalled() + step("Assert 'Gmail' app is open") { + ThirdPartyAppPageObject { assertElementWithTextExists(gmailText) } } } } @@ -155,6 +162,8 @@ class FeedbackTest : BaseTestCase() { @DisplayName("Send feedback: from scan already used wallet alert dialog") @Test fun sendFeedbackAfterScanAlreadyUsedWalletTest() { + val gmailText = "Welcome to Gmail" + setupHooks( additionalAfterSection = { device.uiDevice.pressBack() @@ -175,8 +184,8 @@ class FeedbackTest : BaseTestCase() { step("Click on 'Request support' button") { AlreadyUsedWalletDialogPageObject { requestSupportButton.click() } } - step("Check 'Contact support' intent is called") { - checkSendEMailIntentCalled() + step("Assert 'Gmail' app is open") { + ThirdPartyAppPageObject { assertElementWithTextExists(gmailText) } } } } diff --git a/app/src/androidTest/kotlin/com/tangem/tests/HideTokenTest.kt b/app/src/androidTest/kotlin/com/tangem/tests/HideTokenTest.kt index fa4519eede..04d5e8849f 100644 --- a/app/src/androidTest/kotlin/com/tangem/tests/HideTokenTest.kt +++ b/app/src/androidTest/kotlin/com/tangem/tests/HideTokenTest.kt @@ -1,7 +1,6 @@ package com.tangem.tests import com.tangem.common.BaseTestCase -import com.tangem.common.constants.TestConstants.TOTAL_BALANCE import com.tangem.common.extensions.clickWithAssertion import com.tangem.scenarios.openMainScreen import com.tangem.scenarios.synchronizeAddresses @@ -19,13 +18,12 @@ class HideTokenTest : BaseTestCase() { @Test fun hideWalletTokenByHideButtonTest() { val tokenTitle = "Polygon" - val balance = TOTAL_BALANCE setupHooks().run { step("Open 'Main Screen'") { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Click on token with name: '$tokenTitle'") { onMainScreen { tokenWithTitleAndAddress(tokenTitle).clickWithAssertion() } diff --git a/app/src/androidTest/kotlin/com/tangem/tests/OrganizeTokensTest.kt b/app/src/androidTest/kotlin/com/tangem/tests/OrganizeTokensTest.kt index 76d0d0f0f6..e4ac654ef2 100644 --- a/app/src/androidTest/kotlin/com/tangem/tests/OrganizeTokensTest.kt +++ b/app/src/androidTest/kotlin/com/tangem/tests/OrganizeTokensTest.kt @@ -2,7 +2,6 @@ package com.tangem.tests import androidx.compose.ui.test.onAllNodesWithText import com.tangem.common.BaseTestCase -import com.tangem.common.constants.TestConstants.TOTAL_BALANCE import com.tangem.common.extensions.SwipeDirection import com.tangem.common.extensions.clickWithAssertion import com.tangem.common.extensions.swipeVertical @@ -92,13 +91,12 @@ class OrganizeTokensTest : BaseTestCase() { setupHooks().run { val ethereumTitle = "Ethereum" val bitcoinTitle = "Bitcoin" - val balance = TOTAL_BALANCE step("Open 'Main Screen'") { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Check positions of tokens on 'Main Screen'") { onMainScreen { @@ -179,13 +177,12 @@ class OrganizeTokensTest : BaseTestCase() { val bitcoinTitle = "Bitcoin" val polygonTitle = "Polygon" val polExMaticTitle = "POL (ex-MATIC)" - val balance = TOTAL_BALANCE step("Open 'Main Screen'") { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Check positions of tokens on 'Main Screen'") { onMainScreen { diff --git a/app/src/androidTest/kotlin/com/tangem/tests/SendTest.kt b/app/src/androidTest/kotlin/com/tangem/tests/SendTest.kt index b4a7286a5f..9bf7545be1 100644 --- a/app/src/androidTest/kotlin/com/tangem/tests/SendTest.kt +++ b/app/src/androidTest/kotlin/com/tangem/tests/SendTest.kt @@ -25,7 +25,6 @@ class SendTest : BaseTestCase() { val currencyName = "POL (ex-MATIC)" val feeCurrencyName = "Ethereum" val feeCurrencySymbol = "ETH" - val balance = "$763.55" val scenarioName = "eth_network_balance" val scenarioState = "Empty" @@ -42,7 +41,7 @@ class SendTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Swipe up") { swipeVertical(SwipeDirection.UP) diff --git a/app/src/androidTest/kotlin/com/tangem/tests/StakingTest.kt b/app/src/androidTest/kotlin/com/tangem/tests/StakingTest.kt index 29404214c2..f91fe7df1d 100644 --- a/app/src/androidTest/kotlin/com/tangem/tests/StakingTest.kt +++ b/app/src/androidTest/kotlin/com/tangem/tests/StakingTest.kt @@ -1,7 +1,6 @@ package com.tangem.tests import com.tangem.common.BaseTestCase -import com.tangem.common.constants.TestConstants.TOTAL_BALANCE import com.tangem.common.extensions.SwipeDirection import com.tangem.common.extensions.clickWithAssertion import com.tangem.common.extensions.swipeVertical @@ -22,7 +21,6 @@ class StakingTest : BaseTestCase() { @Test fun validateStakingBlockTest() { val tokenTitle = "POL (ex-MATIC)" - val balance = "$3,299.37" val scenarioName = "staking_eth_pol_balances_android" val scenarioState = "Staked" @@ -40,7 +38,7 @@ class StakingTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Assert 'Organize tokens' button is displayed") { onMainScreen { organizeTokensButton().assertIsDisplayed() } @@ -80,7 +78,6 @@ class StakingTest : BaseTestCase() { @Test fun validateStakingMoreScreensTest() { val tokenTitle = "POL (ex-MATIC)" - val balance = "$3,299.37" val scenarioName = "staking_eth_pol_balances_android" val scenarioState = "Staked" val stakingAmount = "1" @@ -99,7 +96,7 @@ class StakingTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Assert 'Organize tokens' button is displayed") { onMainScreen { organizeTokensButton().assertIsDisplayed() } @@ -139,7 +136,6 @@ class StakingTest : BaseTestCase() { @Test fun validateStakingScreensTest() { val tokenTitle = "POL (ex-MATIC)" - val balance = TOTAL_BALANCE val scenarioName = "staking_eth_pol_balances_android" val scenarioState = "Started" val stakingAmount = "1" @@ -158,7 +154,7 @@ class StakingTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Assert 'Organize tokens' button is displayed") { onMainScreen { organizeTokensButton().assertIsDisplayed() } diff --git a/app/src/androidTest/kotlin/com/tangem/tests/SwapTokenTest.kt b/app/src/androidTest/kotlin/com/tangem/tests/SwapTokenTest.kt index e30447031f..014b42a242 100644 --- a/app/src/androidTest/kotlin/com/tangem/tests/SwapTokenTest.kt +++ b/app/src/androidTest/kotlin/com/tangem/tests/SwapTokenTest.kt @@ -4,16 +4,15 @@ import androidx.compose.ui.test.hasText import com.tangem.common.BaseTestCase import com.tangem.common.annotations.ApiEnv import com.tangem.common.annotations.ApiEnvConfig -import com.tangem.common.constants.TestConstants.TOTAL_BALANCE import com.tangem.common.constants.TestConstants.WAIT_UNTIL_TIMEOUT import com.tangem.common.constants.TestConstants.WAIT_UNTIL_TIMEOUT_LONG import com.tangem.common.extensions.* -import com.tangem.common.utils.* +import com.tangem.common.utils.resetWireMockScenarios import com.tangem.datasource.api.common.config.ApiConfig import com.tangem.datasource.api.common.config.ApiEnvironment -import com.tangem.screens.* import com.tangem.scenarios.openMainScreen import com.tangem.scenarios.synchronizeAddresses +import com.tangem.screens.* import dagger.hilt.android.testing.HiltAndroidTest import io.qameta.allure.kotlin.AllureId import io.qameta.allure.kotlin.junit4.DisplayName @@ -31,7 +30,6 @@ class SwapTokenTest : BaseTestCase() { fun networkFeeTest() { val inputAmount = "100" val tokenTitle = "Polygon" - val balance = TOTAL_BALANCE setupHooks().run { @@ -40,7 +38,7 @@ class SwapTokenTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Click on token with name: '$tokenTitle'") { onMainScreen { tokenWithTitleAndAddress(tokenTitle).clickWithAssertion() } @@ -115,13 +113,12 @@ class SwapTokenTest : BaseTestCase() { } ).run { val tokenTitle = "Polygon" - val balance = TOTAL_BALANCE step("Open 'Main Screen'") { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Click on token with name: '$tokenTitle'") { onMainScreen { tokenWithTitleAndAddress(tokenTitle).clickWithAssertion() } @@ -164,13 +161,12 @@ class SwapTokenTest : BaseTestCase() { val inputAmount = "100" setupHooks().run { val tokenTitle = "Polygon" - val balance = TOTAL_BALANCE step("Open 'Main Screen'") { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Click on token with name: '$tokenTitle'") { onMainScreen { tokenWithTitleAndAddress(tokenTitle).clickWithAssertion() } diff --git a/app/src/androidTest/kotlin/com/tangem/tests/WalletConnectTest.kt b/app/src/androidTest/kotlin/com/tangem/tests/WalletConnectTest.kt index 13fa9b6a47..60dd5885f1 100644 --- a/app/src/androidTest/kotlin/com/tangem/tests/WalletConnectTest.kt +++ b/app/src/androidTest/kotlin/com/tangem/tests/WalletConnectTest.kt @@ -1,13 +1,15 @@ package com.tangem.tests import com.tangem.common.BaseTestCase -import com.tangem.common.constants.TestConstants.TOTAL_BALANCE import com.tangem.common.constants.TestConstants.WAIT_UNTIL_TIMEOUT import com.tangem.common.extensions.clickWithAssertion import com.tangem.common.utils.getWcUri import com.tangem.common.utils.setClipboardText import com.tangem.scenarios.* -import com.tangem.screens.* +import com.tangem.screens.onWalletConnectBottomSheet +import com.tangem.screens.onWalletConnectDetailsBottomSheet +import com.tangem.screens.onWalletConnectScanQrScreen +import com.tangem.screens.onWalletConnectScreen import com.tangem.wallet.BuildConfig import dagger.hilt.android.testing.HiltAndroidTest import io.qameta.allure.kotlin.AllureId @@ -23,7 +25,6 @@ class WalletConnectTest : BaseTestCase() { @Ignore("TODO [REDACTED_JIRA] React app deeplink doesn't work") @Test fun openWalletConnectSessionOnMainScreenTest() { - val balance = TOTAL_BALANCE val dAppName = "React App" val deepLinkUri = getWcUri() @@ -32,7 +33,7 @@ class WalletConnectTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Create WC session buy deeplink") { openAppByDeepLink(deepLinkUri) @@ -81,7 +82,6 @@ class WalletConnectTest : BaseTestCase() { @Ignore("TODO [REDACTED_JIRA] React app deeplink doesn't work") @Test fun openWalletConnectSessionNotOnMainScreenTest() { - val balance = TOTAL_BALANCE val dAppName = "React App" val deepLinkUri = getWcUri() @@ -90,7 +90,7 @@ class WalletConnectTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Open 'Wallet Connect' screen") { openWalletConnectScreen() @@ -139,7 +139,6 @@ class WalletConnectTest : BaseTestCase() { @Ignore("TODO [REDACTED_JIRA] React app deeplink doesn't work") @Test fun openWalletConnectSessionTest() { - val balance = TOTAL_BALANCE val dAppName = "React App" val packageName = BuildConfig.APPLICATION_ID val deepLinkUri = getWcUri() @@ -149,7 +148,7 @@ class WalletConnectTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Kill app") { device.apps.kill(packageName) @@ -194,7 +193,6 @@ class WalletConnectTest : BaseTestCase() { @Ignore("TODO [REDACTED_JIRA] React app deeplink doesn't work") @Test fun openWalletConnectSessionByClipboardLinkTest() { - val balance = TOTAL_BALANCE val dAppName = "React App" val context = device.context val deepLinkUri = getWcUri() @@ -207,7 +205,7 @@ class WalletConnectTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Open 'Wallet Connect' screen") { openWalletConnectScreen() diff --git a/app/src/androidTest/kotlin/com/tangem/tests/actionButtons/MainScreenActionButtonsTest.kt b/app/src/androidTest/kotlin/com/tangem/tests/actionButtons/MainScreenActionButtonsTest.kt index 76debeb60a..8601d27658 100644 --- a/app/src/androidTest/kotlin/com/tangem/tests/actionButtons/MainScreenActionButtonsTest.kt +++ b/app/src/androidTest/kotlin/com/tangem/tests/actionButtons/MainScreenActionButtonsTest.kt @@ -3,17 +3,13 @@ package com.tangem.tests.actionButtons import androidx.compose.ui.test.longClick import com.tangem.common.BaseTestCase import com.tangem.common.constants.TestConstants.BITCOIN_ADDRESS -import com.tangem.common.constants.TestConstants.TOTAL_BALANCE +import com.tangem.common.constants.TestConstants.WAIT_UNTIL_TIMEOUT import com.tangem.common.extensions.clickWithAssertion import com.tangem.common.utils.assertClipboardTextEquals import com.tangem.common.utils.clearClipboard import com.tangem.scenarios.openMainScreen import com.tangem.scenarios.synchronizeAddresses import com.tangem.screens.* -import com.tangem.screens.onTokenActionsBottomSheet -import com.tangem.screens.onBuyTokenDetailsScreen -import com.tangem.screens.onDialog -import com.tangem.screens.onMainScreen import dagger.hilt.android.testing.HiltAndroidTest import io.qameta.allure.kotlin.AllureId import io.qameta.allure.kotlin.junit4.DisplayName @@ -27,13 +23,12 @@ class MainScreenActionButtonsTest : BaseTestCase() { @Test fun actionButtonsValidateLongTapUiTest() { val tokenTitle = "Ethereum" - val balance = TOTAL_BALANCE setupHooks().run { step("Open 'Main Screen'") { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Long click on token with name: '$tokenTitle'") { waitForIdle() @@ -78,7 +73,6 @@ class MainScreenActionButtonsTest : BaseTestCase() { @Test fun clickOnCopyAddressButtonTest() { val tokenTitle = "Bitcoin" - val balance = TOTAL_BALANCE val bitcoinAddress = BITCOIN_ADDRESS setupHooks( @@ -93,7 +87,7 @@ class MainScreenActionButtonsTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Long click on token with name: '$tokenTitle'") { waitForIdle() @@ -128,14 +122,13 @@ class MainScreenActionButtonsTest : BaseTestCase() { fun clickOnBuyButtonTest() { val tokenTitle = "Bitcoin" val tokenSymbol = "BTC" - val balance = TOTAL_BALANCE setupHooks().run { step("Open 'Main Screen'") { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Long click on token with name: '$tokenTitle'") { waitForIdle() @@ -182,14 +175,13 @@ class MainScreenActionButtonsTest : BaseTestCase() { fun clickOnSwapButtonTest() { val tokenTitle = "Ethereum" val tokenSymbol = "ETH" - val balance = TOTAL_BALANCE setupHooks().run { step("Open 'Main Screen'") { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Long click on token with name: '$tokenTitle'") { waitForIdle() @@ -226,14 +218,13 @@ class MainScreenActionButtonsTest : BaseTestCase() { fun clickOnSendButtonTest() { val tokenTitle = "Ethereum" val tokenSymbol = "ETH" - val balance = TOTAL_BALANCE setupHooks().run { step("Open 'Main Screen'") { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Long click on token with name: '$tokenTitle'") { waitForIdle() @@ -265,14 +256,13 @@ class MainScreenActionButtonsTest : BaseTestCase() { @Test fun clickOnReceiveButtonTest() { val tokenTitle = "Bitcoin" - val balance = TOTAL_BALANCE setupHooks().run { step("Open 'Main Screen'") { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Long click on token with name: '$tokenTitle'") { waitForIdle() @@ -292,7 +282,12 @@ class MainScreenActionButtonsTest : BaseTestCase() { onTokenActionsBottomSheet { receiveButton.performClick() } } step("Assert 'Token receive warning' bottom sheet is displayed") { - onTokenReceiveWarningBottomSheet { bottomSheet.assertIsDisplayed() } + waitForIdle() + flakySafely(WAIT_UNTIL_TIMEOUT) { + onTokenReceiveWarningBottomSheet { + bottomSheet.assertIsDisplayed() + } + } } step("Click on 'Got it' button") { onTokenReceiveWarningBottomSheet { gotItButton.performClick() } @@ -326,8 +321,6 @@ class MainScreenActionButtonsTest : BaseTestCase() { @Test fun clickOnSellButtonTest() { val tokenTitle = "Ethereum" - val tokenSymbol = "ETH" - val balance = TOTAL_BALANCE val url = "sell.moonpay.com" val useWithoutAccount = "Use without an account" @@ -336,7 +329,7 @@ class MainScreenActionButtonsTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Long click on token with name: '$tokenTitle'") { waitForIdle() @@ -356,18 +349,15 @@ class MainScreenActionButtonsTest : BaseTestCase() { onTokenActionsBottomSheet { sellButton.performClick() } } step("Assert Chrome Browser is opened") { - ChromeBrowserPageObject { assertChromeIsOpened() } + ThirdPartyAppPageObject { assertChromeIsOpened() } } - if (ChromeBrowserPageObject.isElementWithTextExists(useWithoutAccount)) { + if (ThirdPartyAppPageObject.isElementWithTextExists(useWithoutAccount)) { step("Click on '$useWithoutAccount' button on Chrome browser") { - ChromeBrowserPageObject { clickOnElementWithText(useWithoutAccount) } + ThirdPartyAppPageObject { clickOnElementWithText(useWithoutAccount) } } } step("Assert url contains: '$url'") { - ChromeBrowserPageObject { assertUrlContains(url) } - } - step("Assert token symbol '$tokenSymbol' is displayed") { - ChromeBrowserPageObject { assertElementWithTextExists(tokenSymbol) } + ThirdPartyAppPageObject { assertUrlContains(url) } } } } @@ -377,14 +367,13 @@ class MainScreenActionButtonsTest : BaseTestCase() { @Test fun assertSellButtonIsNotDisplayedTest() { val tokenTitle = "Bitcoin" - val balance = TOTAL_BALANCE setupHooks().run { step("Open 'Main Screen'") { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(balance) + synchronizeAddresses() } step("Long click on token with name: '$tokenTitle'") { waitForIdle() diff --git a/app/src/androidTest/kotlin/com/tangem/tests/balance/TotalBalanceLongTapTest.kt b/app/src/androidTest/kotlin/com/tangem/tests/balance/TotalBalanceLongTapTest.kt index 05e052bdd4..7eea7bf682 100644 --- a/app/src/androidTest/kotlin/com/tangem/tests/balance/TotalBalanceLongTapTest.kt +++ b/app/src/androidTest/kotlin/com/tangem/tests/balance/TotalBalanceLongTapTest.kt @@ -2,7 +2,6 @@ package com.tangem.tests.balance import androidx.compose.ui.test.longClick import com.tangem.common.BaseTestCase -import com.tangem.common.constants.TestConstants.TOTAL_BALANCE import com.tangem.scenarios.openMainScreen import com.tangem.scenarios.synchronizeAddresses import com.tangem.screens.onMainScreen @@ -23,7 +22,7 @@ class TotalBalanceLongTapTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(TOTAL_BALANCE) + synchronizeAddresses() } step("Long tap on total balance block") { onMainScreen { diff --git a/app/src/androidTest/kotlin/com/tangem/tests/balance/TotalBalanceUnavailableTest.kt b/app/src/androidTest/kotlin/com/tangem/tests/balance/TotalBalanceUnavailableTest.kt index f44bf4ffa4..f02b33f8c2 100644 --- a/app/src/androidTest/kotlin/com/tangem/tests/balance/TotalBalanceUnavailableTest.kt +++ b/app/src/androidTest/kotlin/com/tangem/tests/balance/TotalBalanceUnavailableTest.kt @@ -51,7 +51,7 @@ class TotalBalanceUnavailableTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(DASH_SIGN) + synchronizeAddresses(isBalanceAvailable = false) } step("Assert 'Synchronize addresses' button does not exist") { onMainScreen { @@ -88,7 +88,7 @@ class TotalBalanceUnavailableTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(DASH_SIGN) + synchronizeAddresses(isBalanceAvailable = false) } step("Assert 'Synchronize addresses' button does not exist") { onMainScreen { @@ -125,7 +125,7 @@ class TotalBalanceUnavailableTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(DASH_SIGN) + synchronizeAddresses(isBalanceAvailable = false) } step("Assert 'Synchronize addresses' button does not exist") { onMainScreen { diff --git a/app/src/androidTest/kotlin/com/tangem/tests/balance/TotalBalanceUpdateTest.kt b/app/src/androidTest/kotlin/com/tangem/tests/balance/TotalBalanceUpdateTest.kt index 756f9ea213..eca72183ce 100644 --- a/app/src/androidTest/kotlin/com/tangem/tests/balance/TotalBalanceUpdateTest.kt +++ b/app/src/androidTest/kotlin/com/tangem/tests/balance/TotalBalanceUpdateTest.kt @@ -33,7 +33,7 @@ class TotalBalanceUpdateTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(TOTAL_BALANCE) + synchronizeAddresses() } step("Assert $TOTAL_BALANCE is displayed in total balance") { onMainScreen { totalBalanceText.assertTextContains(TOTAL_BALANCE) } @@ -67,7 +67,7 @@ class TotalBalanceUpdateTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(TOTAL_BALANCE) + synchronizeAddresses() } step("Assert $TOTAL_BALANCE is displayed in total balance") { onMainScreen { totalBalanceText.assertTextContains(TOTAL_BALANCE) } @@ -117,7 +117,7 @@ class TotalBalanceUpdateTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(TOTAL_BALANCE) + synchronizeAddresses() } step("Assert $TOTAL_BALANCE is displayed in total balance") { onMainScreen { totalBalanceText.assertTextContains(TOTAL_BALANCE) } @@ -145,7 +145,7 @@ class TotalBalanceUpdateTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(TOTAL_BALANCE) + synchronizeAddresses() } step("Assert $TOTAL_BALANCE is displayed in total balance") { onMainScreen { totalBalanceText.assertTextContains(TOTAL_BALANCE) } @@ -187,7 +187,7 @@ class TotalBalanceUpdateTest : BaseTestCase() { openMainScreen() } step("Synchronize addresses") { - synchronizeAddresses(TOTAL_BALANCE) + synchronizeAddresses() } step("Assert $TOTAL_BALANCE is displayed in total balance") { onMainScreen { totalBalanceText.assertTextContains(TOTAL_BALANCE) } diff --git a/common/ui/src/main/java/com/tangem/common/ui/footers/SendingText.kt b/common/ui/src/main/java/com/tangem/common/ui/footers/SendingText.kt index b2c89117fe..f83b25023e 100644 --- a/common/ui/src/main/java/com/tangem/common/ui/footers/SendingText.kt +++ b/common/ui/src/main/java/com/tangem/common/ui/footers/SendingText.kt @@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.material3.Text import androidx.compose.runtime.* import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import com.tangem.core.ui.components.Keyboard @@ -17,6 +18,7 @@ import com.tangem.core.ui.components.keyboardAsState import com.tangem.core.ui.extensions.TextReference import com.tangem.core.ui.extensions.resolveAnnotatedReference import com.tangem.core.ui.res.TangemTheme +import com.tangem.core.ui.test.SendConfirmScreenTestTags /** * Sending info text with display animation. @@ -52,7 +54,8 @@ fun SendingText(footerText: TextReference, modifier: Modifier = Modifier) { color = TangemTheme.colors.text.tertiary, modifier = Modifier .fillMaxWidth() - .padding(16.dp), + .padding(16.dp) + .testTag(SendConfirmScreenTestTags.SENDING_TEXT), ) } } \ No newline at end of file diff --git a/core/ui/src/main/java/com/tangem/core/ui/test/SendConfirmScreenTestTags.kt b/core/ui/src/main/java/com/tangem/core/ui/test/SendConfirmScreenTestTags.kt new file mode 100644 index 0000000000..2e3212c540 --- /dev/null +++ b/core/ui/src/main/java/com/tangem/core/ui/test/SendConfirmScreenTestTags.kt @@ -0,0 +1,5 @@ +package com.tangem.core.ui.test + +object SendConfirmScreenTestTags { + const val SENDING_TEXT = "SEND_CONFIRM_SCREEN_SENDING_TEXT" +} \ No newline at end of file