diff --git a/app/src/androidTest/kotlin/com/tangem/common/BaseTestCase.kt b/app/src/androidTest/kotlin/com/tangem/common/BaseTestCase.kt index c27c9c93db..27761a7ceb 100644 --- a/app/src/androidTest/kotlin/com/tangem/common/BaseTestCase.kt +++ b/app/src/androidTest/kotlin/com/tangem/common/BaseTestCase.kt @@ -100,6 +100,12 @@ abstract class BaseTestCase : TestCase( value = false ) } + appPreferencesStore.editData { mutablePreferences -> + mutablePreferences.set( + key = PreferencesKeys.getShouldShowNotificationKey("EnablePushesReminderNotification"), + value = false + ) + } promoRepository.setNeverToShowWalletPromo(PromoId.Sepa) } apiEnvironmentRule.setup(apiConfigsManager) diff --git a/app/src/androidTest/kotlin/com/tangem/screens/BuyTokenDetailsPageObject.kt b/app/src/androidTest/kotlin/com/tangem/screens/BuyTokenDetailsPageObject.kt index 2b4e330704..4f0037cbab 100644 --- a/app/src/androidTest/kotlin/com/tangem/screens/BuyTokenDetailsPageObject.kt +++ b/app/src/androidTest/kotlin/com/tangem/screens/BuyTokenDetailsPageObject.kt @@ -3,15 +3,13 @@ package com.tangem.screens import androidx.compose.ui.test.SemanticsNodeInteractionsProvider import com.tangem.common.BaseTestCase import com.tangem.core.ui.R -import com.tangem.core.ui.test.BaseButtonTestTags -import com.tangem.core.ui.test.BuyTokenDetailsScreenTestTags -import com.tangem.core.ui.test.NotificationTestTags -import com.tangem.core.ui.test.TopAppBarTestTags +import com.tangem.core.ui.test.* import io.github.kakaocup.compose.node.element.ComposeScreen import io.github.kakaocup.compose.node.element.ComposeScreen.Companion.onComposeScreen import io.github.kakaocup.compose.node.element.KNode import io.github.kakaocup.kakao.common.utilities.getResourceString import androidx.compose.ui.test.hasTestTag as withTestTag +import com.tangem.features.onramp.impl.R as OnrampImplR class BuyTokenDetailsPageObject(semanticsProvider: SemanticsNodeInteractionsProvider) : ComposeScreen(semanticsProvider = semanticsProvider) { @@ -68,31 +66,65 @@ class BuyTokenDetailsPageObject(semanticsProvider: SemanticsNodeInteractionsProv useUnmergedTree = true } - val providerLoadingTitle: KNode = child { - hasTestTag(BuyTokenDetailsScreenTestTags.PROVIDER_LOADING_TITLE) + val recommendedTitle: KNode = child { + hasText(getResourceString(OnrampImplR.string.onramp_recommended_title)) } - val providerLoadingText: KNode = child { - hasTestTag(BuyTokenDetailsScreenTestTags.PROVIDER_LOADING_TEXT) - } - - val providerTitle: KNode = child { - hasTestTag(BuyTokenDetailsScreenTestTags.PROVIDER_TITLE) + val bestRateIcon: KNode = child { + hasTestTag(OnrampOffersBlockTestTags.BEST_RATE_ICON) useUnmergedTree = true } - val providerText: KNode = child { - hasTestTag(BuyTokenDetailsScreenTestTags.PROVIDER_TEXT) + val bestRateTitle: KNode = child { + hasTestTag(OnrampOffersBlockTestTags.BEST_RATE_TITLE) + useUnmergedTree = true + } + + val offerTokenAmount: KNode = child { + hasTestTag(OnrampOffersBlockTestTags.OFFER_TOKEN_AMOUNT) + useUnmergedTree = true + } + + val timingIcon: KNode = child { + hasTestTag(OnrampOffersBlockTestTags.TIMING_ICON) + useUnmergedTree = true + } + + val payWith: KNode = child { + hasTestTag(OnrampOffersBlockTestTags.PAY_WITH) + useUnmergedTree = true + } + + val paymentMethodIcon: KNode = child { + hasTestTag(OnrampOffersBlockTestTags.PAYMENT_METHOD_ICON) + useUnmergedTree = true + } + + val instantProcessingSpeedText: KNode = child { + hasText(getResourceString(R.string.onramp_instant_status)) + useUnmergedTree = true + } + + val providerName: KNode = child { + hasTestTag(OnrampOffersBlockTestTags.PROVIDER_NAME) useUnmergedTree = true } val buyButton: KNode = child { - hasTestTag(BaseButtonTestTags.BUTTON) + hasTestTag(BaseButtonTestTags.TEXT) hasText(getResourceString(R.string.common_buy)) + useUnmergedTree = true } - val toSBlock: KNode = child { - hasTestTag(BuyTokenDetailsScreenTestTags.TOS_BLOCK) + val continueButton: KNode = child { + hasTestTag(BaseButtonTestTags.TEXT) + hasText(getResourceString(R.string.common_continue)) + useUnmergedTree = true + } + + val allOffersButton: KNode = child { + hasTestTag(BaseButtonTestTags.TEXT) + hasText(getResourceString(R.string.onramp_all_offers_button_title)) useUnmergedTree = true } } diff --git a/app/src/androidTest/kotlin/com/tangem/screens/SelectPaymentMethodPageObject.kt b/app/src/androidTest/kotlin/com/tangem/screens/SelectPaymentMethodPageObject.kt index 0739883572..b629ddae76 100644 --- a/app/src/androidTest/kotlin/com/tangem/screens/SelectPaymentMethodPageObject.kt +++ b/app/src/androidTest/kotlin/com/tangem/screens/SelectPaymentMethodPageObject.kt @@ -1,17 +1,14 @@ package com.tangem.screens -import androidx.compose.ui.test.SemanticsMatcher import androidx.compose.ui.test.SemanticsNodeInteractionsProvider import com.tangem.common.BaseTestCase -import com.tangem.common.utils.LazyListItemNode +import com.tangem.core.ui.test.BaseBottomSheetTestTags +import com.tangem.core.ui.test.OnrampOffersBlockTestTags import com.tangem.core.ui.test.SelectPaymentMethodBottomSheetTestTags -import com.tangem.core.ui.test.TopAppBarTestTags -import com.tangem.core.ui.utils.LazyListItemPositionSemantics import com.tangem.features.onramp.impl.R import io.github.kakaocup.compose.node.element.ComposeScreen import io.github.kakaocup.compose.node.element.ComposeScreen.Companion.onComposeScreen import io.github.kakaocup.compose.node.element.KNode -import io.github.kakaocup.compose.node.element.lazylist.KLazyListNode import io.github.kakaocup.kakao.common.utilities.getResourceString import androidx.compose.ui.test.hasTestTag as withTestTag import androidx.compose.ui.test.hasText as withText @@ -19,30 +16,31 @@ import androidx.compose.ui.test.hasText as withText class SelectPaymentMethodPageObject(semanticsProvider: SemanticsNodeInteractionsProvider) : ComposeScreen(semanticsProvider = semanticsProvider) { - - private val lazyList = KLazyListNode( - semanticsProvider = semanticsProvider, - viewBuilderAction = { hasTestTag(SelectPaymentMethodBottomSheetTestTags.LAZY_LIST) }, - itemTypeBuilder = { itemType(::LazyListItemNode) }, - positionMatcher = { position -> - SemanticsMatcher.expectValue( - LazyListItemPositionSemantics, - position - ) - } - ) - val title: KNode = child { - hasTestTag(TopAppBarTestTags.TITLE) - hasText(getResourceString(R.string.onramp_pay_with)) + hasTestTag(BaseBottomSheetTestTags.TITLE) + hasText(getResourceString(R.string.onramp_all_offers_button_title)) } - fun paymentMethodWithNameAndIcon(name: String): KNode { - return lazyList.child { - hasAnyDescendant(withText(name)) - hasAnyDescendant(withTestTag(SelectPaymentMethodBottomSheetTestTags.PAYMENT_METHOD_ICON)) - useUnmergedTree = true - } + val subtitle: KNode = child { + hasTestTag(BaseBottomSheetTestTags.SUBTITLE) + hasText(getResourceString(R.string.onramp_payment_method_subtitle)) + } + + val closeButton: KNode = child { + hasTestTag(BaseBottomSheetTestTags.CLOSE_BUTTON) + } + + fun paymentMethodWithName(name: String): KNode = child { + hasTestTag(SelectPaymentMethodBottomSheetTestTags.PAYMENT_METHOD) + hasAnyDescendant(withText(name)) + hasAnyDescendant(withTestTag(SelectPaymentMethodBottomSheetTestTags.PAYMENT_METHOD_ICON)) + hasAnyDescendant(withTestTag(SelectPaymentMethodBottomSheetTestTags.TIMING_ICON)) + hasAnyDescendant(withTestTag(OnrampOffersBlockTestTags.TIMING_TEXT)) + hasAnyDescendant(withTestTag(SelectPaymentMethodBottomSheetTestTags.TOKEN_AMOUNT)) + hasAnyDescendant(withTestTag(SelectPaymentMethodBottomSheetTestTags.PROVIDER_COUNT_ICON)) + hasAnyDescendant(withTestTag(SelectPaymentMethodBottomSheetTestTags.PROVIDER_COUNT_TEXT)) + hasAnyDescendant(withTestTag(SelectPaymentMethodBottomSheetTestTags.UP_TO_TEXT)) + useUnmergedTree = true } } diff --git a/app/src/androidTest/kotlin/com/tangem/screens/SelectProviderPageObject.kt b/app/src/androidTest/kotlin/com/tangem/screens/SelectProviderPageObject.kt index 2c8a050019..0be8e56d9d 100644 --- a/app/src/androidTest/kotlin/com/tangem/screens/SelectProviderPageObject.kt +++ b/app/src/androidTest/kotlin/com/tangem/screens/SelectProviderPageObject.kt @@ -2,87 +2,78 @@ package com.tangem.screens import androidx.compose.ui.test.SemanticsNodeInteractionsProvider import com.tangem.common.BaseTestCase -import com.tangem.core.ui.test.SelectProviderBottomSheetTestTags +import com.tangem.core.ui.test.BaseBottomSheetTestTags +import com.tangem.core.ui.test.BaseButtonTestTags +import com.tangem.core.ui.test.OnrampOffersBlockTestTags import com.tangem.features.onramp.impl.R import io.github.kakaocup.compose.node.element.ComposeScreen import io.github.kakaocup.compose.node.element.ComposeScreen.Companion.onComposeScreen import io.github.kakaocup.compose.node.element.KNode import io.github.kakaocup.kakao.common.utilities.getResourceString -import androidx.compose.ui.test.hasText as withText +import com.tangem.core.ui.R as CoreUiR class SelectProviderPageObject(semanticsProvider: SemanticsNodeInteractionsProvider) : ComposeScreen(semanticsProvider = semanticsProvider) { val title: KNode = child { - hasText(getResourceString(R.string.onramp_choose_provider_title_hint)) + hasTestTag(BaseBottomSheetTestTags.TITLE) + hasText(getResourceString(R.string.onramp_all_offers_button_title)) + } + + val subtitle: KNode = child { + hasTestTag(BaseBottomSheetTestTags.SUBTITLE) + hasText(getResourceString(R.string.express_provider)) useUnmergedTree = true } + val bestRateIcon: KNode = child { + hasTestTag(OnrampOffersBlockTestTags.BEST_RATE_ICON) + useUnmergedTree = true + } + + val bestRateTitle: KNode = child { + hasTestTag(OnrampOffersBlockTestTags.BEST_RATE_TITLE) + useUnmergedTree = true + } + + val offerTokenAmount: KNode = child { + hasTestTag(OnrampOffersBlockTestTags.OFFER_TOKEN_AMOUNT) + useUnmergedTree = true + } + + val timingIcon: KNode = child { + hasTestTag(OnrampOffersBlockTestTags.TIMING_ICON) + useUnmergedTree = true + } + + val payWith: KNode = child { + hasTestTag(OnrampOffersBlockTestTags.PAY_WITH) + useUnmergedTree = true + } + + val youGetText: KNode = child { + hasText(getResourceString(R.string.onramp_title_you_get)) + } + val paymentMethodIcon: KNode = child { - hasTestTag(SelectProviderBottomSheetTestTags.PAYMENT_METHOD_ICON) + hasTestTag(OnrampOffersBlockTestTags.PAYMENT_METHOD_ICON) useUnmergedTree = true } - val paymentMethodTitle: KNode = child { - hasTestTag(SelectProviderBottomSheetTestTags.PAYMENT_METHOD_NAME) + val providerName: KNode = child { + hasTestTag(OnrampOffersBlockTestTags.PROVIDER_NAME) useUnmergedTree = true } - val paymentMethodName: KNode = child { - hasTestTag(SelectProviderBottomSheetTestTags.PAYMENT_METHOD_NAME) + + val instantProcessingSpeedText: KNode = child { + hasText(getResourceString(com.tangem.core.ui.R.string.onramp_instant_status)) useUnmergedTree = true } - val paymentMethodExpandButton: KNode = child { - hasTestTag(SelectProviderBottomSheetTestTags.PAYMENT_METHOD_EXPAND_BUTTON) - useUnmergedTree = true - } - - val availableProviderItem: KNode = child { - hasTestTag(SelectProviderBottomSheetTestTags.AVAILABLE_PROVIDER_ITEM) - useUnmergedTree = true - } - - val availableProviderName: KNode = child { - hasTestTag(SelectProviderBottomSheetTestTags.AVAILABLE_PROVIDER_NAME) - useUnmergedTree = true - } - - val tokenAmount: KNode = child { - hasTestTag(SelectProviderBottomSheetTestTags.TOKEN_AMOUNT) - useUnmergedTree = true - } - - val unavailableProviderItem: KNode = child { - hasTestTag(SelectProviderBottomSheetTestTags.UNAVAILABLE_PROVIDER_ITEM) - useUnmergedTree = true - } - - val unavailableProviderName: KNode = child { - hasTestTag(SelectProviderBottomSheetTestTags.UNAVAILABLE_PROVIDER_NAME) - useUnmergedTree = true - } - - val moreProvidersIcon: KNode = child { - hasTestTag(SelectProviderBottomSheetTestTags.MORE_PROVIDERS_ICON) - useUnmergedTree = true - } - - val moreProvidersText: KNode = child { - hasTestTag(SelectProviderBottomSheetTestTags.MORE_PROVIDERS_TEXT) - useUnmergedTree = true - } - - val bestRateLabel: KNode = child { - hasTestTag(SelectProviderBottomSheetTestTags.BEST_RATE_LABEL) - useUnmergedTree = true - } - - fun availableProviderWithName(name: String, tokenAmount: String, rate: String): KNode = child { - hasTestTag(SelectProviderBottomSheetTestTags.AVAILABLE_PROVIDER_ITEM) - hasAnyChild(withText(name)) - hasAnyChild(withText(tokenAmount)) - hasAnyChild(withText(rate)) + val buyButton: KNode = child { + hasTestTag(BaseButtonTestTags.TEXT) + hasText(getResourceString(CoreUiR.string.common_buy)) useUnmergedTree = true } } diff --git a/app/src/androidTest/kotlin/com/tangem/screens/WalletConnectDetailsBottonSheetPageObject.kt b/app/src/androidTest/kotlin/com/tangem/screens/WalletConnectDetailsBottonSheetPageObject.kt index e4eb48fde7..6ad955d669 100644 --- a/app/src/androidTest/kotlin/com/tangem/screens/WalletConnectDetailsBottonSheetPageObject.kt +++ b/app/src/androidTest/kotlin/com/tangem/screens/WalletConnectDetailsBottonSheetPageObject.kt @@ -2,6 +2,7 @@ package com.tangem.screens import androidx.compose.ui.test.SemanticsNodeInteractionsProvider import com.tangem.common.BaseTestCase +import com.tangem.core.ui.test.BaseBottomSheetTestTags import com.tangem.core.ui.test.BaseButtonTestTags import com.tangem.core.ui.test.WalletConnectBottomSheetTestTags import com.tangem.core.ui.test.WalletConnectDetailsBottomSheetTestTags @@ -15,18 +16,18 @@ class WalletConnectDetailsBottomSheetPageObject(semanticsProvider: SemanticsNode ComposeScreen(semanticsProvider = semanticsProvider) { val title: KNode = child { - hasTestTag(WalletConnectDetailsBottomSheetTestTags.TITLE) + hasTestTag(BaseBottomSheetTestTags.TITLE) hasText(getResourceString(WalletConnectImplR.string.wc_connected_app_title)) useUnmergedTree = true } val date: KNode = child { - hasTestTag(WalletConnectDetailsBottomSheetTestTags.DATE) + hasTestTag(BaseBottomSheetTestTags.SUBTITLE) useUnmergedTree = true } val closeButton: KNode = child { - hasTestTag(WalletConnectDetailsBottomSheetTestTags.CLOSE_BUTTON) + hasTestTag(BaseBottomSheetTestTags.CLOSE_BUTTON) useUnmergedTree = true } diff --git a/app/src/androidTest/kotlin/com/tangem/tests/BuyTokenTest.kt b/app/src/androidTest/kotlin/com/tangem/tests/BuyTokenTest.kt index abea9913ef..1cdfa840e5 100644 --- a/app/src/androidTest/kotlin/com/tangem/tests/BuyTokenTest.kt +++ b/app/src/androidTest/kotlin/com/tangem/tests/BuyTokenTest.kt @@ -2,13 +2,12 @@ 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.resetWireMockScenarioState import com.tangem.common.utils.setWireMockScenarioState -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 @@ -74,7 +73,7 @@ class BuyTokenTest : BaseTestCase() { val otherCurrenciesTitle = "Other currencies" val australianDollar = "AUD" val fiatAmount = "1" - val tokenAmount = "POL 488.24938338" + val tokenAmount = "~488.24938338 POL" val scenarioName = "payment_methods" step("Reset WireMock scenario '$scenarioName'") { @@ -102,18 +101,6 @@ class BuyTokenTest : BaseTestCase() { step("Write fiat amount = '$fiatAmount'") { onBuyTokenDetailsScreen { fiatAmountTextField.performTextInput(fiatAmount) } } - step("Assert 'Provider loading block' is displayed") { - onBuyTokenDetailsScreen { - providerLoadingTitle.assertIsDisplayed() - providerLoadingText.assertIsDisplayed() - } - } - step("Assert 'Provider block' is displayed") { - onBuyTokenDetailsScreen { - providerTitle.assertIsDisplayed() - providerText.assertIsDisplayed() - } - } step("Assert token amount = '$tokenAmount'") { onBuyTokenDetailsScreen { tokenAmountField.assertTextContains(tokenAmount) @@ -162,7 +149,7 @@ class BuyTokenTest : BaseTestCase() { val balance = TOTAL_BALANCE val euro = "EUR" val fiatAmount = "1" - val tokenAmount = "POL 488.24938338" + val tokenAmount = "~488.24938338 POL" val scenarioName = "payment_methods" step("Reset WireMock scenario '$scenarioName'") { @@ -199,27 +186,45 @@ class BuyTokenTest : BaseTestCase() { step("Assert fiat amount = '$fiatAmount'") { onBuyTokenDetailsScreen { fiatAmountTextField.assertTextContains(euro + fiatAmount) } } - step("Assert 'Provider loading block' is displayed") { - onBuyTokenDetailsScreen { - providerLoadingTitle.assertIsDisplayed() - providerLoadingText.assertIsDisplayed() - } - } - step("Assert 'Provider block' is displayed") { - onBuyTokenDetailsScreen { - providerTitle.assertIsDisplayed() - providerText.assertIsDisplayed() - } - } step("Assert token amount = '$tokenAmount'") { onBuyTokenDetailsScreen { tokenAmountField.assertTextContains(tokenAmount) } } - step("Assert 'ToS' block is displayed") { - onBuyTokenDetailsScreen { toSBlock.assertIsDisplayed()} + step("Click on 'Continue' button") { + onBuyTokenDetailsScreen { continueButton.clickWithAssertion() } + } + step("Assert 'Recommended' title is displayed") { + onBuyTokenDetailsScreen { recommendedTitle.clickWithAssertion() } + } + step("Assert 'Best rate' icon is displayed") { + onBuyTokenDetailsScreen { bestRateIcon.assertIsDisplayed() } + } + step("Assert 'Best rate' title is displayed") { + onBuyTokenDetailsScreen { bestRateTitle.assertIsDisplayed() } + } + step("Assert offer amount is displayed") { + onBuyTokenDetailsScreen { offerTokenAmount.assertIsDisplayed() } } step("Assert 'Buy' button is displayed") { onBuyTokenDetailsScreen { buyButton.assertIsDisplayed()} } + step("Assert timing icon is displayed") { + onBuyTokenDetailsScreen { timingIcon.assertIsDisplayed() } + } + step("Assert 'Instant' processing time text is displayed") { + onBuyTokenDetailsScreen { instantProcessingSpeedText.assertIsDisplayed() } + } + step("Assert provider name is displayed") { + onBuyTokenDetailsScreen { providerName.assertIsDisplayed() } + } + step("Assert 'Pay with' is displayed") { + onBuyTokenDetailsScreen { payWith.assertIsDisplayed() } + } + step("Assert payment method icon is displayed") { + onBuyTokenDetailsScreen { paymentMethodIcon.assertIsDisplayed() } + } + step("Assert 'All offers' button is displayed") { + onBuyTokenDetailsScreen { allOffersButton.assertIsDisplayed() } + } step("Assert 'Close' button in top bar is displayed") { onBuyTokenDetailsScreen { topBarCloseButton.assertIsDisplayed() } } @@ -314,13 +319,10 @@ class BuyTokenTest : BaseTestCase() { setupHooks().run { val tokenTitle = "Polygon" val balance = TOTAL_BALANCE - val paymentMethod = "Card" + val paymentMethod = "Invoice Revolut Pay" val fiatAmount = "1" val providerNameMercuryo = "Mercuryo" - val providerNameSimplex = "Simplex" - val tokenAmount = "POL 488.24938338" - val bestRate = "Best rate" - val rate = "-0.00%" + val tokenAmount = "~488.24938338 POL" val scenarioName = "payment_methods" step("Reset WireMock scenario '$scenarioName'") { @@ -348,58 +350,53 @@ class BuyTokenTest : BaseTestCase() { step("Write fiat amount = '$fiatAmount'") { onBuyTokenDetailsScreen { fiatAmountTextField.performTextInput(fiatAmount) } } + step("Assert token amount = '$tokenAmount'") { + onBuyTokenDetailsScreen { tokenAmountField.assertTextContains(tokenAmount) } + } + step("Click on 'Continue' button") { + onBuyTokenDetailsScreen { continueButton.clickWithAssertion() } + } step("Assert 'Provider block' is displayed") { - onBuyTokenDetailsScreen { - providerTitle.assertIsDisplayed() - providerText.assertIsDisplayed() - } + onBuyTokenDetailsScreen { providerName.assertIsDisplayed() } } - step("Open 'Select Provider' bottom sheet") { - onBuyTokenDetailsScreen { providerTitle.performClick() } + step("Click on 'All offers' button") { + onBuyTokenDetailsScreen { allOffersButton.clickWithAssertion() } } - step("Assert available provider name is displayed") { - onSelectProviderBottomSheet { - flakySafely(WAIT_UNTIL_TIMEOUT) { - availableProviderItem.assertIsDisplayed() - } - } + step("Click on '$paymentMethod' payment method") { + onSelectPaymentMethodBottomSheet { paymentMethodWithName(paymentMethod).clickWithAssertion() } } - step("Click on 'Expand payment methods' button") { - onSelectProviderBottomSheet { paymentMethodExpandButton.clickWithAssertion() } - } - step("Click on payment method: '$paymentMethod'") { - onSelectPaymentMethodBottomSheet { paymentMethodWithNameAndIcon(paymentMethod).clickWithAssertion() } - } - step("Assert 'Select Provider' bottom sheet title is displayed") { + step("Assert 'Provider' bottom sheet title is displayed") { onSelectProviderBottomSheet { title.assertIsDisplayed() } } + step("Assert 'Provider' bottom sheet subtitle is displayed") { + onSelectProviderBottomSheet { subtitle.assertIsDisplayed() } + } + step("Assert 'Best rate' icon is displayed") { + onSelectProviderBottomSheet { bestRateIcon.assertIsDisplayed() } + } + step("Assert 'Best rate' title is displayed") { + onSelectProviderBottomSheet { bestRateTitle.assertIsDisplayed() } + } + step("Assert offer token amount is displayed") { + onSelectProviderBottomSheet { offerTokenAmount.assertIsDisplayed() } + } + step("Assert 'Buy' button is displayed") { + onSelectProviderBottomSheet { buyButton.assertIsDisplayed() } + } + step("Assert timing icon is displayed") { + onSelectProviderBottomSheet { timingIcon.assertIsDisplayed() } + } + step("Assert 'Instant' processing time text is displayed") { + onSelectProviderBottomSheet { instantProcessingSpeedText.assertIsDisplayed() } + } + step("Assert 'Pay with' text is displayed") { + onSelectProviderBottomSheet { payWith.assertIsDisplayed() } + } step("Assert payment method icon is displayed") { onSelectProviderBottomSheet { paymentMethodIcon.assertIsDisplayed() } } - step("Assert payment method title is displayed") { - onSelectProviderBottomSheet { paymentMethodTitle.assertIsDisplayed() } - } - step("Assert payment method name is displayed") { - onSelectProviderBottomSheet { paymentMethodName.assertIsDisplayed() } - } - step("Assert provider with name: '$providerNameMercuryo' and rate: '$bestRate' is displayed") { - onSelectProviderBottomSheet { - availableProviderWithName(providerNameMercuryo, tokenAmount, bestRate).assertIsDisplayed() - } - } - step("Assert provider with name: '$providerNameSimplex' and rate: '$rate' is displayed") { - onSelectProviderBottomSheet { - availableProviderWithName(providerNameSimplex, tokenAmount, rate).assertIsDisplayed() - } - } - step("Assert 'More providers' icon is displayed") { - onSelectProviderBottomSheet { moreProvidersIcon.assertIsDisplayed() } - } - step("Assert 'More providers' text is displayed") { - onSelectProviderBottomSheet { moreProvidersText.assertIsDisplayed() } - } - step("Assert 'Best rate' label is displayed") { - onSelectProviderBottomSheet { bestRateLabel.assertIsDisplayed() } + step("Assert provider name: '$providerNameMercuryo'") { + onSelectProviderBottomSheet { providerName.assertTextContains(providerNameMercuryo) } } } } @@ -416,6 +413,7 @@ class BuyTokenTest : BaseTestCase() { val invoiceRevolutPay = "Invoice Revolut Pay" val sepa = "Sepa" val fiatAmount = "1" + val tokenAmount = "~488.24938338 POL" val scenarioName = "payment_methods" step("Reset WireMock scenario '$scenarioName'") { @@ -443,40 +441,39 @@ class BuyTokenTest : BaseTestCase() { step("Write fiat amount = '$fiatAmount'") { onBuyTokenDetailsScreen { fiatAmountTextField.performTextInput(fiatAmount) } } + step("Assert token amount = '$tokenAmount'") { + onBuyTokenDetailsScreen { tokenAmountField.assertTextContains(tokenAmount) } + } + step("Click on 'Continue' button") { + onBuyTokenDetailsScreen { continueButton.clickWithAssertion() } + } step("Assert 'Provider block' is displayed") { - onBuyTokenDetailsScreen { - providerTitle.assertIsDisplayed() - providerText.assertIsDisplayed() - } + onBuyTokenDetailsScreen { providerName.assertIsDisplayed() } } - step("Open 'Select Provider' bottom sheet") { - onBuyTokenDetailsScreen { providerTitle.performClick() } - } - step("Click on 'Expand payment methods' button") { - onSelectProviderBottomSheet { paymentMethodExpandButton.clickWithAssertion() } + step("Click on 'All offers' button") { + onBuyTokenDetailsScreen { allOffersButton.clickWithAssertion() } } step("Assert 'Select Payment Method' bottom sheet title is displayed") { onSelectPaymentMethodBottomSheet { title.assertIsDisplayed() } } + step("Assert 'Select Payment Method' bottom sheet subtitle is displayed") { + onSelectPaymentMethodBottomSheet { subtitle.assertIsDisplayed() } + } + step("Assert 'Select Payment Method' bottom sheet close button is displayed") { + onSelectPaymentMethodBottomSheet { closeButton.assertIsDisplayed() } + } step("Assert payment method: '$card' is displayed") { - onSelectPaymentMethodBottomSheet { paymentMethodWithNameAndIcon(card).assertIsDisplayed() } + onSelectPaymentMethodBottomSheet { paymentMethodWithName(card).assertIsDisplayed() } } step("Assert payment method: '$googlePay' is displayed") { - onSelectPaymentMethodBottomSheet { paymentMethodWithNameAndIcon(googlePay).assertIsDisplayed() } + onSelectPaymentMethodBottomSheet { paymentMethodWithName(googlePay).assertIsDisplayed() } } step("Assert payment method: '$invoiceRevolutPay' is displayed") { - onSelectPaymentMethodBottomSheet { paymentMethodWithNameAndIcon(invoiceRevolutPay).assertIsDisplayed() } + onSelectPaymentMethodBottomSheet { paymentMethodWithName(invoiceRevolutPay).assertIsDisplayed() } } step("Assert payment method: '$sepa' is displayed") { - onSelectPaymentMethodBottomSheet { paymentMethodWithNameAndIcon(sepa).assertIsDisplayed() } - } - step("Press 'Back' button") { - onSelectPaymentMethodBottomSheet { device.uiDevice.pressBack() } - } - step("Assert 'Select Provider' bottom sheet title is displayed") { - onSelectProviderBottomSheet { title.assertIsDisplayed() } + onSelectPaymentMethodBottomSheet { paymentMethodWithName(sepa).assertIsDisplayed() } } } } - } \ No newline at end of file diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/bottomsheets/modal/TangemModalBottomSheetTitle.kt b/core/ui/src/main/java/com/tangem/core/ui/components/bottomsheets/modal/TangemModalBottomSheetTitle.kt index c4f1b6ed48..972fe1ae4b 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/bottomsheets/modal/TangemModalBottomSheetTitle.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/bottomsheets/modal/TangemModalBottomSheetTitle.kt @@ -21,7 +21,7 @@ import com.tangem.core.ui.extensions.resourceReference import com.tangem.core.ui.extensions.stringReference import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemThemePreview -import com.tangem.core.ui.test.WalletConnectDetailsBottomSheetTestTags +import com.tangem.core.ui.test.BaseBottomSheetTestTags /** * Title component for [TangemModalBottomSheet] with [TangemIconButton] for buttons. @@ -58,7 +58,7 @@ fun TangemModalBottomSheetTitle( color = TangemTheme.colors.text.primary1, modifier = Modifier .align(Alignment.CenterHorizontally) - .testTag(WalletConnectDetailsBottomSheetTestTags.TITLE), + .testTag(BaseBottomSheetTestTags.TITLE), ) } if (subtitle != null) { @@ -68,7 +68,7 @@ fun TangemModalBottomSheetTitle( color = TangemTheme.colors.text.tertiary, modifier = Modifier .align(Alignment.CenterHorizontally) - .testTag(WalletConnectDetailsBottomSheetTestTags.DATE), + .testTag(BaseBottomSheetTestTags.SUBTITLE), ) } } @@ -79,7 +79,7 @@ fun TangemModalBottomSheetTitle( modifier = Modifier .padding(16.dp) .align(Alignment.CenterEnd) - .testTag(WalletConnectDetailsBottomSheetTestTags.CLOSE_BUTTON), + .testTag(BaseBottomSheetTestTags.CLOSE_BUTTON), ) } } diff --git a/core/ui/src/main/java/com/tangem/core/ui/test/BaseBottomSheetTestTags.kt b/core/ui/src/main/java/com/tangem/core/ui/test/BaseBottomSheetTestTags.kt index 2604a7ad0e..d2d4a850de 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/test/BaseBottomSheetTestTags.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/test/BaseBottomSheetTestTags.kt @@ -2,4 +2,7 @@ package com.tangem.core.ui.test object BaseBottomSheetTestTags { const val ACTION_TITLE = "BASE_BOTTOM_SHEET_ACTION_TITLE" + const val TITLE = "BASE_BOTTOM_SHEET_TITLE" + const val SUBTITLE = "BASE_BOTTOM_SHEET_SUBTITLE" + const val CLOSE_BUTTON = "BASE_BOTTOM_SHEET_CLOSE_BUTTON" } \ No newline at end of file diff --git a/core/ui/src/main/java/com/tangem/core/ui/test/BuyTokenDetailsScreenTestTags.kt b/core/ui/src/main/java/com/tangem/core/ui/test/BuyTokenDetailsScreenTestTags.kt index 0f045c5da5..0a77a52a74 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/test/BuyTokenDetailsScreenTestTags.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/test/BuyTokenDetailsScreenTestTags.kt @@ -5,12 +5,4 @@ object BuyTokenDetailsScreenTestTags { const val FIAT_CURRENCY_ICON = "BUY_TOKEN_DETAILS_SCREEN_FIAT_CURRENCY_ICON" const val FIAT_AMOUNT_TEXT_FIELD = "BUY_TOKEN_DETAILS_SCREEN_FIAT_AMOUNT_TEXT_FIELD" const val TOKEN_AMOUNT = "BUY_TOKEN_DETAILS_SCREEN_TOKEN_AMOUNT" - - const val PROVIDER_LOADING_TITLE = "BUY_TOKEN_DETAILS_SCREEN_PROVIDER_LOADING_TITLE" - const val PROVIDER_LOADING_TEXT = "BUY_TOKEN_DETAILS_SCREEN_PROVIDER_LOADING_TITLE" - - const val PROVIDER_TITLE = "BUY_TOKEN_DETAILS_SCREEN_PROVIDER_TITLE" - const val PROVIDER_TEXT = "BUY_TOKEN_DETAILS_SCREEN_PROVIDER_TEXT" - - const val TOS_BLOCK = "BUY_TOKEN_DETAILS_SCREEN_TOS_BLOCK" } \ No newline at end of file diff --git a/core/ui/src/main/java/com/tangem/core/ui/test/OnrampOffersBlockTestTags.kt b/core/ui/src/main/java/com/tangem/core/ui/test/OnrampOffersBlockTestTags.kt new file mode 100644 index 0000000000..8a7390b1ec --- /dev/null +++ b/core/ui/src/main/java/com/tangem/core/ui/test/OnrampOffersBlockTestTags.kt @@ -0,0 +1,12 @@ +package com.tangem.core.ui.test + +object OnrampOffersBlockTestTags { + const val PROVIDER_NAME = "ONRAMP_OFFERS_BLOCK_PROVIDER_TITLE" + const val BEST_RATE_ICON = "ONRAMP_OFFERS_BLOCK_BEST_RATE_ICON" + const val BEST_RATE_TITLE = "ONRAMP_OFFERS_BLOCK_BEST_RATE_TITLE" + const val OFFER_TOKEN_AMOUNT = "ONRAMP_OFFERS_BLOCK_OFFER_TOKEN_AMOUNT" + const val TIMING_ICON = "ONRAMP_OFFERS_BLOCK_TIMING_ICON" + const val PAY_WITH = "ONRAMP_OFFERS_BLOCK_PAY_WITH" + const val PAYMENT_METHOD_ICON = "ONRAMP_OFFERS_BLOCK_PAYMENT_METHOD_ICON" + const val TIMING_TEXT = "ONRAMP_OFFERS_BLOCK_TIMING_TEXT" +} \ No newline at end of file diff --git a/core/ui/src/main/java/com/tangem/core/ui/test/SelectPaymentMethodBottomSheetTestTags.kt b/core/ui/src/main/java/com/tangem/core/ui/test/SelectPaymentMethodBottomSheetTestTags.kt index ebb601e9a5..037713590b 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/test/SelectPaymentMethodBottomSheetTestTags.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/test/SelectPaymentMethodBottomSheetTestTags.kt @@ -1,7 +1,13 @@ package com.tangem.core.ui.test object SelectPaymentMethodBottomSheetTestTags { - - const val LAZY_LIST = "SELECT_PAYMENT_METHOD_LAZY_LIST" - const val PAYMENT_METHOD_ICON = "PAYMENT_METHOD_NAME" + const val PAYMENT_METHOD = "SELECT_PAYMENT_METHOD_BOTTOM_SHEET_PAYMENT_METHOD" + const val PAYMENT_METHOD_ICON = "SELECT_PAYMENT_METHOD_BOTTOM_SHEET_PAYMENT_METHOD_ICON" + const val PAYMENT_METHOD_NAME = "SELECT_PAYMENT_METHOD_BOTTOM_SHEET_PAYMENT_METHOD_NAME" + const val UP_TO_TEXT = "SELECT_PAYMENT_METHOD_BOTTOM_SHEET_UP_TO_TEXT" + const val TOKEN_AMOUNT = "SELECT_PAYMENT_METHOD_BOTTOM_SHEET_TOKEN_AMOUNT" + const val BEST_RATE_ICON = "SELECT_PAYMENT_METHOD_BOTTOM_SHEET_BEST_RATE_ICON" + const val PROVIDER_COUNT_ICON = "SELECT_PAYMENT_METHOD_BOTTOM_SHEET_PROVIDER_COUNT_ICON" + const val PROVIDER_COUNT_TEXT = "SELECT_PAYMENT_METHOD_BOTTOM_SHEET_PROVIDER_COUNT_TEXT" + const val TIMING_ICON = "SELECT_PAYMENT_METHOD_BOTTOM_SHEET_TIMING_ICON" } \ No newline at end of file diff --git a/core/ui/src/main/java/com/tangem/core/ui/test/WalletConnectDetailsBottomSheetTestTags.kt b/core/ui/src/main/java/com/tangem/core/ui/test/WalletConnectDetailsBottomSheetTestTags.kt index f5f7ad7776..b269554f43 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/test/WalletConnectDetailsBottomSheetTestTags.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/test/WalletConnectDetailsBottomSheetTestTags.kt @@ -1,9 +1,6 @@ package com.tangem.core.ui.test object WalletConnectDetailsBottomSheetTestTags { - const val TITLE = "WALLET_CONNECT_DETAILS_BOTTOM_SHEET_TITLE" - const val DATE = "WALLET_CONNECT_DETAILS_BOTTOM_SHEET_DATE" - const val CLOSE_BUTTON = "WALLET_CONNECT_DETAILS_BOTTOM_CLOSE_BUTTON" const val DISCONNECT_BUTTON = "WALLET_CONNECT_DETAILS_BOTTOM_SHEET_DISCONNECT_BUTTON" const val WALLET_ICON = "WALLET_CONNECT_DETAILS_BOTTOM_WALLET_ICON" const val WALLET_TITLE = "WALLET_CONNECT_DETAILS_BOTTOM_WALLET" diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/alloffers/ui/PaymentMethodsContent.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/alloffers/ui/PaymentMethodsContent.kt index 49d457c4b2..7c16f78f2e 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/alloffers/ui/PaymentMethodsContent.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/alloffers/ui/PaymentMethodsContent.kt @@ -16,6 +16,7 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -25,6 +26,7 @@ import com.tangem.core.ui.components.SpacerW import com.tangem.core.ui.extensions.* import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemThemePreview +import com.tangem.core.ui.test.SelectPaymentMethodBottomSheetTestTags import com.tangem.domain.onramp.model.OnrampPaymentMethod import com.tangem.domain.onramp.model.PaymentMethodType import com.tangem.features.onramp.alloffers.entity.AllOffersPaymentMethodUM @@ -74,10 +76,13 @@ private fun PaymentMethod(methodUM: AllOffersPaymentMethodUM, modifier: Modifier end = 12.dp, top = 14.dp, bottom = 12.dp, - ), + ) + .testTag(SelectPaymentMethodBottomSheetTestTags.PAYMENT_METHOD), ) { PaymentMethodIcon( - modifier = Modifier.size(36.dp), + modifier = Modifier + .size(36.dp) + .testTag(SelectPaymentMethodBottomSheetTestTags.PAYMENT_METHOD_ICON), imageUrl = methodUM.methodConfig.method.imageUrl, ) @@ -111,6 +116,7 @@ private fun PaymentMethodInfoBlock( text = paymentMethodName, style = TangemTheme.typography.subtitle2, color = TangemTheme.colors.text.primary1, + modifier = Modifier.testTag(SelectPaymentMethodBottomSheetTestTags.PAYMENT_METHOD_NAME), ) SpacerH(2.dp) Row( @@ -121,12 +127,14 @@ private fun PaymentMethodInfoBlock( text = stringResourceSafe(R.string.onramp_up_to_rate), style = TangemTheme.typography.caption2, color = TangemTheme.colors.text.tertiary, + modifier = Modifier.testTag(SelectPaymentMethodBottomSheetTestTags.UP_TO_TEXT), ) Text( text = rate, style = TangemTheme.typography.subtitle2, color = TangemTheme.colors.text.primary1, + modifier = Modifier.testTag(SelectPaymentMethodBottomSheetTestTags.TOKEN_AMOUNT), ) when { @@ -134,6 +142,7 @@ private fun PaymentMethodInfoBlock( Image( imageVector = ImageVector.vectorResource(R.drawable.ic_best_rate_12), contentDescription = null, + modifier = Modifier.testTag(SelectPaymentMethodBottomSheetTestTags.BEST_RATE_ICON), ) } diff != null -> { @@ -158,7 +167,9 @@ private fun PaymentMethodInfoBlock( private fun ProvidersCountBlockInfo(providersCount: Int) { BorderedRow { Icon( - modifier = Modifier.size(10.dp), + modifier = Modifier + .size(10.dp) + .testTag(SelectPaymentMethodBottomSheetTestTags.PROVIDER_COUNT_ICON), imageVector = ImageVector.vectorResource(R.drawable.ic_clock_24), tint = TangemTheme.colors.icon.informative, contentDescription = null, @@ -172,6 +183,7 @@ private fun ProvidersCountBlockInfo(providersCount: Int) { ), style = TangemTheme.typography.caption2, color = TangemTheme.colors.text.tertiary, + modifier = Modifier.testTag(SelectPaymentMethodBottomSheetTestTags.PROVIDER_COUNT_TEXT), ) } } @@ -180,7 +192,9 @@ private fun ProvidersCountBlockInfo(providersCount: Int) { private fun TimingBlockInfo(speed: PaymentMethodType.PaymentSpeed) { BorderedRow { Icon( - modifier = Modifier.size(10.dp), + modifier = Modifier + .size(10.dp) + .testTag(SelectPaymentMethodBottomSheetTestTags.TIMING_ICON), imageVector = ImageVector.vectorResource(R.drawable.ic_staking_24), tint = TangemTheme.colors.icon.informative, contentDescription = null, diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampButtonComponent.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampButtonComponent.kt index fe7e8c0075..d63b3aa736 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampButtonComponent.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampButtonComponent.kt @@ -8,7 +8,6 @@ import androidx.compose.foundation.layout.* import androidx.compose.foundation.text.ClickableText import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.testTag import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -16,7 +15,6 @@ import com.tangem.core.ui.components.PrimaryButton import com.tangem.core.ui.extensions.appendColored import com.tangem.core.ui.extensions.stringResourceSafe import com.tangem.core.ui.res.TangemTheme -import com.tangem.core.ui.test.BuyTokenDetailsScreenTestTags import com.tangem.features.onramp.impl.R import com.tangem.features.onramp.main.entity.OnrampMainComponentUM import com.tangem.features.onramp.main.entity.OnrampProviderBlockUM @@ -79,7 +77,6 @@ private fun OnrampTosText(provider: OnrampProviderBlockUM.Content?) { color = TangemTheme.colors.text.tertiary, textAlign = TextAlign.Center, ), - modifier = Modifier.testTag(BuyTokenDetailsScreenTestTags.TOS_BLOCK), onClick = { offset -> clickableAnnotation.getStringAnnotations( tag = TERMS_OF_USE_KEY, diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampProviderContent.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampProviderContent.kt index 3693715b68..e13fd96310 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampProviderContent.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampProviderContent.kt @@ -13,14 +13,12 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.platform.testTag import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.withStyle import com.tangem.core.ui.extensions.appendSpace import com.tangem.core.ui.extensions.stringResourceSafe import com.tangem.core.ui.res.TangemTheme -import com.tangem.core.ui.test.BuyTokenDetailsScreenTestTags import com.tangem.features.onramp.impl.R import com.tangem.features.onramp.main.entity.OnrampProviderBlockUM import com.tangem.features.onramp.paymentmethod.ui.PaymentMethodIcon @@ -62,7 +60,6 @@ private fun OnrampProviderBlock(state: OnrampProviderBlockUM.Content, modifier: }, color = TangemTheme.colors.text.tertiary, style = TangemTheme.typography.body2, - modifier = Modifier.testTag(BuyTokenDetailsScreenTestTags.PROVIDER_TITLE), ) Text( text = buildAnnotatedString { @@ -72,7 +69,6 @@ private fun OnrampProviderBlock(state: OnrampProviderBlockUM.Content, modifier: }, style = TangemTheme.typography.caption2, color = TangemTheme.colors.text.tertiary, - modifier = Modifier.testTag(BuyTokenDetailsScreenTestTags.PROVIDER_TEXT), ) } AnimatedVisibility( @@ -112,7 +108,6 @@ private fun OnrampProviderLoading(modifier: Modifier = Modifier) { text = stringResourceSafe(id = R.string.express_provider), style = TangemTheme.typography.subtitle2, color = TangemTheme.colors.text.tertiary, - modifier = Modifier.testTag(BuyTokenDetailsScreenTestTags.PROVIDER_LOADING_TITLE), ) Row( verticalAlignment = Alignment.CenterVertically, @@ -127,7 +122,6 @@ private fun OnrampProviderLoading(modifier: Modifier = Modifier) { text = stringResourceSafe(id = R.string.express_fetch_best_rates), style = TangemTheme.typography.body2, color = TangemTheme.colors.text.tertiary, - modifier = Modifier.testTag(BuyTokenDetailsScreenTestTags.PROVIDER_LOADING_TEXT), ) } } diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/mainv2/ui/OnrampOffersContent.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/mainv2/ui/OnrampOffersContent.kt index 05645f62d0..c39c79a8da 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/mainv2/ui/OnrampOffersContent.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/mainv2/ui/OnrampOffersContent.kt @@ -19,6 +19,7 @@ import androidx.compose.ui.draw.drawWithCache import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -30,6 +31,7 @@ import com.tangem.core.ui.components.buttons.common.TangemButtonSize import com.tangem.core.ui.extensions.* import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemThemePreview +import com.tangem.core.ui.test.OnrampOffersBlockTestTags import com.tangem.domain.onramp.model.OnrampPaymentMethod import com.tangem.domain.onramp.model.PaymentMethodType import com.tangem.features.onramp.impl.R @@ -156,11 +158,13 @@ private fun OfferHeader(advantage: OnrampOfferAdvantagesUM) { imageVector = ImageVector.vectorResource(R.drawable.ic_best_rate_16), tint = TangemTheme.colors.icon.accent, contentDescription = null, + modifier = Modifier.testTag(OnrampOffersBlockTestTags.BEST_RATE_ICON), ) Text( text = stringResourceSafe(R.string.express_provider_best_rate), style = TangemTheme.typography.caption1, color = TangemTheme.colors.icon.accent, + modifier = Modifier.testTag(OnrampOffersBlockTestTags.BEST_RATE_TITLE), ) } } @@ -194,6 +198,7 @@ private fun RateBlock(rate: String, diff: TextReference?) { text = rate, style = TangemTheme.typography.subtitle1, color = TangemTheme.colors.text.primary1, + modifier = Modifier.testTag(OnrampOffersBlockTestTags.OFFER_TOKEN_AMOUNT), ) diff?.let { Text( @@ -215,7 +220,9 @@ private fun RateBlock(rate: String, diff: TextReference?) { private fun PaymentBlockInOffer(paymentMethod: OnrampPaymentMethod, providerName: String) { Row(verticalAlignment = Alignment.CenterVertically) { Icon( - modifier = Modifier.size(16.dp), + modifier = Modifier + .size(16.dp) + .testTag(OnrampOffersBlockTestTags.TIMING_ICON), imageVector = ImageVector.vectorResource(R.drawable.ic_clock_24), tint = TangemTheme.colors.icon.informative, contentDescription = null, @@ -235,6 +242,7 @@ private fun PaymentBlockInOffer(paymentMethod: OnrampPaymentMethod, providerName text = providerName, style = TangemTheme.typography.caption2, color = TangemTheme.colors.text.tertiary, + modifier = Modifier.testTag(OnrampOffersBlockTestTags.PROVIDER_NAME), ) SpacerWMax() @@ -243,12 +251,15 @@ private fun PaymentBlockInOffer(paymentMethod: OnrampPaymentMethod, providerName text = stringResourceSafe(R.string.onramp_pay_with), style = TangemTheme.typography.caption2, color = TangemTheme.colors.text.tertiary, + modifier = Modifier.testTag(OnrampOffersBlockTestTags.PAY_WITH), ) SpacerW(4.dp) SubcomposeAsyncImage( - modifier = Modifier.sizeIn(maxWidth = 38.dp, maxHeight = 16.dp), + modifier = Modifier + .sizeIn(maxWidth = 38.dp, maxHeight = 16.dp) + .testTag(OnrampOffersBlockTestTags.PAYMENT_METHOD_ICON), model = ImageRequest.Builder(context = LocalContext.current) .data(paymentMethod.imageUrl) .crossfade(enable = true) @@ -298,6 +309,7 @@ internal fun TimingBlock(speed: PaymentMethodType.PaymentSpeed) { text = timingText, style = TangemTheme.typography.caption2, color = TangemTheme.colors.text.tertiary, + modifier = Modifier.testTag(OnrampOffersBlockTestTags.TIMING_TEXT), ) } diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/paymentmethod/ui/SelectPaymentMethodBottomSheet.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/paymentmethod/ui/SelectPaymentMethodBottomSheet.kt index ee929788ee..b7e1a4051c 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/paymentmethod/ui/SelectPaymentMethodBottomSheet.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/paymentmethod/ui/SelectPaymentMethodBottomSheet.kt @@ -11,13 +11,11 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.platform.testTag import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig import com.tangem.core.ui.components.bottomsheets.sheet.TangemBottomSheet import com.tangem.core.ui.extensions.resourceReference import com.tangem.core.ui.extensions.selectedBorder import com.tangem.core.ui.res.TangemTheme -import com.tangem.core.ui.test.SelectPaymentMethodBottomSheetTestTags import com.tangem.features.onramp.impl.R import com.tangem.features.onramp.paymentmethod.entity.PaymentMethodUM import com.tangem.features.onramp.paymentmethod.entity.PaymentMethodsBottomSheetConfig @@ -51,7 +49,7 @@ private fun SelectPaymentMethodBottomSheetContent( modifier: Modifier = Modifier, ) { LazyColumn( - modifier = modifier.testTag(SelectPaymentMethodBottomSheetTestTags.LAZY_LIST), + modifier = modifier, ) { items( items = methods, @@ -90,7 +88,6 @@ private fun PaymentMethodItem(paymentMethod: PaymentMethodUM, isSelected: Boolea ) { PaymentMethodIcon( imageUrl = paymentMethod.imageUrl, - modifier = Modifier.testTag(SelectPaymentMethodBottomSheetTestTags.PAYMENT_METHOD_ICON), ) Text( text = paymentMethod.name,