Updated on 2026-08-14
This commit is contained in:
parent
67ca192c16
commit
7b6fc18a8f
12 changed files with 79 additions and 113 deletions
|
|
@ -27,6 +27,7 @@ import com.tangem.datasource.utils.WireMockRedirectInterceptor
|
||||||
import com.tangem.domain.promo.PromoRepository
|
import com.tangem.domain.promo.PromoRepository
|
||||||
import com.tangem.domain.promo.models.PromoId
|
import com.tangem.domain.promo.models.PromoId
|
||||||
import com.tangem.domain.wallets.usecase.GetSelectedWalletSyncUseCase
|
import com.tangem.domain.wallets.usecase.GetSelectedWalletSyncUseCase
|
||||||
|
import com.tangem.features.pushnotifications.api.utils.PUSH_PERMISSION
|
||||||
import com.tangem.tap.MainActivity
|
import com.tangem.tap.MainActivity
|
||||||
import dagger.hilt.android.testing.HiltAndroidRule
|
import dagger.hilt.android.testing.HiltAndroidRule
|
||||||
import io.qameta.allure.kotlin.Allure
|
import io.qameta.allure.kotlin.Allure
|
||||||
|
|
@ -129,6 +130,12 @@ abstract class BaseTestCase : TestCase(
|
||||||
value = false
|
value = false
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
appPreferencesStore.editData { mutablePreferences ->
|
||||||
|
mutablePreferences.set(
|
||||||
|
key = PreferencesKeys.getShouldShowInitialPermissionScreen(PUSH_PERMISSION),
|
||||||
|
value = false
|
||||||
|
)
|
||||||
|
}
|
||||||
promoRepository.setNeverToShowWalletPromo(PromoId.Sepa)
|
promoRepository.setNeverToShowWalletPromo(PromoId.Sepa)
|
||||||
}
|
}
|
||||||
apiEnvironmentRule.setup(apiConfigsManager)
|
apiEnvironmentRule.setup(apiConfigsManager)
|
||||||
|
|
|
||||||
|
|
@ -128,10 +128,6 @@ fun BaseTestCase.synchronizeAddresses(
|
||||||
onMainScreen { totalBalanceText.assert(!hasText(DASH_SIGN)) }
|
onMainScreen { totalBalanceText.assert(!hasText(DASH_SIGN)) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
step("Expand 'Main account' to reveal tokens") {
|
|
||||||
onMainScreen { mainAccount().performClick() }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun BaseTestCase.openDeviceSettingsScreen() {
|
fun BaseTestCase.openDeviceSettingsScreen() {
|
||||||
|
|
|
||||||
|
|
@ -11,20 +11,17 @@ import io.qameta.allure.kotlin.Allure.step
|
||||||
import com.tangem.common.ui.R as CommonUiR
|
import com.tangem.common.ui.R as CommonUiR
|
||||||
|
|
||||||
private val firstStoryIndex = 0
|
private val firstStoryIndex = 0
|
||||||
private val firstStoryTitle = getResourceString(CommonUiR.string.swap_story_first_title)
|
private val firstStoryTitle = getResourceString(CommonUiR.string.swap_story_first_title_v2)
|
||||||
private val firstStorySubtitle = getResourceString(CommonUiR.string.swap_story_first_subtitle)
|
private val firstStorySubtitle = getResourceString(CommonUiR.string.swap_story_first_subtitle_v2)
|
||||||
private val secondStoryIndex = 1
|
private val secondStoryIndex = 1
|
||||||
private val secondStoryTitle = getResourceString(CommonUiR.string.swap_story_second_title)
|
private val secondStoryTitle = getResourceString(CommonUiR.string.swap_story_second_title_v2)
|
||||||
private val secondStorySubtitle = getResourceString(CommonUiR.string.swap_story_second_subtitle)
|
private val secondStorySubtitle = getResourceString(CommonUiR.string.swap_story_second_subtitle_v2)
|
||||||
private val thirdStoryIndex = 2
|
private val thirdStoryIndex = 2
|
||||||
private val thirdStoryTitle = getResourceString(CommonUiR.string.swap_story_third_title)
|
private val thirdStoryTitle = getResourceString(CommonUiR.string.swap_story_third_title_v2)
|
||||||
private val thirdStorySubtitle = getResourceString(CommonUiR.string.swap_story_third_subtitle)
|
private val thirdStorySubtitle = getResourceString(CommonUiR.string.swap_story_third_subtitle_v2)
|
||||||
private val forthStoryIndex = 3
|
private val forthStoryIndex = 3
|
||||||
private val forthStoryTitle = getResourceString(CommonUiR.string.swap_story_forth_title)
|
private val forthStoryTitle = getResourceString(CommonUiR.string.swap_story_forth_title_v2)
|
||||||
private val forthStorySubtitle = getResourceString(CommonUiR.string.swap_story_forth_subtitle)
|
private val forthStorySubtitle = getResourceString(CommonUiR.string.swap_story_forth_subtitle_v2)
|
||||||
private val fifthStoryIndex = 4
|
|
||||||
private val fifthStoryTitle = getResourceString(CommonUiR.string.swap_story_fifth_title)
|
|
||||||
private val fifthStorySubtitle = getResourceString(CommonUiR.string.swap_story_fifth_subtitle)
|
|
||||||
|
|
||||||
fun BaseTestCase.openSwapScreen(
|
fun BaseTestCase.openSwapScreen(
|
||||||
from: SwapEntryPoint,
|
from: SwapEntryPoint,
|
||||||
|
|
@ -120,26 +117,6 @@ fun BaseTestCase.checkStoriesChanges() {
|
||||||
storySubtitle = forthStorySubtitle
|
storySubtitle = forthStorySubtitle
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
step("Click on right side") {
|
|
||||||
onSwapStoriesScreen { container.performTouchInput { click(centerRight) } }
|
|
||||||
}
|
|
||||||
step("Check title and subtitle for story №${fifthStoryIndex + 1}") {
|
|
||||||
checkStoriesContent(
|
|
||||||
storyIndex = fifthStoryIndex,
|
|
||||||
storyTitle = fifthStoryTitle,
|
|
||||||
storySubtitle = fifthStorySubtitle
|
|
||||||
)
|
|
||||||
}
|
|
||||||
step("Click on left side") {
|
|
||||||
onSwapStoriesScreen { container.performTouchInput { click(centerLeft) } }
|
|
||||||
}
|
|
||||||
step("Check title and subtitle for story №${forthStoryIndex + 1}") {
|
|
||||||
checkStoriesContent(
|
|
||||||
storyIndex = forthStoryIndex,
|
|
||||||
storyTitle = forthStoryTitle,
|
|
||||||
storySubtitle = forthStorySubtitle
|
|
||||||
)
|
|
||||||
}
|
|
||||||
step("Click on left side") {
|
step("Click on left side") {
|
||||||
onSwapStoriesScreen { container.performTouchInput { click(centerLeft) } }
|
onSwapStoriesScreen { container.performTouchInput { click(centerLeft) } }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -244,7 +244,7 @@ class MainScreenPageObject(semanticsProvider: SemanticsNodeInteractionsProvider)
|
||||||
fun tokenWithTitleAndAddress(tokenTitle: String): KNode {
|
fun tokenWithTitleAndAddress(tokenTitle: String): KNode {
|
||||||
return lazyList.childWith<LazyListItemNode> {
|
return lazyList.childWith<LazyListItemNode> {
|
||||||
hasTestTag(MainScreenTestTags.TOKEN_LIST_ITEM)
|
hasTestTag(MainScreenTestTags.TOKEN_LIST_ITEM)
|
||||||
hasAnyDescendant(withText(tokenTitle))
|
hasText(tokenTitle)
|
||||||
useUnmergedTree = true
|
useUnmergedTree = true
|
||||||
}.child<KNode> {
|
}.child<KNode> {
|
||||||
hasTestTag(TokenElementsTestTags.TOKEN_FIAT_AMOUNT)
|
hasTestTag(TokenElementsTestTags.TOKEN_FIAT_AMOUNT)
|
||||||
|
|
@ -256,7 +256,7 @@ class MainScreenPageObject(semanticsProvider: SemanticsNodeInteractionsProvider)
|
||||||
fun tokenWithCustomDerivationIcon(tokenTitle: String): KNode {
|
fun tokenWithCustomDerivationIcon(tokenTitle: String): KNode {
|
||||||
return lazyList.childWith<LazyListItemNode> {
|
return lazyList.childWith<LazyListItemNode> {
|
||||||
hasTestTag(MainScreenTestTags.TOKEN_LIST_ITEM)
|
hasTestTag(MainScreenTestTags.TOKEN_LIST_ITEM)
|
||||||
hasAnyDescendant(withText(tokenTitle))
|
hasText(tokenTitle)
|
||||||
useUnmergedTree = true
|
useUnmergedTree = true
|
||||||
}.child<KNode> {
|
}.child<KNode> {
|
||||||
hasTestTag(TokenElementsTestTags.TOKEN_CUSTOM_DERIVATION_ICON)
|
hasTestTag(TokenElementsTestTags.TOKEN_CUSTOM_DERIVATION_ICON)
|
||||||
|
|
@ -297,7 +297,7 @@ class MainScreenPageObject(semanticsProvider: SemanticsNodeInteractionsProvider)
|
||||||
fun tokenWithTitleAndPosition(tokenTitle: String, index: Int): KNode {
|
fun tokenWithTitleAndPosition(tokenTitle: String, index: Int): KNode {
|
||||||
return lazyList.childWith<LazyListItemNode> {
|
return lazyList.childWith<LazyListItemNode> {
|
||||||
hasTestTag(MainScreenTestTags.TOKEN_LIST_ITEM)
|
hasTestTag(MainScreenTestTags.TOKEN_LIST_ITEM)
|
||||||
hasAnyDescendant(withText(tokenTitle))
|
hasText(tokenTitle)
|
||||||
hasLazyListItemPosition(index)
|
hasLazyListItemPosition(index)
|
||||||
useUnmergedTree = true
|
useUnmergedTree = true
|
||||||
}.child<KNode> {
|
}.child<KNode> {
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,7 @@ class SwapTokenPageObject(semanticsProvider: SemanticsNodeInteractionsProvider)
|
||||||
|
|
||||||
val youSwapBlock: KNode = child {
|
val youSwapBlock: KNode = child {
|
||||||
hasTestTag(SwapTokenScreenTestTags.SWAP_BLOCK_HEADER)
|
hasTestTag(SwapTokenScreenTestTags.SWAP_BLOCK_HEADER)
|
||||||
hasAnyDescendant(withText(getResourceString(R.string.swapping_from_title)))
|
hasAnyDescendant(withText(getResourceString(R.string.swapping_from_title_v2)))
|
||||||
hasAnyDescendant(withTestTag(SwapTokenScreenTestTags.BALANCE))
|
hasAnyDescendant(withTestTag(SwapTokenScreenTestTags.BALANCE))
|
||||||
useUnmergedTree = true
|
useUnmergedTree = true
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@ class SwapChooseTokenScreenTest : BaseTestCase() {
|
||||||
@Test
|
@Test
|
||||||
fun checkAvailableToSwapTokensListTest() {
|
fun checkAvailableToSwapTokensListTest() {
|
||||||
val tokenTitle = "Polygon"
|
val tokenTitle = "Polygon"
|
||||||
val inputAmount = "100"
|
|
||||||
val ethereum = "Ethereum"
|
val ethereum = "Ethereum"
|
||||||
val polExMatic = "POL (ex-MATIC)"
|
val polExMatic = "POL (ex-MATIC)"
|
||||||
val bitcoin = "Bitcoin"
|
val bitcoin = "Bitcoin"
|
||||||
|
|
@ -66,13 +65,6 @@ class SwapChooseTokenScreenTest : BaseTestCase() {
|
||||||
step("Assert 'You swap' block is displayed") {
|
step("Assert 'You swap' block is displayed") {
|
||||||
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
||||||
}
|
}
|
||||||
step("Input swap amount = '$inputAmount'") {
|
|
||||||
waitForIdle()
|
|
||||||
onSwapTokenScreen {
|
|
||||||
textInput.clickWithAssertion()
|
|
||||||
textInput.performTextReplacement(inputAmount)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
step("Click on 'Select token' icon") {
|
step("Click on 'Select token' icon") {
|
||||||
onSwapTokenScreen { swapSelectTokenIcon.performClick() }
|
onSwapTokenScreen { swapSelectTokenIcon.performClick() }
|
||||||
}
|
}
|
||||||
|
|
@ -102,7 +94,6 @@ class SwapChooseTokenScreenTest : BaseTestCase() {
|
||||||
@Test
|
@Test
|
||||||
fun checkSearchOnSwapChooseTokenScreenTest() {
|
fun checkSearchOnSwapChooseTokenScreenTest() {
|
||||||
val tokenTitle = "Polygon"
|
val tokenTitle = "Polygon"
|
||||||
val inputAmount = "100"
|
|
||||||
val ethereum = "Ethereum"
|
val ethereum = "Ethereum"
|
||||||
val polExMatic = "POL (ex-MATIC)"
|
val polExMatic = "POL (ex-MATIC)"
|
||||||
val polExMaticSymbol = "POL"
|
val polExMaticSymbol = "POL"
|
||||||
|
|
@ -129,13 +120,6 @@ class SwapChooseTokenScreenTest : BaseTestCase() {
|
||||||
step("Assert 'You swap' block is displayed") {
|
step("Assert 'You swap' block is displayed") {
|
||||||
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
||||||
}
|
}
|
||||||
step("Input swap amount = '$inputAmount'") {
|
|
||||||
waitForIdle()
|
|
||||||
onSwapTokenScreen {
|
|
||||||
textInput.clickWithAssertion()
|
|
||||||
textInput.performTextReplacement(inputAmount)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
step("Click on 'Choose token' button") {
|
step("Click on 'Choose token' button") {
|
||||||
onSwapTokenScreen { chooseTokenButton.performClick() }
|
onSwapTokenScreen { chooseTokenButton.performClick() }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,7 @@ class SwapStoriesTest : BaseTestCase() {
|
||||||
@DisplayName("Check unavailable swap stories on 'Main' screen")
|
@DisplayName("Check unavailable swap stories on 'Main' screen")
|
||||||
@Test
|
@Test
|
||||||
fun checkUnavailableSwapStoriesOnMainScreen() {
|
fun checkUnavailableSwapStoriesOnMainScreen() {
|
||||||
val scenarioName = "stories_first_time_swap"
|
val scenarioName = "stories_first_time_swap_v2"
|
||||||
val scenarioErrorState = "Error"
|
val scenarioErrorState = "Error"
|
||||||
val packageName = getTargetContext().packageName
|
val packageName = getTargetContext().packageName
|
||||||
|
|
||||||
|
|
@ -168,7 +168,7 @@ class SwapStoriesTest : BaseTestCase() {
|
||||||
@DisplayName("Check unavailable swap stories on 'Token details' screen")
|
@DisplayName("Check unavailable swap stories on 'Token details' screen")
|
||||||
@Test
|
@Test
|
||||||
fun checkUnavailableSwapStoriesOnTokenDetailsScreen() {
|
fun checkUnavailableSwapStoriesOnTokenDetailsScreen() {
|
||||||
val scenarioName = "stories_first_time_swap"
|
val scenarioName = "stories_first_time_swap_v2"
|
||||||
val scenarioErrorState = "Error"
|
val scenarioErrorState = "Error"
|
||||||
val packageName = getTargetContext().packageName
|
val packageName = getTargetContext().packageName
|
||||||
val tokenName = "Ethereum"
|
val tokenName = "Ethereum"
|
||||||
|
|
@ -224,7 +224,7 @@ class SwapStoriesTest : BaseTestCase() {
|
||||||
@DisplayName("Check unavailable swap stories on 'Markets' token details screen")
|
@DisplayName("Check unavailable swap stories on 'Markets' token details screen")
|
||||||
@Test
|
@Test
|
||||||
fun checkUnavailableSwapStoriesOnMarketsTokenDetailsScreen() {
|
fun checkUnavailableSwapStoriesOnMarketsTokenDetailsScreen() {
|
||||||
val scenarioName = "stories_first_time_swap"
|
val scenarioName = "stories_first_time_swap_v2"
|
||||||
val scenarioErrorState = "Error"
|
val scenarioErrorState = "Error"
|
||||||
val packageName = getTargetContext().packageName
|
val packageName = getTargetContext().packageName
|
||||||
val tokenName = "Ethereum"
|
val tokenName = "Ethereum"
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,9 @@ class SwapTokenScreenTest : BaseTestCase() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
step("Choose receive token") {
|
||||||
|
chooseReceiveToken(receiveTokenName)
|
||||||
|
}
|
||||||
step("Input swap amount = '$inputAmount'") {
|
step("Input swap amount = '$inputAmount'") {
|
||||||
waitForIdle()
|
waitForIdle()
|
||||||
onSwapTokenScreen {
|
onSwapTokenScreen {
|
||||||
|
|
@ -75,9 +78,6 @@ class SwapTokenScreenTest : BaseTestCase() {
|
||||||
textInput.performTextReplacement(inputAmount)
|
textInput.performTextReplacement(inputAmount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
step("Choose receive token") {
|
|
||||||
chooseReceiveToken(receiveTokenName)
|
|
||||||
}
|
|
||||||
step("Assert input amount = '$inputAmount'") {
|
step("Assert input amount = '$inputAmount'") {
|
||||||
onSwapTokenScreen { textInput.assertTextEquals(inputAmount) }
|
onSwapTokenScreen { textInput.assertTextEquals(inputAmount) }
|
||||||
}
|
}
|
||||||
|
|
@ -121,6 +121,7 @@ class SwapTokenScreenTest : BaseTestCase() {
|
||||||
@Test
|
@Test
|
||||||
fun networkErrorSwapTest() {
|
fun networkErrorSwapTest() {
|
||||||
val tokenTitle = "Polygon"
|
val tokenTitle = "Polygon"
|
||||||
|
val receiveTokenName = "Ethereum"
|
||||||
|
|
||||||
setupHooks(
|
setupHooks(
|
||||||
additionalAfterSection = {
|
additionalAfterSection = {
|
||||||
|
|
@ -154,6 +155,9 @@ class SwapTokenScreenTest : BaseTestCase() {
|
||||||
step("Assert 'Swap' screen title is displayed") {
|
step("Assert 'Swap' screen title is displayed") {
|
||||||
onSwapTokenScreen { title.assertIsDisplayed() }
|
onSwapTokenScreen { title.assertIsDisplayed() }
|
||||||
}
|
}
|
||||||
|
step("Choose receive token") {
|
||||||
|
chooseReceiveToken(receiveTokenName)
|
||||||
|
}
|
||||||
step("Assert error notification title is displayed") {
|
step("Assert error notification title is displayed") {
|
||||||
onSwapTokenScreen {
|
onSwapTokenScreen {
|
||||||
waitForIdle()
|
waitForIdle()
|
||||||
|
|
@ -212,6 +216,9 @@ class SwapTokenScreenTest : BaseTestCase() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
step("Choose receive token") {
|
||||||
|
chooseReceiveToken(receiveTokenName)
|
||||||
|
}
|
||||||
step("Input swap amount = '$inputAmount'") {
|
step("Input swap amount = '$inputAmount'") {
|
||||||
waitForIdle()
|
waitForIdle()
|
||||||
onSwapTokenScreen {
|
onSwapTokenScreen {
|
||||||
|
|
@ -222,9 +229,6 @@ class SwapTokenScreenTest : BaseTestCase() {
|
||||||
step("Assert input amount = '$inputAmount'") {
|
step("Assert input amount = '$inputAmount'") {
|
||||||
onSwapTokenScreen { textInput.assertTextEquals(inputAmount) }
|
onSwapTokenScreen { textInput.assertTextEquals(inputAmount) }
|
||||||
}
|
}
|
||||||
step("Choose receive token") {
|
|
||||||
chooseReceiveToken(receiveTokenName)
|
|
||||||
}
|
|
||||||
step("Assert receive amount is displayed") {
|
step("Assert receive amount is displayed") {
|
||||||
onSwapTokenScreen {
|
onSwapTokenScreen {
|
||||||
flakySafely(WAIT_UNTIL_TIMEOUT) {
|
flakySafely(WAIT_UNTIL_TIMEOUT) {
|
||||||
|
|
@ -461,8 +465,12 @@ class SwapTokenScreenTest : BaseTestCase() {
|
||||||
onSwapTokenScreen { receiveTokenSymbol(receiveTokenSymbol).assertIsDisplayed() }
|
onSwapTokenScreen { receiveTokenSymbol(receiveTokenSymbol).assertIsDisplayed() }
|
||||||
}
|
}
|
||||||
step("Click on 'Swap tokens on screen' button") {
|
step("Click on 'Swap tokens on screen' button") {
|
||||||
onSwapTokenScreen { replaceTokensButton.performClick() }
|
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
||||||
waitForIdle()
|
onSwapTokenScreen {
|
||||||
|
replaceTokensButton.assertIsEnabled()
|
||||||
|
replaceTokensButton.performClick()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
step("Assert new swap token symbol: '$receiveTokenSymbol' is displayed") {
|
step("Assert new swap token symbol: '$receiveTokenSymbol' is displayed") {
|
||||||
onSwapTokenScreen { swapTokenSymbol(receiveTokenSymbol).assertIsDisplayed() }
|
onSwapTokenScreen { swapTokenSymbol(receiveTokenSymbol).assertIsDisplayed() }
|
||||||
|
|
@ -557,6 +565,9 @@ class SwapTokenScreenTest : BaseTestCase() {
|
||||||
step("Assert 'You swap' block is displayed") {
|
step("Assert 'You swap' block is displayed") {
|
||||||
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
||||||
}
|
}
|
||||||
|
step("Choose receive token") {
|
||||||
|
chooseReceiveToken(receiveTokenName)
|
||||||
|
}
|
||||||
step("Input swap amount = '$inputAmount'") {
|
step("Input swap amount = '$inputAmount'") {
|
||||||
waitForIdle()
|
waitForIdle()
|
||||||
onSwapTokenScreen {
|
onSwapTokenScreen {
|
||||||
|
|
@ -564,9 +575,6 @@ class SwapTokenScreenTest : BaseTestCase() {
|
||||||
textInput.performTextReplacement(inputAmount)
|
textInput.performTextReplacement(inputAmount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
step("Choose receive token") {
|
|
||||||
chooseReceiveToken(receiveTokenName)
|
|
||||||
}
|
|
||||||
step("Select '$market' fee type") {
|
step("Select '$market' fee type") {
|
||||||
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
||||||
selectFeeType(FeeType.Market, selectedFeeAmount = marketFeeAmount)
|
selectFeeType(FeeType.Market, selectedFeeAmount = marketFeeAmount)
|
||||||
|
|
@ -623,6 +631,9 @@ class SwapTokenScreenTest : BaseTestCase() {
|
||||||
step("Assert 'You swap' block is displayed") {
|
step("Assert 'You swap' block is displayed") {
|
||||||
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
||||||
}
|
}
|
||||||
|
step("Choose receive token") {
|
||||||
|
chooseReceiveToken(receiveTokenName)
|
||||||
|
}
|
||||||
step("Input swap amount = '$inputAmount'") {
|
step("Input swap amount = '$inputAmount'") {
|
||||||
waitForIdle()
|
waitForIdle()
|
||||||
onSwapTokenScreen {
|
onSwapTokenScreen {
|
||||||
|
|
@ -630,9 +641,6 @@ class SwapTokenScreenTest : BaseTestCase() {
|
||||||
textInput.performTextReplacement(inputAmount)
|
textInput.performTextReplacement(inputAmount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
step("Choose receive token") {
|
|
||||||
chooseReceiveToken(receiveTokenName)
|
|
||||||
}
|
|
||||||
step("Select '$marketFeeType' fee type") {
|
step("Select '$marketFeeType' fee type") {
|
||||||
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
||||||
selectFeeType(feeType = FeeType.Market, feeAmount)
|
selectFeeType(feeType = FeeType.Market, feeAmount)
|
||||||
|
|
@ -703,6 +711,9 @@ class SwapTokenScreenTest : BaseTestCase() {
|
||||||
step("Assert 'You swap' block is displayed") {
|
step("Assert 'You swap' block is displayed") {
|
||||||
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
||||||
}
|
}
|
||||||
|
step("Choose receive token") {
|
||||||
|
chooseReceiveToken(receiveTokenName)
|
||||||
|
}
|
||||||
step("Input swap amount = '$inputAmount'") {
|
step("Input swap amount = '$inputAmount'") {
|
||||||
waitForIdle()
|
waitForIdle()
|
||||||
onSwapTokenScreen {
|
onSwapTokenScreen {
|
||||||
|
|
@ -710,9 +721,6 @@ class SwapTokenScreenTest : BaseTestCase() {
|
||||||
textInput.performTextReplacement(inputAmount)
|
textInput.performTextReplacement(inputAmount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
step("Choose receive token") {
|
|
||||||
chooseReceiveToken(receiveTokenName)
|
|
||||||
}
|
|
||||||
step("Assert 'Swap' button is enabled") {
|
step("Assert 'Swap' button is enabled") {
|
||||||
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
||||||
onSwapTokenScreen { swapButton.assertIsEnabled() }
|
onSwapTokenScreen { swapButton.assertIsEnabled() }
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,9 @@ class SwapTokenScreenWarningsTest : BaseTestCase() {
|
||||||
step("Assert 'You swap' block is displayed") {
|
step("Assert 'You swap' block is displayed") {
|
||||||
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
||||||
}
|
}
|
||||||
|
step("Choose receive token") {
|
||||||
|
chooseReceiveToken(receiveTokenTitle)
|
||||||
|
}
|
||||||
step("Input swap amount = '$inputAmount'") {
|
step("Input swap amount = '$inputAmount'") {
|
||||||
waitForIdle()
|
waitForIdle()
|
||||||
onSwapTokenScreen {
|
onSwapTokenScreen {
|
||||||
|
|
@ -67,9 +70,6 @@ class SwapTokenScreenWarningsTest : BaseTestCase() {
|
||||||
textInput.performTextReplacement(inputAmount)
|
textInput.performTextReplacement(inputAmount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
step("Choose receive token") {
|
|
||||||
chooseReceiveToken(receiveTokenTitle)
|
|
||||||
}
|
|
||||||
step("Assert 'Insufficient funds' error is displayed") {
|
step("Assert 'Insufficient funds' error is displayed") {
|
||||||
waitForIdle()
|
waitForIdle()
|
||||||
onSwapTokenScreen { insufficientFundsErrorTitle.assertIsDisplayed() }
|
onSwapTokenScreen { insufficientFundsErrorTitle.assertIsDisplayed() }
|
||||||
|
|
@ -125,6 +125,9 @@ class SwapTokenScreenWarningsTest : BaseTestCase() {
|
||||||
step("Assert 'You swap' block is displayed") {
|
step("Assert 'You swap' block is displayed") {
|
||||||
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
||||||
}
|
}
|
||||||
|
step("Choose receive token") {
|
||||||
|
chooseReceiveToken(networkName)
|
||||||
|
}
|
||||||
step("Input swap amount = '$inputAmount'") {
|
step("Input swap amount = '$inputAmount'") {
|
||||||
waitForIdle()
|
waitForIdle()
|
||||||
onSwapTokenScreen {
|
onSwapTokenScreen {
|
||||||
|
|
@ -132,9 +135,6 @@ class SwapTokenScreenWarningsTest : BaseTestCase() {
|
||||||
textInput.performTextReplacement(inputAmount)
|
textInput.performTextReplacement(inputAmount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
step("Choose receive token") {
|
|
||||||
chooseReceiveToken(networkName)
|
|
||||||
}
|
|
||||||
step("Check 'Unable to cover '$networkName' fee notification") {
|
step("Check 'Unable to cover '$networkName' fee notification") {
|
||||||
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
||||||
chackUnableToCoverFeeNotification(networkName = networkName, currencySymbol = currencySymbol)
|
chackUnableToCoverFeeNotification(networkName = networkName, currencySymbol = currencySymbol)
|
||||||
|
|
@ -204,6 +204,9 @@ class SwapTokenScreenWarningsTest : BaseTestCase() {
|
||||||
step("Assert 'You swap' block is displayed") {
|
step("Assert 'You swap' block is displayed") {
|
||||||
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
||||||
}
|
}
|
||||||
|
step("Choose receive token") {
|
||||||
|
chooseReceiveToken(receiveTokenName)
|
||||||
|
}
|
||||||
step("Input swap amount = '$inputAmount'") {
|
step("Input swap amount = '$inputAmount'") {
|
||||||
waitForIdle()
|
waitForIdle()
|
||||||
onSwapTokenScreen {
|
onSwapTokenScreen {
|
||||||
|
|
@ -211,9 +214,6 @@ class SwapTokenScreenWarningsTest : BaseTestCase() {
|
||||||
textInput.performTextReplacement(inputAmount)
|
textInput.performTextReplacement(inputAmount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
step("Choose receive token") {
|
|
||||||
chooseReceiveToken(receiveTokenName)
|
|
||||||
}
|
|
||||||
step("Assert fiat amount with warning is displayed") {
|
step("Assert fiat amount with warning is displayed") {
|
||||||
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
||||||
onSwapTokenScreen {
|
onSwapTokenScreen {
|
||||||
|
|
@ -293,6 +293,9 @@ class SwapTokenScreenWarningsTest : BaseTestCase() {
|
||||||
step("Assert 'You swap' block is displayed") {
|
step("Assert 'You swap' block is displayed") {
|
||||||
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
||||||
}
|
}
|
||||||
|
step("Choose receive token") {
|
||||||
|
chooseReceiveToken(receiveTokenName)
|
||||||
|
}
|
||||||
step("Input swap amount = '$inputAmount'") {
|
step("Input swap amount = '$inputAmount'") {
|
||||||
waitForIdle()
|
waitForIdle()
|
||||||
onSwapTokenScreen {
|
onSwapTokenScreen {
|
||||||
|
|
@ -300,9 +303,6 @@ class SwapTokenScreenWarningsTest : BaseTestCase() {
|
||||||
textInput.performTextReplacement(inputAmount)
|
textInput.performTextReplacement(inputAmount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
step("Choose receive token") {
|
|
||||||
chooseReceiveToken(receiveTokenName)
|
|
||||||
}
|
|
||||||
step("Assert fiat amount with warning is displayed") {
|
step("Assert fiat amount with warning is displayed") {
|
||||||
onSwapTokenScreen { receiveFiatAmount.assertTextContains("%", substring = true) }
|
onSwapTokenScreen { receiveFiatAmount.assertTextContains("%", substring = true) }
|
||||||
}
|
}
|
||||||
|
|
@ -381,6 +381,9 @@ class SwapTokenScreenWarningsTest : BaseTestCase() {
|
||||||
step("Assert 'You swap' block is displayed") {
|
step("Assert 'You swap' block is displayed") {
|
||||||
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
||||||
}
|
}
|
||||||
|
step("Choose receive token") {
|
||||||
|
chooseReceiveToken(receiveTokenName)
|
||||||
|
}
|
||||||
step("Input swap amount = '$inputAmount'") {
|
step("Input swap amount = '$inputAmount'") {
|
||||||
waitForIdle()
|
waitForIdle()
|
||||||
onSwapTokenScreen {
|
onSwapTokenScreen {
|
||||||
|
|
@ -388,9 +391,6 @@ class SwapTokenScreenWarningsTest : BaseTestCase() {
|
||||||
textInput.performTextReplacement(inputAmount)
|
textInput.performTextReplacement(inputAmount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
step("Choose receive token") {
|
|
||||||
chooseReceiveToken(receiveTokenName)
|
|
||||||
}
|
|
||||||
step("Assert 'Invalid amount' warning is not displayed") {
|
step("Assert 'Invalid amount' warning is not displayed") {
|
||||||
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
||||||
checkSwapWarning(
|
checkSwapWarning(
|
||||||
|
|
@ -450,6 +450,9 @@ class SwapTokenScreenWarningsTest : BaseTestCase() {
|
||||||
step("Assert 'You swap' block is displayed") {
|
step("Assert 'You swap' block is displayed") {
|
||||||
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
||||||
}
|
}
|
||||||
|
step("Choose receive token") {
|
||||||
|
chooseReceiveToken(receiveTokenName)
|
||||||
|
}
|
||||||
step("Input swap amount = '$inputAmount'") {
|
step("Input swap amount = '$inputAmount'") {
|
||||||
waitForIdle()
|
waitForIdle()
|
||||||
onSwapTokenScreen {
|
onSwapTokenScreen {
|
||||||
|
|
@ -457,9 +460,6 @@ class SwapTokenScreenWarningsTest : BaseTestCase() {
|
||||||
textInput.performTextReplacement(inputAmount)
|
textInput.performTextReplacement(inputAmount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
step("Choose receive token") {
|
|
||||||
chooseReceiveToken(receiveTokenName)
|
|
||||||
}
|
|
||||||
step("Assert 'Invalid amount' warning is not displayed") {
|
step("Assert 'Invalid amount' warning is not displayed") {
|
||||||
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
||||||
checkSwapWarning(
|
checkSwapWarning(
|
||||||
|
|
@ -520,6 +520,9 @@ class SwapTokenScreenWarningsTest : BaseTestCase() {
|
||||||
step("Assert 'You swap' block is displayed") {
|
step("Assert 'You swap' block is displayed") {
|
||||||
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
||||||
}
|
}
|
||||||
|
step("Choose receive token") {
|
||||||
|
chooseReceiveToken(receiveTokenName)
|
||||||
|
}
|
||||||
step("Input swap amount = '$inputAmount'") {
|
step("Input swap amount = '$inputAmount'") {
|
||||||
waitForIdle()
|
waitForIdle()
|
||||||
onSwapTokenScreen {
|
onSwapTokenScreen {
|
||||||
|
|
@ -527,9 +530,6 @@ class SwapTokenScreenWarningsTest : BaseTestCase() {
|
||||||
textInput.performTextReplacement(inputAmount)
|
textInput.performTextReplacement(inputAmount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
step("Choose receive token") {
|
|
||||||
chooseReceiveToken(receiveTokenName)
|
|
||||||
}
|
|
||||||
step("Assert 'Invalid amount' warning is not displayed") {
|
step("Assert 'Invalid amount' warning is not displayed") {
|
||||||
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
||||||
checkSwapWarning(
|
checkSwapWarning(
|
||||||
|
|
@ -589,6 +589,9 @@ class SwapTokenScreenWarningsTest : BaseTestCase() {
|
||||||
step("Assert 'You swap' block is displayed") {
|
step("Assert 'You swap' block is displayed") {
|
||||||
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
onSwapTokenScreen { youSwapBlock.assertIsDisplayed() }
|
||||||
}
|
}
|
||||||
|
step("Choose receive token") {
|
||||||
|
chooseReceiveToken(receiveTokenName)
|
||||||
|
}
|
||||||
step("Input swap amount = '$inputAmount'") {
|
step("Input swap amount = '$inputAmount'") {
|
||||||
waitForIdle()
|
waitForIdle()
|
||||||
onSwapTokenScreen {
|
onSwapTokenScreen {
|
||||||
|
|
@ -596,9 +599,6 @@ class SwapTokenScreenWarningsTest : BaseTestCase() {
|
||||||
textInput.performTextReplacement(inputAmount)
|
textInput.performTextReplacement(inputAmount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
step("Choose receive token") {
|
|
||||||
chooseReceiveToken(receiveTokenName)
|
|
||||||
}
|
|
||||||
step("Assert 'Invalid amount' warning is displayed") {
|
step("Assert 'Invalid amount' warning is displayed") {
|
||||||
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
flakySafely(WAIT_UNTIL_TIMEOUT_LONG) {
|
||||||
checkSwapWarning(
|
checkSwapWarning(
|
||||||
|
|
|
||||||
|
|
@ -84,10 +84,8 @@ internal class MockAwareTangemPayStorage @Inject constructor(
|
||||||
override suspend fun storeCheckCustomerWalletResult(userWalletId: UserWalletId, isPaeraCustomer: Boolean) =
|
override suspend fun storeCheckCustomerWalletResult(userWalletId: UserWalletId, isPaeraCustomer: Boolean) =
|
||||||
real.storeCheckCustomerWalletResult(userWalletId, isPaeraCustomer)
|
real.storeCheckCustomerWalletResult(userWalletId, isPaeraCustomer)
|
||||||
|
|
||||||
override suspend fun checkCustomerWalletResult(userWalletId: UserWalletId): Boolean? {
|
override suspend fun checkCustomerWalletResult(userWalletId: UserWalletId): Boolean? =
|
||||||
if (isMockMode) return true
|
real.checkCustomerWalletResult(userWalletId)
|
||||||
return real.checkCustomerWalletResult(userWalletId)
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun storeActiveWithdrawOrderId(userWalletId: UserWalletId, orderId: String) =
|
override suspend fun storeActiveWithdrawOrderId(userWalletId: UserWalletId, orderId: String) =
|
||||||
real.storeActiveWithdrawOrderId(userWalletId, orderId)
|
real.storeActiveWithdrawOrderId(userWalletId, orderId)
|
||||||
|
|
|
||||||
|
|
@ -96,14 +96,14 @@ fun StoriesProgressBar(
|
||||||
.height(2.dp)
|
.height(2.dp)
|
||||||
.weight(1f)
|
.weight(1f)
|
||||||
.clip(RoundedCornerShape(2.dp))
|
.clip(RoundedCornerShape(2.dp))
|
||||||
.background(TangemColorPalette.White.copy(alpha = .2f)),
|
.background(TangemColorPalette.White.copy(alpha = .2f))
|
||||||
|
.testTag(SwapStoriesScreenTestTags.PROGRESS_BAR_ITEM),
|
||||||
) {
|
) {
|
||||||
Box(
|
Box(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.clip(RoundedCornerShape(2.dp))
|
.clip(RoundedCornerShape(2.dp))
|
||||||
.background(TangemColorPalette.White)
|
.background(TangemColorPalette.White)
|
||||||
.fillMaxHeight()
|
.fillMaxHeight()
|
||||||
.testTag(SwapStoriesScreenTestTags.PROGRESS_BAR_ITEM)
|
|
||||||
.let { modifier ->
|
.let { modifier ->
|
||||||
when (index) {
|
when (index) {
|
||||||
currentStep -> modifier.fillMaxWidth(progress.value)
|
currentStep -> modifier.fillMaxWidth(progress.value)
|
||||||
|
|
|
||||||
|
|
@ -71,15 +71,11 @@ internal class MockAwareOnboardingRepository @Inject constructor(
|
||||||
override suspend fun hasTangemPayInWallet(userWalletId: UserWalletId): Either<VisaApiError, Boolean> =
|
override suspend fun hasTangemPayInWallet(userWalletId: UserWalletId): Either<VisaApiError, Boolean> =
|
||||||
real.hasTangemPayInWallet(userWalletId)
|
real.hasTangemPayInWallet(userWalletId)
|
||||||
|
|
||||||
override suspend fun checkCustomerEligibility(): List<TangemPayEligibilityType> {
|
override suspend fun checkCustomerEligibility(): List<TangemPayEligibilityType> =
|
||||||
if (isMockMode) return listOf(TangemPayEligibilityType.DETAILS)
|
real.checkCustomerEligibility()
|
||||||
return real.checkCustomerEligibility()
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun getCustomerEligibility(): List<TangemPayEligibilityType> {
|
override suspend fun getCustomerEligibility(): List<TangemPayEligibilityType> =
|
||||||
if (isMockMode) return listOf(TangemPayEligibilityType.DETAILS)
|
real.getCustomerEligibility()
|
||||||
return real.getCustomerEligibility()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getSavedCustomerInfo(userWalletId: UserWalletId): CustomerInfo? =
|
override fun getSavedCustomerInfo(userWalletId: UserWalletId): CustomerInfo? =
|
||||||
real.getSavedCustomerInfo(userWalletId)
|
real.getSavedCustomerInfo(userWalletId)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue