Updated on 2026-08-14

This commit is contained in:
Tangem 2025-07-09 22:58:35 +03:00
parent 27cf6b6532
commit fa9aad8bb4
29 changed files with 227 additions and 198 deletions

View file

@ -5,10 +5,7 @@ import com.kaspersky.kaspresso.testcases.api.scenario.Scenario
import com.kaspersky.kaspresso.testcases.core.testcontext.TestContext import com.kaspersky.kaspresso.testcases.core.testcontext.TestContext
import com.tangem.common.extensions.clickWithAssertion import com.tangem.common.extensions.clickWithAssertion
import com.tangem.domain.models.scan.ProductType import com.tangem.domain.models.scan.ProductType
import com.tangem.screens.DisclaimerTestScreen import com.tangem.screens.*
import com.tangem.screens.MainTestScreen
import com.tangem.screens.StoriesTestScreen
import com.tangem.screens.TestTopBar
import com.tangem.tap.domain.sdk.mocks.MockProvider import com.tangem.tap.domain.sdk.mocks.MockProvider
import io.github.kakaocup.compose.node.element.ComposeScreen import io.github.kakaocup.compose.node.element.ComposeScreen
@ -20,22 +17,22 @@ class OpenMainScreenScenario(
if (productType != null) { if (productType != null) {
MockProvider.setMocks(productType) MockProvider.setMocks(productType)
} }
ComposeScreen.onComposeScreen<DisclaimerTestScreen>(testRule) { ComposeScreen.onComposeScreen<DisclaimerPageObject>(testRule) {
step("Click on \"Accept\" button") { step("Click on \"Accept\" button") {
acceptButton.clickWithAssertion() acceptButton.clickWithAssertion()
} }
} }
ComposeScreen.onComposeScreen<StoriesTestScreen>(testRule) { ComposeScreen.onComposeScreen<StoriesPageObject>(testRule) {
step("Click on \"Scan\" button") { step("Click on \"Scan\" button") {
scanButton.clickWithAssertion() scanButton.clickWithAssertion()
} }
} }
ComposeScreen.onComposeScreen<MainTestScreen>(testRule) { ComposeScreen.onComposeScreen<MainScreenPageObject>(testRule) {
step("Make sure wallet screen is visible") { step("Make sure wallet screen is visible") {
assertIsDisplayed() assertIsDisplayed()
} }
} }
ComposeScreen.onComposeScreen<TestTopBar>(testRule) { ComposeScreen.onComposeScreen<TopBarPageObject>(testRule) {
step("Close Markets tooltip"){ step("Close Markets tooltip"){
performClick() performClick()
} }

View file

@ -1,25 +1,27 @@
package com.tangem.screens package com.tangem.screens
import androidx.compose.ui.test.SemanticsNodeInteractionsProvider import androidx.compose.ui.test.SemanticsNodeInteractionsProvider
import com.tangem.core.ui.test.TestTags import com.tangem.common.BaseTestCase
import com.tangem.core.ui.test.DetailsScreenTestTags
import com.tangem.wallet.R import com.tangem.wallet.R
import io.github.kakaocup.compose.node.element.ComposeScreen 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.KNode
import io.github.kakaocup.kakao.common.utilities.getResourceString import io.github.kakaocup.kakao.common.utilities.getResourceString
class DetailsTestScreen(semanticsProvider: SemanticsNodeInteractionsProvider) : class DetailsPageObject(semanticsProvider: SemanticsNodeInteractionsProvider) :
ComposeScreen<DetailsTestScreen>( ComposeScreen<DetailsPageObject>(
semanticsProvider = semanticsProvider, semanticsProvider = semanticsProvider,
viewBuilderAction = { hasTestTag(TestTags.DETAILS_SCREEN) } viewBuilderAction = { hasTestTag(DetailsScreenTestTags.SCREEN_CONTAINER) }
) { ) {
val walletConnectButton: KNode = child { val walletConnectButton: KNode = child {
hasTestTag(TestTags.DETAILS_SCREEN_ITEM) hasTestTag(DetailsScreenTestTags.SCREEN_ITEM)
hasText(getResourceString(R.string.wallet_connect_title)) hasText(getResourceString(R.string.wallet_connect_title))
} }
private val walletBlock: KNode = child { private val walletBlock: KNode = child {
hasTestTag(TestTags.DETAILS_SCREEN_ITEM) hasTestTag(DetailsScreenTestTags.SCREEN_ITEM)
} }
val walletNameButton: KNode = walletBlock.child { val walletNameButton: KNode = walletBlock.child {
@ -32,20 +34,23 @@ class DetailsTestScreen(semanticsProvider: SemanticsNodeInteractionsProvider) :
} }
val buyTangemButton: KNode = child { val buyTangemButton: KNode = child {
hasTestTag(TestTags.DETAILS_SCREEN_ITEM) hasTestTag(DetailsScreenTestTags.SCREEN_ITEM)
hasText(getResourceString(R.string.details_buy_wallet)) hasText(getResourceString(R.string.details_buy_wallet))
} }
val appSettingsButton: KNode = child { val appSettingsButton: KNode = child {
hasTestTag(TestTags.DETAILS_SCREEN_ITEM) hasTestTag(DetailsScreenTestTags.SCREEN_ITEM)
hasText(getResourceString(R.string.app_settings_title)) hasText(getResourceString(R.string.app_settings_title))
} }
val contactSupportButton: KNode = child { val contactSupportButton: KNode = child {
hasTestTag(TestTags.DETAILS_SCREEN_ITEM) hasTestTag(DetailsScreenTestTags.SCREEN_ITEM)
hasText(getResourceString(R.string.details_row_title_contact_to_support)) hasText(getResourceString(R.string.details_row_title_contact_to_support))
} }
val toSButton: KNode = child { val toSButton: KNode = child {
hasTestTag(TestTags.DETAILS_SCREEN_ITEM) hasTestTag(DetailsScreenTestTags.SCREEN_ITEM)
hasText(getResourceString(R.string.disclaimer_title)) hasText(getResourceString(R.string.disclaimer_title))
} }
} }
internal fun BaseTestCase.onDetailsScreen(function: DetailsPageObject.() -> Unit) =
onComposeScreen(composeTestRule, function)

View file

@ -0,0 +1,22 @@
package com.tangem.screens
import androidx.compose.ui.test.SemanticsNodeInteractionsProvider
import com.tangem.common.BaseTestCase
import com.tangem.core.ui.test.DisclaimerScreenTestTags
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
class DisclaimerPageObject(semanticsProvider: SemanticsNodeInteractionsProvider) :
ComposeScreen<DisclaimerPageObject>(
semanticsProvider = semanticsProvider,
viewBuilderAction = { hasTestTag(DisclaimerScreenTestTags.SCREEN_CONTAINER) }
) {
val acceptButton: KNode = child {
hasTestTag(DisclaimerScreenTestTags.ACCEPT_BUTTON)
}
}
internal fun BaseTestCase.onDisclaimerScreen(function: DisclaimerPageObject.() -> Unit) =
onComposeScreen(composeTestRule, function)

View file

@ -1,17 +0,0 @@
package com.tangem.screens
import androidx.compose.ui.test.SemanticsNodeInteractionsProvider
import com.tangem.core.ui.test.TestTags
import io.github.kakaocup.compose.node.element.ComposeScreen
import io.github.kakaocup.compose.node.element.KNode
class DisclaimerTestScreen(semanticsProvider: SemanticsNodeInteractionsProvider) :
ComposeScreen<DisclaimerTestScreen>(
semanticsProvider = semanticsProvider,
viewBuilderAction = { hasTestTag(TestTags.DISCLAIMER_SCREEN_CONTAINER) }
) {
val acceptButton: KNode = child {
hasTestTag(TestTags.DISCLAIMER_SCREEN_ACCEPT_BUTTON)
}
}

View file

@ -0,0 +1,16 @@
package com.tangem.screens
import androidx.compose.ui.test.SemanticsNodeInteractionsProvider
import com.tangem.common.BaseTestCase
import com.tangem.core.ui.test.MainScreenTestTags
import io.github.kakaocup.compose.node.element.ComposeScreen
import io.github.kakaocup.compose.node.element.ComposeScreen.Companion.onComposeScreen
class MainScreenPageObject(semanticsProvider: SemanticsNodeInteractionsProvider) :
ComposeScreen<MainScreenPageObject>(
semanticsProvider = semanticsProvider,
viewBuilderAction = { hasTestTag(MainScreenTestTags.SCREEN_CONTAINER) }
)
internal fun BaseTestCase.onMainScreen(function: MainScreenPageObject.() -> Unit) =
onComposeScreen(composeTestRule, function)

View file

@ -1,11 +0,0 @@
package com.tangem.screens
import androidx.compose.ui.test.SemanticsNodeInteractionsProvider
import com.tangem.core.ui.test.TestTags
import io.github.kakaocup.compose.node.element.ComposeScreen
class MainTestScreen(semanticsProvider: SemanticsNodeInteractionsProvider) :
ComposeScreen<MainTestScreen>(
semanticsProvider = semanticsProvider,
viewBuilderAction = { hasTestTag(TestTags.MAIN_SCREEN) }
)

View file

@ -1,25 +1,27 @@
package com.tangem.screens package com.tangem.screens
import androidx.compose.ui.test.SemanticsNodeInteractionsProvider import androidx.compose.ui.test.SemanticsNodeInteractionsProvider
import com.tangem.core.ui.test.TestTags import com.tangem.common.BaseTestCase
import com.tangem.core.ui.test.StoriesScreenTestTags
import com.tangem.wallet.R import com.tangem.wallet.R
import io.github.kakaocup.compose.node.element.ComposeScreen 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.KNode
import io.github.kakaocup.kakao.common.views.KView import io.github.kakaocup.kakao.common.views.KView
import io.github.kakaocup.kakao.text.KButton import io.github.kakaocup.kakao.text.KButton
class StoriesTestScreen(semanticsProvider: SemanticsNodeInteractionsProvider) : class StoriesPageObject(semanticsProvider: SemanticsNodeInteractionsProvider) :
ComposeScreen<StoriesTestScreen>( ComposeScreen<StoriesPageObject>(
semanticsProvider = semanticsProvider, semanticsProvider = semanticsProvider,
viewBuilderAction = { hasTestTag(TestTags.STORIES_SCREEN) } viewBuilderAction = { hasTestTag(StoriesScreenTestTags.SCREEN_CONTAINER) }
) { ) {
val scanButton: KNode = child { val scanButton: KNode = child {
hasTestTag(TestTags.STORIES_SCREEN_SCAN_BUTTON) hasTestTag(StoriesScreenTestTags.SCAN_BUTTON)
} }
val orderButton: KNode = child { val orderButton: KNode = child {
hasTestTag(TestTags.STORIES_SCREEN_ORDER_BUTTON) hasTestTag(StoriesScreenTestTags.ORDER_BUTTON)
} }
val enableNFCAlert: KView = KView { val enableNFCAlert: KView = KView {
@ -29,4 +31,7 @@ class StoriesTestScreen(semanticsProvider: SemanticsNodeInteractionsProvider) :
val cancelButton: KButton = KButton { val cancelButton: KButton = KButton {
withId(android.R.id.button2) withId(android.R.id.button2)
} }
} }
internal fun BaseTestCase.onStoriesScreen(function: StoriesPageObject.() -> Unit) =
onComposeScreen(composeTestRule, function)

View file

@ -1,16 +0,0 @@
package com.tangem.screens
import androidx.compose.ui.test.SemanticsNodeInteractionsProvider
import com.tangem.core.ui.test.TestTags
import io.github.kakaocup.compose.node.element.ComposeScreen
import io.github.kakaocup.compose.node.element.KNode
class TestTopBar(semanticsProvider: SemanticsNodeInteractionsProvider) :
ComposeScreen<TestTopBar>(
semanticsProvider = semanticsProvider,
viewBuilderAction = { hasTestTag(TestTags.MAIN_SCREEN_TOP_BAR) }
) {
val moreButton: KNode = child {
hasTestTag(TestTags.MAIN_SCREEN_MORE_BUTTON)
}
}

View file

@ -0,0 +1,21 @@
package com.tangem.screens
import androidx.compose.ui.test.SemanticsNodeInteractionsProvider
import com.tangem.common.BaseTestCase
import com.tangem.core.ui.test.MainScreenTestTags
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
class TopBarPageObject(semanticsProvider: SemanticsNodeInteractionsProvider) :
ComposeScreen<TopBarPageObject>(
semanticsProvider = semanticsProvider,
viewBuilderAction = { hasTestTag(MainScreenTestTags.TOP_BAR) }
) {
val moreButton: KNode = child {
hasTestTag(MainScreenTestTags.MORE_BUTTON)
}
}
internal fun BaseTestCase.onTopBar(function: TopBarPageObject.() -> Unit) =
onComposeScreen(composeTestRule, function)

View file

@ -1,19 +1,21 @@
package com.tangem.screens package com.tangem.screens
import androidx.compose.ui.test.SemanticsNodeInteractionsProvider import androidx.compose.ui.test.SemanticsNodeInteractionsProvider
import com.tangem.core.ui.test.TestTags import com.tangem.common.BaseTestCase
import com.tangem.core.ui.test.WalletSettingsScreenTestTags
import com.tangem.wallet.R import com.tangem.wallet.R
import io.github.kakaocup.compose.node.element.ComposeScreen 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.KNode
import io.github.kakaocup.kakao.common.utilities.getResourceString import io.github.kakaocup.kakao.common.utilities.getResourceString
class WalletSettingsTestScreen(semanticsProvider: SemanticsNodeInteractionsProvider) : class WalletSettingsPageObject(semanticsProvider: SemanticsNodeInteractionsProvider) :
ComposeScreen<WalletSettingsTestScreen>( ComposeScreen<WalletSettingsPageObject>(
semanticsProvider = semanticsProvider, semanticsProvider = semanticsProvider,
viewBuilderAction = { hasTestTag(TestTags.WALLET_SETTINGS_SCREEN) } viewBuilderAction = { hasTestTag(WalletSettingsScreenTestTags.SCREEN_CONTAINER) }
) { ) {
private val walletSettingsItem: KNode = child { private val walletSettingsItem: KNode = child {
hasTestTag(TestTags.WALLET_SETTINGS_SCREEN_ITEM) hasTestTag(WalletSettingsScreenTestTags.SCREEN_ITEM)
} }
val linkMoreCardsButton: KNode = walletSettingsItem.child { val linkMoreCardsButton: KNode = walletSettingsItem.child {
@ -28,4 +30,7 @@ class WalletSettingsTestScreen(semanticsProvider: SemanticsNodeInteractionsProvi
val forgetWalletButton: KNode = walletSettingsItem.child { val forgetWalletButton: KNode = walletSettingsItem.child {
hasText(getResourceString(R.string.settings_forget_wallet)) hasText(getResourceString(R.string.settings_forget_wallet))
} }
} }
internal fun BaseTestCase.onWalletSettingsScreen(function: WalletSettingsPageObject.() -> Unit) =
onComposeScreen(composeTestRule, function)

View file

@ -4,152 +4,151 @@ import com.tangem.common.BaseTestCase
import com.tangem.common.extensions.clickWithAssertion import com.tangem.common.extensions.clickWithAssertion
import com.tangem.domain.models.scan.ProductType import com.tangem.domain.models.scan.ProductType
import com.tangem.scenarios.OpenMainScreenScenario import com.tangem.scenarios.OpenMainScreenScenario
import com.tangem.screens.DetailsTestScreen import com.tangem.screens.onDetailsScreen
import com.tangem.screens.TestTopBar import com.tangem.screens.onTopBar
import com.tangem.screens.WalletSettingsTestScreen import com.tangem.screens.onWalletSettingsScreen
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import io.github.kakaocup.compose.node.element.ComposeScreen
import org.junit.Test import org.junit.Test
@HiltAndroidTest @HiltAndroidTest
class DetailsScreenTest : BaseTestCase() { class DetailsTest : BaseTestCase() {
@Test @Test
fun walletWithoutBackupDetails() = fun walletWithoutBackupDetailsTest() =
setupHooks().run { setupHooks().run {
scenario(OpenMainScreenScenario(composeTestRule)) scenario(OpenMainScreenScenario(composeTestRule))
ComposeScreen.onComposeScreen<TestTopBar>(composeTestRule) { onTopBar {
step("Open wallet details") { step("Open wallet details") {
moreButton.clickWithAssertion() moreButton.clickWithAssertion()
} }
} }
ComposeScreen.onComposeScreen<DetailsTestScreen>(composeTestRule) { onDetailsScreen {
step("Assert wallet connect button is visible") { step("Assert 'Wallet connect' button is visible") {
walletConnectButton.assertIsDisplayed() walletConnectButton.assertIsDisplayed()
} }
step("Assert scan card button is visible") { step("Assert 'Scan card' button is visible") {
scanCardButton.assertIsDisplayed() scanCardButton.assertIsDisplayed()
} }
step("Assert buy Tangem card button is visible") { step("Assert 'Buy Tangem card' button is visible") {
buyTangemButton.assertIsDisplayed() buyTangemButton.assertIsDisplayed()
} }
step("Assert app settings button is visible") { step("Assert 'App settings' button is visible") {
appSettingsButton.assertIsDisplayed() appSettingsButton.assertIsDisplayed()
} }
step("Assert contact support button is visible") { step("Assert 'Contact support' button is visible") {
contactSupportButton.assertIsDisplayed() contactSupportButton.assertIsDisplayed()
} }
step("Assert terms or service button is visible") { step("Assert 'Terms or service' button is visible") {
toSButton.assertIsDisplayed() toSButton.assertIsDisplayed()
} }
step("Open wallet settings screen") { step("Open 'Wallet settings' screen") {
walletNameButton.clickWithAssertion() walletNameButton.clickWithAssertion()
} }
} }
ComposeScreen.onComposeScreen<WalletSettingsTestScreen>(composeTestRule) { onWalletSettingsScreen {
step("Assert Link more cards button is visible") { step("Assert 'Link more cards' button is visible") {
linkMoreCardsButton.assertIsDisplayed() linkMoreCardsButton.assertIsDisplayed()
} }
step("Assert Card Settings button is visible") { step("Assert 'Card Settings' button is visible") {
cardSettingsButton.assertIsDisplayed() cardSettingsButton.assertIsDisplayed()
} }
step("Assert Referral program button is visible") { step("Assert 'Referral program' button is visible") {
referralProgramButton.assertIsDisplayed() referralProgramButton.assertIsDisplayed()
} }
step("Assert Forget wallet button is visible") { step("Assert 'Forget wallet' button is visible") {
forgetWalletButton.assertIsDisplayed() forgetWalletButton.assertIsDisplayed()
} }
} }
} }
@Test @Test
fun wallet2Details() = fun wallet2DetailsTest() =
setupHooks().run { setupHooks().run {
scenario(OpenMainScreenScenario(composeTestRule, ProductType.Wallet2)) scenario(OpenMainScreenScenario(composeTestRule, ProductType.Wallet2))
ComposeScreen.onComposeScreen<TestTopBar>(composeTestRule) { onTopBar {
step("Open wallet details") { step("Open wallet details") {
moreButton.clickWithAssertion() moreButton.clickWithAssertion()
} }
} }
ComposeScreen.onComposeScreen<DetailsTestScreen>(composeTestRule) { onDetailsScreen {
step("Assert wallet connect button is visible") { step("Assert 'Wallet connect' button is visible") {
walletConnectButton.assertIsDisplayed() walletConnectButton.assertIsDisplayed()
} }
step("Assert scan card button is visible") { step("Assert 'Scan card' button is visible") {
scanCardButton.assertIsDisplayed() scanCardButton.assertIsDisplayed()
} }
step("Assert buy Tangem card button is visible") { step("Assert 'Buy Tangem card' button is visible") {
buyTangemButton.assertIsDisplayed() buyTangemButton.assertIsDisplayed()
} }
step("Assert app settings button is visible") { step("Assert 'App settings' button is visible") {
appSettingsButton.assertIsDisplayed() appSettingsButton.assertIsDisplayed()
} }
step("Assert contact support button is visible") { step("Assert 'Contact support' button is visible") {
contactSupportButton.assertIsDisplayed() contactSupportButton.assertIsDisplayed()
} }
step("Assert terms or service button is visible") { step("Assert 'Terms or service' button is visible") {
toSButton.assertIsDisplayed() toSButton.assertIsDisplayed()
} }
step("Open wallet settings screen") { step("Open 'Wallet settings' screen") {
walletNameButton.clickWithAssertion() walletNameButton.clickWithAssertion()
} }
} }
ComposeScreen.onComposeScreen<WalletSettingsTestScreen>(composeTestRule) { onWalletSettingsScreen {
step("Assert Link more cards button does not exist") { step("Assert 'Link more cards' button does not exist") {
linkMoreCardsButton.assertIsNotDisplayed() linkMoreCardsButton.assertIsNotDisplayed()
} }
step("Assert Card Settings button is visible") { step("Assert 'Card Settings' button is visible") {
cardSettingsButton.assertIsDisplayed() cardSettingsButton.assertIsDisplayed()
} }
step("Assert Referral program button is visible") { step("Assert 'Referral program' button is visible") {
referralProgramButton.assertIsDisplayed() referralProgramButton.assertIsDisplayed()
} }
step("Assert Forget wallet button is visible") { step("Assert 'Forget wallet' button is visible") {
forgetWalletButton.assertIsDisplayed() forgetWalletButton.assertIsDisplayed()
} }
} }
} }
@Test @Test
fun noteDetails() = fun noteDetailsTest() =
setupHooks().run { setupHooks().run {
scenario(OpenMainScreenScenario(composeTestRule, ProductType.Note)) scenario(OpenMainScreenScenario(composeTestRule, ProductType.Note))
ComposeScreen.onComposeScreen<TestTopBar>(composeTestRule) { onTopBar {
step("Open wallet details") { step("Open wallet details") {
moreButton.clickWithAssertion() moreButton.clickWithAssertion()
} }
} }
ComposeScreen.onComposeScreen<DetailsTestScreen>(composeTestRule) { onDetailsScreen {
step("Assert wallet connect button does not exist") { step("Assert 'Wallet connect' button does not exist") {
walletConnectButton.assertIsNotDisplayed() walletConnectButton.assertIsNotDisplayed()
} }
step("Assert scan card button is visible") { step("Assert 'Scan card' button is visible") {
scanCardButton.assertIsDisplayed() scanCardButton.assertIsDisplayed()
} }
step("Assert buy Tangem card button is visible") { step("Assert 'Buy Tangem card' button is visible") {
buyTangemButton.assertIsDisplayed() buyTangemButton.assertIsDisplayed()
} }
step("Assert app settings button is visible") { step("Assert 'App settings' button is visible") {
appSettingsButton.assertIsDisplayed() appSettingsButton.assertIsDisplayed()
} }
step("Assert contact support button is visible") { step("Assert 'Contact support' button is visible") {
contactSupportButton.assertIsDisplayed() contactSupportButton.assertIsDisplayed()
} }
step("Assert terms or service button is visible") { step("Assert 'Terms or service' button is visible") {
toSButton.assertIsDisplayed() toSButton.assertIsDisplayed()
} }
step("Open wallet settings screen") { step("Open 'Wallet settings' screen") {
walletNameButton.clickWithAssertion() walletNameButton.clickWithAssertion()
} }
} }
ComposeScreen.onComposeScreen<WalletSettingsTestScreen>(composeTestRule) { onWalletSettingsScreen {
step("Assert Card Settings button is visible") { step("Assert 'Card Settings' button is visible") {
cardSettingsButton.assertIsDisplayed() cardSettingsButton.assertIsDisplayed()
} }
step("Assert Referral program button does not exist") { step("Assert 'Referral program' button does not exist") {
referralProgramButton.assertIsNotDisplayed() referralProgramButton.assertIsNotDisplayed()
} }
step("Assert Forget wallet button is visible") { step("Assert 'Forget wallet' button is visible") {
forgetWalletButton.assertIsDisplayed() forgetWalletButton.assertIsDisplayed()
} }
} }

View file

@ -1,11 +1,8 @@
package com.tangem.tests package com.tangem.tests
import androidx.compose.ui.test.junit4.createAndroidComposeRule
import com.tangem.common.BaseTestCase import com.tangem.common.BaseTestCase
import com.tangem.scenarios.OpenMainScreenScenario import com.tangem.scenarios.OpenMainScreenScenario
import com.tangem.tap.MainActivity
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.Rule
import org.junit.Test import org.junit.Test
@HiltAndroidTest @HiltAndroidTest

View file

@ -2,36 +2,35 @@ package com.tangem.tests
import com.tangem.common.BaseTestCase import com.tangem.common.BaseTestCase
import com.tangem.common.extensions.clickWithAssertion import com.tangem.common.extensions.clickWithAssertion
import com.tangem.screens.DisclaimerTestScreen import com.tangem.screens.onDisclaimerScreen
import com.tangem.screens.MainTestScreen import com.tangem.screens.onMainScreen
import com.tangem.screens.StoriesTestScreen import com.tangem.screens.onStoriesScreen
import com.tangem.tap.domain.sdk.mocks.MockProvider import com.tangem.tap.domain.sdk.mocks.MockProvider
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import io.github.kakaocup.compose.node.element.ComposeScreen
import org.junit.Test import org.junit.Test
@HiltAndroidTest @HiltAndroidTest
class ScanErrorTest : BaseTestCase() { class ScanErrorTest : BaseTestCase() {
@Test @Test
fun goToMain() = fun goToMainTest() =
setupHooks().run { setupHooks().run {
ComposeScreen.onComposeScreen<DisclaimerTestScreen>(composeTestRule) { onDisclaimerScreen {
step("Click on \"Accept\" button") { step("Click on 'Accept' button") {
acceptButton.clickWithAssertion() acceptButton.clickWithAssertion()
} }
} }
ComposeScreen.onComposeScreen<StoriesTestScreen>(composeTestRule) { onStoriesScreen {
step("Click on \"Scan\" button emulating scan error") { step("Click on 'Scan' button emulating scan error") {
MockProvider.setEmulateError() MockProvider.setEmulateError()
scanButton.clickWithAssertion() scanButton.clickWithAssertion()
} }
step("Click on \"Scan\" button again without emulating error") { step("Click on 'Scan' button again without emulating error") {
MockProvider.resetEmulateError() MockProvider.resetEmulateError()
scanButton.clickWithAssertion() scanButton.clickWithAssertion()
} }
} }
ComposeScreen.onComposeScreen<MainTestScreen>(composeTestRule) { onMainScreen {
step("Make sure wallet screen is visible") { step("Make sure wallet screen is visible") {
assertIsDisplayed() assertIsDisplayed()
} }

View file

@ -1,31 +1,28 @@
package com.tangem.tests package com.tangem.tests
import android.content.Intent.ACTION_VIEW import android.content.Intent.ACTION_VIEW
import androidx.test.espresso.intent.matcher.UriMatchers
import com.tangem.common.BaseTestCase import com.tangem.common.BaseTestCase
import com.tangem.common.extensions.clickWithAssertion import com.tangem.common.extensions.clickWithAssertion
import com.tangem.screens.DisclaimerTestScreen import com.tangem.screens.onDisclaimerScreen
import com.tangem.screens.StoriesTestScreen import com.tangem.screens.onStoriesScreen
import com.tangem.tap.features.home.redux.HomeMiddleware.NEW_BUY_WALLET_URL import com.tangem.tap.features.home.redux.HomeMiddleware.NEW_BUY_WALLET_URL
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import io.github.kakaocup.compose.node.element.ComposeScreen
import io.github.kakaocup.kakao.intent.KIntent import io.github.kakaocup.kakao.intent.KIntent
import org.hamcrest.Matchers
import org.junit.Test import org.junit.Test
@HiltAndroidTest @HiltAndroidTest
class StoriesTest : BaseTestCase() { class StoriesTest : BaseTestCase() {
@Test @Test
fun clickOnOrderButton() = fun clickOnOrderButtonTest() =
setupHooks().run { setupHooks().run {
ComposeScreen.onComposeScreen<DisclaimerTestScreen>(composeTestRule) { onDisclaimerScreen {
step("Click on \"Accept\" button") { step("Click on 'Accept' button") {
acceptButton.clickWithAssertion() acceptButton.clickWithAssertion()
} }
} }
ComposeScreen.onComposeScreen<StoriesTestScreen>(composeTestRule) { onStoriesScreen {
step("Click on \"Order\" button") { step("Click on 'Order' button") {
orderButton.clickWithAssertion() orderButton.clickWithAssertion()
} }
step("Assert: browser opened") { step("Assert: browser opened") {

View file

@ -22,7 +22,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider
import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.test.TestTags import com.tangem.core.ui.test.StoriesScreenTestTags
import com.tangem.tap.features.home.compose.content.* import com.tangem.tap.features.home.compose.content.*
import com.tangem.tap.features.home.compose.views.HomeButtons import com.tangem.tap.features.home.compose.views.HomeButtons
import com.tangem.tap.features.home.compose.views.SearchCurrenciesButton import com.tangem.tap.features.home.compose.views.SearchCurrenciesButton
@ -61,7 +61,7 @@ internal fun StoriesScreen(
StoriesScreenContent( StoriesScreenContent(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.testTag(TestTags.STORIES_SCREEN), .testTag(StoriesScreenTestTags.SCREEN_CONTAINER),
config = StoriesScreenContentConfig( config = StoriesScreenContentConfig(
storiesSize = state.stories.lastIndex, storiesSize = state.stories.lastIndex,
currentStoryIndex = currentStoryIndex, currentStoryIndex = currentStoryIndex,

View file

@ -19,7 +19,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider
import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.test.TestTags import com.tangem.core.ui.test.StoriesScreenTestTags
import com.tangem.tap.features.home.compose.content.* import com.tangem.tap.features.home.compose.content.*
import com.tangem.tap.features.home.compose.views.HomeButtonsV2 import com.tangem.tap.features.home.compose.views.HomeButtonsV2
import com.tangem.tap.features.home.compose.views.StoriesProgressBar import com.tangem.tap.features.home.compose.views.StoriesProgressBar
@ -57,7 +57,7 @@ internal fun StoriesScreenV2(
StoriesScreenContentV2( StoriesScreenContentV2(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.testTag(TestTags.STORIES_SCREEN), .testTag(StoriesScreenTestTags.SCREEN_CONTAINER),
config = StoriesScreenContentV2Config( config = StoriesScreenContentV2Config(
storiesSize = state.stories.lastIndex, storiesSize = state.stories.lastIndex,
currentStoryIndex = currentStoryIndex, currentStoryIndex = currentStoryIndex,

View file

@ -17,7 +17,7 @@ import com.tangem.core.ui.components.buttons.common.TangemButtonIconPosition
import com.tangem.core.ui.extensions.stringResourceSafe import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.test.TestTags import com.tangem.core.ui.test.StoriesScreenTestTags
import com.tangem.wallet.R import com.tangem.wallet.R
@Composable @Composable
@ -34,7 +34,7 @@ internal fun HomeButtons(
ScanCardButton( ScanCardButton(
modifier = Modifier modifier = Modifier
.weight(weight = 1f) .weight(weight = 1f)
.testTag(TestTags.STORIES_SCREEN_SCAN_BUTTON), .testTag(StoriesScreenTestTags.SCAN_BUTTON),
showProgress = btnScanStateInProgress, showProgress = btnScanStateInProgress,
onClick = onScanButtonClick, onClick = onScanButtonClick,
) )
@ -42,7 +42,7 @@ internal fun HomeButtons(
OrderCardButton( OrderCardButton(
modifier = Modifier modifier = Modifier
.weight(weight = 1f) .weight(weight = 1f)
.testTag(TestTags.STORIES_SCREEN_ORDER_BUTTON), .testTag(StoriesScreenTestTags.ORDER_BUTTON),
onClick = onShopButtonClick, onClick = onShopButtonClick,
) )
} }

View file

@ -18,7 +18,7 @@ import com.tangem.core.ui.components.buttons.common.TangemButtonIconPosition
import com.tangem.core.ui.extensions.stringResourceSafe import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.test.TestTags import com.tangem.core.ui.test.StoriesScreenTestTags
import com.tangem.wallet.R import com.tangem.wallet.R
@Composable @Composable
@ -37,19 +37,19 @@ internal fun HomeButtonsV2(
CreateNewWalletButton( CreateNewWalletButton(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.testTag(TestTags.STORIES_SCREEN_CREATE_NEW_WALLET_BUTTON), .testTag(StoriesScreenTestTags.CREATE_NEW_WALLET_BUTTON),
onClick = onCreateNewWalletButtonClick, onClick = onCreateNewWalletButtonClick,
) )
AddExistingWalletButton( AddExistingWalletButton(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.testTag(TestTags.STORIES_SCREEN_ADD_EXISTING_WALLET_BUTTON), .testTag(StoriesScreenTestTags.ADD_EXISTING_WALLET_BUTTON),
onClick = onAddExistingWalletButtonClick, onClick = onAddExistingWalletButtonClick,
) )
ScanCardButton( ScanCardButton(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.testTag(TestTags.STORIES_SCREEN_SCAN_BUTTON), .testTag(StoriesScreenTestTags.SCAN_BUTTON),
showProgress = btnScanStateInProgress, showProgress = btnScanStateInProgress,
onClick = onScanButtonClick, onClick = onScanButtonClick,
) )

View file

@ -0,0 +1,6 @@
package com.tangem.core.ui.test
object DetailsScreenTestTags {
const val SCREEN_CONTAINER = "DETAILS_SCREEN_CONTAINER"
const val SCREEN_ITEM = "DETAILS_SCREEN_ITEM"
}

View file

@ -0,0 +1,6 @@
package com.tangem.core.ui.test
object DisclaimerScreenTestTags {
const val SCREEN_CONTAINER = "DISCLAIMER_SCREEN_CONTAINER"
const val ACCEPT_BUTTON = "DISCLAIMER_SCREEN_ACCEPT_BUTTON"
}

View file

@ -0,0 +1,7 @@
package com.tangem.core.ui.test
object MainScreenTestTags {
const val SCREEN_CONTAINER = "MAIN_SCREEN_CONTAINER"
const val MORE_BUTTON = "MAIN_SCREEN_MORE_BUTTON"
const val TOP_BAR = "MAIN_SCREEN_TOP_BAR"
}

View file

@ -0,0 +1,9 @@
package com.tangem.core.ui.test
object StoriesScreenTestTags {
const val SCREEN_CONTAINER = "STORIES_SCREEN_CONTAINER"
const val SCAN_BUTTON = "STORIES_SCREEN_SCAN_BUTTON"
const val ORDER_BUTTON = "STORIES_SCREEN_ORDER_BUTTON"
const val CREATE_NEW_WALLET_BUTTON = "STORIES_SCREEN_CREATE_NEW_WALLET_BUTTON"
const val ADD_EXISTING_WALLET_BUTTON = "STORIES_SCREEN_ADD_EXISTING_WALLET_BUTTON"
}

View file

@ -1,22 +0,0 @@
package com.tangem.core.ui.test
object TestTags {
const val STORIES_SCREEN = "STORIES_SCREEN_CONTAINER"
const val STORIES_SCREEN_SCAN_BUTTON = "STORIES_SCREEN_SCAN_BUTTON"
const val STORIES_SCREEN_ORDER_BUTTON = "STORIES_SCREEN_ORDER_BUTTON"
const val STORIES_SCREEN_CREATE_NEW_WALLET_BUTTON = "STORIES_SCREEN_CREATE_NEW_WALLET_BUTTON"
const val STORIES_SCREEN_ADD_EXISTING_WALLET_BUTTON = "STORIES_SCREEN_ADD_EXISTING_WALLET_BUTTON"
const val MAIN_SCREEN = "MAIN_SCREEN_CONTAINER"
const val MAIN_SCREEN_MORE_BUTTON = "MAIN_SCREEN_MORE_BUTTON"
const val MAIN_SCREEN_TOP_BAR = "MAIN_SCREEN_TOP_BAR"
const val DETAILS_SCREEN = "DETAILS_SCREEN_CONTAINER"
const val DETAILS_SCREEN_ITEM = "DETAILS_SCREEN_ITEM"
const val WALLET_SETTINGS_SCREEN = "WALLET_SETTINGS_SCREEN"
const val WALLET_SETTINGS_SCREEN_ITEM = "WALLET_SETTINGS_SCREEN_ITEM"
const val DISCLAIMER_SCREEN_CONTAINER = "DISCLAIMER_SCREEN_CONTAINER"
const val DISCLAIMER_SCREEN_ACCEPT_BUTTON = "DISCLAIMER_SCREEN_ACCEPT_BUTTON"
}

View file

@ -0,0 +1,6 @@
package com.tangem.core.ui.test
object WalletSettingsScreenTestTags {
const val SCREEN_CONTAINER = "WALLET_SETTINGS_SCREEN_CONTAINER"
const val SCREEN_ITEM = "WALLET_SETTINGS_SCREEN_ITEM"
}

View file

@ -25,7 +25,7 @@ import com.tangem.core.ui.decompose.ComposableContentComponent
import com.tangem.core.ui.extensions.stringResourceSafe import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.test.TestTags import com.tangem.core.ui.test.DetailsScreenTestTags
import com.tangem.features.details.component.preview.PreviewDetailsComponent import com.tangem.features.details.component.preview.PreviewDetailsComponent
import com.tangem.features.details.entity.DetailsFooterUM import com.tangem.features.details.entity.DetailsFooterUM
import com.tangem.features.details.entity.DetailsItemUM import com.tangem.features.details.entity.DetailsItemUM
@ -67,7 +67,7 @@ private fun Content(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
LazyColumn( LazyColumn(
modifier = modifier.testTag(TestTags.DETAILS_SCREEN), modifier = modifier.testTag(DetailsScreenTestTags.SCREEN_CONTAINER),
verticalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing16), verticalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing16),
contentPadding = PaddingValues( contentPadding = PaddingValues(
top = TangemTheme.dimens.spacing12, top = TangemTheme.dimens.spacing12,
@ -120,7 +120,7 @@ private fun Block(
) { ) {
val itemModifier = Modifier val itemModifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.testTag(TestTags.DETAILS_SCREEN_ITEM) .testTag(DetailsScreenTestTags.SCREEN_ITEM)
when (model) { when (model) {
is DetailsItemUM.Basic -> { is DetailsItemUM.Basic -> {

View file

@ -32,8 +32,7 @@ import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemColorPalette import com.tangem.core.ui.res.TangemColorPalette
import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.test.TestTags.DISCLAIMER_SCREEN_ACCEPT_BUTTON import com.tangem.core.ui.test.DisclaimerScreenTestTags
import com.tangem.core.ui.test.TestTags.DISCLAIMER_SCREEN_CONTAINER
import com.tangem.core.ui.webview.applySafeSettings import com.tangem.core.ui.webview.applySafeSettings
import com.tangem.features.disclaimer.impl.R import com.tangem.features.disclaimer.impl.R
import com.tangem.features.disclaimer.impl.entity.DisclaimerUM import com.tangem.features.disclaimer.impl.entity.DisclaimerUM
@ -58,7 +57,7 @@ internal fun DisclaimerScreen(state: DisclaimerUM) {
modifier = Modifier modifier = Modifier
.background(backgroundColor) .background(backgroundColor)
.statusBarsPadding() .statusBarsPadding()
.testTag(DISCLAIMER_SCREEN_CONTAINER), .testTag(DisclaimerScreenTestTags.SCREEN_CONTAINER),
) { ) {
Column( Column(
modifier = Modifier modifier = Modifier
@ -183,7 +182,7 @@ private fun BoxScope.DisclaimerButton(onAccept: (Boolean) -> Unit) {
disabledContentColor = TangemColorPalette.Dark6, disabledContentColor = TangemColorPalette.Dark6,
), ),
modifier = Modifier modifier = Modifier
.testTag(DISCLAIMER_SCREEN_ACCEPT_BUTTON) .testTag(DisclaimerScreenTestTags.ACCEPT_BUTTON)
.align(Alignment.BottomCenter) .align(Alignment.BottomCenter)
.navigationBarsPadding() .navigationBarsPadding()
.padding( .padding(

View file

@ -27,7 +27,7 @@ import com.tangem.core.ui.extensions.resolveReference
import com.tangem.core.ui.extensions.stringResourceSafe import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.test.TestTags import com.tangem.core.ui.test.WalletSettingsScreenTestTags
import com.tangem.core.ui.utils.requestPushPermission import com.tangem.core.ui.utils.requestPushPermission
import com.tangem.feature.walletsettings.component.preview.PreviewWalletSettingsComponent import com.tangem.feature.walletsettings.component.preview.PreviewWalletSettingsComponent
import com.tangem.feature.walletsettings.entity.WalletSettingsItemUM import com.tangem.feature.walletsettings.entity.WalletSettingsItemUM
@ -56,7 +56,7 @@ internal fun WalletSettingsScreen(
Content( Content(
modifier = Modifier modifier = Modifier
.padding(paddingValues) .padding(paddingValues)
.testTag(TestTags.WALLET_SETTINGS_SCREEN), .testTag(WalletSettingsScreenTestTags.SCREEN_CONTAINER),
state = state, state = state,
) )
@ -90,7 +90,7 @@ private fun Content(state: WalletSettingsUM, modifier: Modifier = Modifier) {
val itemModifier = Modifier val itemModifier = Modifier
.padding(horizontal = TangemTheme.dimens.spacing16) .padding(horizontal = TangemTheme.dimens.spacing16)
.fillMaxWidth() .fillMaxWidth()
.testTag(TestTags.WALLET_SETTINGS_SCREEN_ITEM) .testTag(WalletSettingsScreenTestTags.SCREEN_ITEM)
when (item) { when (item) {
is WalletSettingsItemUM.WithItems -> ItemsBlock( is WalletSettingsItemUM.WithItems -> ItemsBlock(

View file

@ -62,7 +62,7 @@ import com.tangem.core.ui.res.LocalMainBottomSheetColor
import com.tangem.core.ui.res.LocalWindowSize import com.tangem.core.ui.res.LocalWindowSize
import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.test.TestTags import com.tangem.core.ui.test.MainScreenTestTags
import com.tangem.core.ui.utils.lineTo import com.tangem.core.ui.utils.lineTo
import com.tangem.core.ui.utils.moveTo import com.tangem.core.ui.utils.moveTo
import com.tangem.core.ui.utils.toPx import com.tangem.core.ui.utils.toPx
@ -178,7 +178,7 @@ private fun WalletContent(
} ?: PaddingValues(bottom = TangemTheme.dimens.spacing92 + bottomBarHeight) } ?: PaddingValues(bottom = TangemTheme.dimens.spacing92 + bottomBarHeight)
LazyColumn( LazyColumn(
modifier = Modifier.testTag(TestTags.MAIN_SCREEN), modifier = Modifier.testTag(MainScreenTestTags.SCREEN_CONTAINER),
state = listState, state = listState,
contentPadding = contentPadding, contentPadding = contentPadding,
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,

View file

@ -9,8 +9,7 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.test.TestTags.MAIN_SCREEN_MORE_BUTTON import com.tangem.core.ui.test.MainScreenTestTags
import com.tangem.core.ui.test.TestTags.MAIN_SCREEN_TOP_BAR
import com.tangem.feature.wallet.impl.R import com.tangem.feature.wallet.impl.R
import com.tangem.feature.wallet.presentation.common.WalletPreviewData import com.tangem.feature.wallet.presentation.common.WalletPreviewData
import com.tangem.feature.wallet.presentation.wallet.state.model.WalletTopBarConfig import com.tangem.feature.wallet.presentation.wallet.state.model.WalletTopBarConfig
@ -28,7 +27,7 @@ internal fun WalletTopBar(config: WalletTopBarConfig) {
Icon(painter = painterResource(id = R.drawable.img_tangem_logo_90_24), contentDescription = null) Icon(painter = painterResource(id = R.drawable.img_tangem_logo_90_24), contentDescription = null)
}, },
actions = { actions = {
IconButton(onClick = config.onDetailsClick, modifier = Modifier.testTag(MAIN_SCREEN_MORE_BUTTON)) { IconButton(onClick = config.onDetailsClick, modifier = Modifier.testTag(MainScreenTestTags.MORE_BUTTON)) {
Icon(painter = painterResource(id = R.drawable.ic_more_vertical_24), contentDescription = null) Icon(painter = painterResource(id = R.drawable.ic_more_vertical_24), contentDescription = null)
} }
}, },
@ -38,7 +37,7 @@ internal fun WalletTopBar(config: WalletTopBarConfig) {
actionIconContentColor = TangemTheme.colors.icon.primary1, actionIconContentColor = TangemTheme.colors.icon.primary1,
), ),
scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(), scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(),
modifier = Modifier.testTag(MAIN_SCREEN_TOP_BAR), modifier = Modifier.testTag(MainScreenTestTags.TOP_BAR),
) )
} }