Updated on 2026-08-14
This commit is contained in:
parent
d0f1e7c6c4
commit
71003c43db
6 changed files with 147 additions and 6 deletions
|
|
@ -0,0 +1,15 @@
|
|||
package com.tangem.common.extensions
|
||||
|
||||
import com.tangem.common.BaseTestCase
|
||||
|
||||
fun BaseTestCase.swipeToCloseApp() {
|
||||
|
||||
device.uiDevice.swipe(
|
||||
device.uiDevice.displayWidth / 2,
|
||||
device.uiDevice.displayHeight / 2,
|
||||
device.uiDevice.displayWidth / 2,
|
||||
device.uiDevice.displayHeight / 30,
|
||||
15
|
||||
)
|
||||
|
||||
}
|
||||
|
|
@ -3,9 +3,12 @@ package com.tangem.screens
|
|||
import androidx.compose.ui.test.SemanticsNodeInteractionsProvider
|
||||
import com.tangem.common.BaseTestCase
|
||||
import com.tangem.core.ui.test.DisclaimerScreenTestTags
|
||||
import com.tangem.core.ui.test.TopAppBarTestTags
|
||||
import com.tangem.features.disclaimer.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
|
||||
|
||||
class DisclaimerPageObject(semanticsProvider: SemanticsNodeInteractionsProvider) :
|
||||
ComposeScreen<DisclaimerPageObject>(
|
||||
|
|
@ -13,6 +16,15 @@ class DisclaimerPageObject(semanticsProvider: SemanticsNodeInteractionsProvider)
|
|||
viewBuilderAction = { hasTestTag(DisclaimerScreenTestTags.SCREEN_CONTAINER) }
|
||||
) {
|
||||
|
||||
val title: KNode = child {
|
||||
hasTestTag(TopAppBarTestTags.TITLE)
|
||||
hasText(getResourceString(R.string.disclaimer_title))
|
||||
}
|
||||
|
||||
val webView: KNode = child {
|
||||
hasTestTag(DisclaimerScreenTestTags.WEB_VIEW)
|
||||
}
|
||||
|
||||
val acceptButton: KNode = child {
|
||||
hasTestTag(DisclaimerScreenTestTags.ACCEPT_BUTTON)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,18 +3,19 @@ package com.tangem.tests
|
|||
import android.content.Intent.ACTION_VIEW
|
||||
import com.tangem.common.BaseTestCase
|
||||
import com.tangem.common.extensions.clickWithAssertion
|
||||
import com.tangem.screens.DisclaimerTestScreen
|
||||
import com.tangem.screens.StoriesTestScreen
|
||||
import com.tangem.tap.features.home.redux.HomeMiddleware.NEW_BUY_WALLET_URL
|
||||
import com.tangem.screens.onDisclaimerScreen
|
||||
import com.tangem.screens.onStoriesScreen
|
||||
import dagger.hilt.android.testing.HiltAndroidTest
|
||||
import io.github.kakaocup.kakao.intent.KIntent
|
||||
import org.junit.Test
|
||||
|
||||
@HiltAndroidTest
|
||||
class StoriesTest : BaseTestCase() {
|
||||
|
||||
// @Test
|
||||
@Test
|
||||
fun clickOnOrderButtonTest() =
|
||||
setupHooks().run {
|
||||
val buyWalletUrl = "https://buy.tangem.com/?utm_source=tangem-app&utm_medium=app"
|
||||
onDisclaimerScreen {
|
||||
step("Click on 'Accept' button") {
|
||||
acceptButton.clickWithAssertion()
|
||||
|
|
@ -27,7 +28,7 @@ class StoriesTest : BaseTestCase() {
|
|||
step("Assert: browser opened") {
|
||||
val expectedIntent = KIntent {
|
||||
hasAction(ACTION_VIEW)
|
||||
hasData { toString().startsWith(NEW_BUY_WALLET_URL) }
|
||||
hasData { toString().startsWith(buyWalletUrl) }
|
||||
}
|
||||
expectedIntent.intended()
|
||||
device.uiDevice.pressBack()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,106 @@
|
|||
package com.tangem.tests
|
||||
|
||||
import androidx.test.InstrumentationRegistry.getTargetContext
|
||||
import com.tangem.common.BaseTestCase
|
||||
import com.tangem.common.extensions.clickWithAssertion
|
||||
import com.tangem.common.extensions.swipeToCloseApp
|
||||
import com.tangem.screens.onDisclaimerScreen
|
||||
import com.tangem.screens.onStoriesScreen
|
||||
import dagger.hilt.android.testing.HiltAndroidTest
|
||||
import io.qameta.allure.kotlin.AllureId
|
||||
import io.qameta.allure.kotlin.junit4.DisplayName
|
||||
import org.junit.Test
|
||||
|
||||
@HiltAndroidTest
|
||||
class TermsOfServiceTest : BaseTestCase() {
|
||||
|
||||
@AllureId("3573")
|
||||
@DisplayName("ToS: success acceptance")
|
||||
@Test
|
||||
fun validateTermsOfServiceScreenTest() {
|
||||
setupHooks().run {
|
||||
val tosUrl = "https://tangem.com/tangem_tos.html"
|
||||
step("Assert title of 'Disclaimer screen' is displayed") {
|
||||
onDisclaimerScreen { title.assertIsDisplayed() }
|
||||
}
|
||||
step("Assert title of 'Disclaimer screen' is displayed") {
|
||||
onDisclaimerScreen { webView.assertIsDisplayed() }
|
||||
}
|
||||
step("Verify WebView loads correct URL") {
|
||||
onDisclaimerScreen {
|
||||
webView.assertContentDescriptionContains(value = tosUrl, substring = true)
|
||||
}
|
||||
}
|
||||
step("Click on 'Accept' button") {
|
||||
onDisclaimerScreen { acceptButton.clickWithAssertion() }
|
||||
}
|
||||
step("Assert 'Stories' screen is opened") {
|
||||
onStoriesScreen {
|
||||
scanButton.assertIsDisplayed()
|
||||
orderButton.assertIsDisplayed()}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@AllureId("3574")
|
||||
@DisplayName("ToS: accept after app restart")
|
||||
@Test
|
||||
fun acceptTermsOfServiceAfterAppRestart() {
|
||||
val packageName = getTargetContext().packageName
|
||||
setupHooks().run {
|
||||
val tosUrl = "https://tangem.com/tangem_tos.html"
|
||||
step("Assert title of 'Disclaimer screen' is displayed") {
|
||||
onDisclaimerScreen { title.assertIsDisplayed() }
|
||||
}
|
||||
step("Assert WebView of 'Disclaimer screen' is displayed") {
|
||||
onDisclaimerScreen { webView.assertIsDisplayed() }
|
||||
}
|
||||
step("Verify WebView loads correct URL") {
|
||||
onDisclaimerScreen {
|
||||
webView.assertContentDescriptionContains(value = tosUrl, substring = true)
|
||||
}
|
||||
}
|
||||
step("'Accept' button is displayed") {
|
||||
onDisclaimerScreen { acceptButton.assertIsDisplayed() }
|
||||
}
|
||||
step("Open recent apps") {
|
||||
device.uiDevice.pressRecentApps()
|
||||
}
|
||||
step("Stop app by swipe") {
|
||||
swipeToCloseApp()
|
||||
}
|
||||
step("Launch app") {
|
||||
device.apps.launch(packageName)
|
||||
}
|
||||
step("Assert title of 'Disclaimer screen' is displayed") {
|
||||
onDisclaimerScreen { title.assertIsDisplayed() }
|
||||
}
|
||||
step("Assert WebView of 'Disclaimer screen' is displayed") {
|
||||
onDisclaimerScreen { webView.assertIsDisplayed() }
|
||||
}
|
||||
step("Verify WebView loads correct URL") {
|
||||
onDisclaimerScreen {
|
||||
webView.assertContentDescriptionContains(value = tosUrl, substring = true)
|
||||
}
|
||||
}
|
||||
step("Click on 'Accept' button") {
|
||||
onDisclaimerScreen { acceptButton.clickWithAssertion() }
|
||||
}
|
||||
step("Open recent apps") {
|
||||
device.uiDevice.pressRecentApps()
|
||||
}
|
||||
step("Stop app by swipe") {
|
||||
swipeToCloseApp()
|
||||
}
|
||||
step("Launch app") {
|
||||
device.apps.launch(packageName)
|
||||
}
|
||||
step("Assert 'Stories' screen is opened") {
|
||||
onStoriesScreen {
|
||||
scanButton.assertIsDisplayed()
|
||||
orderButton.assertIsDisplayed()}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -3,4 +3,5 @@ package com.tangem.core.ui.test
|
|||
object DisclaimerScreenTestTags {
|
||||
const val SCREEN_CONTAINER = "DISCLAIMER_SCREEN_CONTAINER"
|
||||
const val ACCEPT_BUTTON = "DISCLAIMER_SCREEN_ACCEPT_BUTTON"
|
||||
const val WEB_VIEW = "DISCLAIMER_SCREEN_WEB_VIEW"
|
||||
}
|
||||
|
|
@ -14,6 +14,8 @@ import androidx.compose.ui.Alignment
|
|||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.platform.testTag
|
||||
import androidx.compose.ui.semantics.contentDescription
|
||||
import androidx.compose.ui.semantics.semantics
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.google.accompanist.permissions.ExperimentalPermissionsApi
|
||||
import com.google.accompanist.permissions.isGranted
|
||||
|
|
@ -111,7 +113,11 @@ private fun DisclaimerContent(url: String) {
|
|||
state = webViewState,
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.background(TangemTheme.colors.background.primary),
|
||||
.background(TangemTheme.colors.background.primary)
|
||||
.testTag(DisclaimerScreenTestTags.WEB_VIEW)
|
||||
.semantics {
|
||||
contentDescription = "WebView URL: ${webViewState.content.getCurrentUrl() ?: url}"
|
||||
},
|
||||
captureBackPresses = false,
|
||||
navigator = webViewNavigator,
|
||||
onCreated = WebView::applySafeSettings,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue