Updated on 2026-08-14

This commit is contained in:
Tangem 2025-07-02 12:26:25 +03:00
parent 47ba4043a3
commit b89a6690eb
5 changed files with 46 additions and 18 deletions

View file

@ -330,6 +330,7 @@ dependencies {
androidTestImplementation(deps.test.espresso.intents)
androidTestImplementation(deps.test.kaspresso)
androidTestImplementation(deps.test.kaspresso.compose)
androidTestImplementation(deps.test.kaspresso.allure)
androidTestImplementation(deps.test.compose.junit)
androidTestImplementation(deps.test.hamcrest)
androidTestImplementation(deps.test.hilt)

View file

@ -1,31 +1,37 @@
package com.tangem.common
import android.Manifest
import android.content.Context
import android.util.Log
import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.datastore.dataStoreFile
import androidx.test.espresso.intent.Intents
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.GrantPermissionRule
import com.kaspersky.components.composesupport.config.withComposeSupport
import com.kaspersky.components.alluresupport.interceptors.step.ScreenshotStepInterceptor
import com.kaspersky.components.alluresupport.withForcedAllureSupport
import com.kaspersky.components.composesupport.config.addComposeSupport
import com.kaspersky.kaspresso.kaspresso.Kaspresso
import com.kaspersky.kaspresso.testcases.api.testcase.TestCase
import com.tangem.common.allure.FailedStepScreenshotInterceptor
import com.tangem.datasource.local.preferences.AppPreferencesStore
import com.tangem.sdk.api.TangemSdkManager
import com.tangem.tap.MainActivity
import dagger.hilt.android.testing.HiltAndroidRule
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import org.junit.Rule
import org.junit.rules.RuleChain
import org.junit.rules.TestRule
import org.junit.runner.RunWith
import javax.inject.Inject
abstract class BaseTestCase : TestCase(
kaspressoBuilder = Kaspresso.Builder.withComposeSupport()
kaspressoBuilder = Kaspresso.Builder.withForcedAllureSupport(
shouldRecordVideo = false
).apply {
stepWatcherInterceptors = stepWatcherInterceptors.filter {
it !is ScreenshotStepInterceptor
}.toMutableList()
stepWatcherInterceptors.addAll(
listOf(
FailedStepScreenshotInterceptor(screenshots)
)
)
}.addComposeSupport()
) {
@Inject
@ -61,8 +67,4 @@ abstract class BaseTestCase : TestCase(
Intents.release()
}
companion object {
private const val INIT_DELAY = 1000L
}
}

View file

@ -2,10 +2,10 @@ package com.tangem.common
import android.app.Application
import android.content.Context
import androidx.test.runner.AndroidJUnitRunner
import com.kaspersky.kaspresso.runner.KaspressoRunner
import com.tangem.common.di.TangemMockedApplication_Application
class HiltTestRunner : AndroidJUnitRunner() {
class HiltTestRunner : KaspressoRunner() {
override fun newApplication(
cl: ClassLoader?,

View file

@ -0,0 +1,23 @@
package com.tangem.common.allure
import com.kaspersky.components.alluresupport.files.attachScreenshotToAllureReport
import com.kaspersky.kaspresso.device.screenshots.Screenshots
import com.kaspersky.kaspresso.interceptors.watcher.testcase.StepWatcherInterceptor
import com.kaspersky.kaspresso.testcases.models.info.StepInfo
class FailedStepScreenshotInterceptor (
private val screenshots: Screenshots
) : StepWatcherInterceptor {
override fun interceptAfterWithSuccess(stepInfo: StepInfo) = Unit
override fun interceptAfterWithError(stepInfo: StepInfo, error: Throwable) {
intercept("${makeTag(stepInfo)}_failure_${error.javaClass.simpleName}")
}
private fun intercept(tag: String) {
screenshots.takeAndApply(tag) { attachScreenshotToAllureReport() }
}
private fun makeTag(stepInfo: StepInfo): String = "${stepInfo.testClassName}_step_${stepInfo.ordinal}"
}

View file

@ -107,8 +107,9 @@ junitAndroidExt = "1.1.5"
mockk = "1.13.4"
turbine = "1.2.0"
truth = "1.1.3"
kaspresso = "1.5.4"
kaspresso-compose = "1.5.4"
kaspresso = "1.6.0"
kaspresso-compose = "1.6.0"
kaspresso-allure = "1.6.0"
compose-junit = "1.6.2"
hamcrest = "2.2"
orchestrator = "1.5.1"
@ -209,6 +210,7 @@ test-mockk = { module = "io.mockk:mockk", version.ref = "mockk" }
test-turbine = { module = "app.cash.turbine:turbine", version.ref = "turbine" }
test-kaspresso = { module = "com.kaspersky.android-components:kaspresso", version.ref = "kaspresso" }
test-kaspresso-compose = { module = "com.kaspersky.android-components:kaspresso-compose-support", version.ref = "kaspresso-compose" }
test-kaspresso-allure = { module = "com.kaspersky.android-components:kaspresso-allure-support", version.ref = "kaspresso-allure" }
test-compose-junit = { module = "androidx.compose.ui:ui-test-junit4", version.ref = "compose-junit" }
test-hamcrest = { module = "org.hamcrest:hamcrest", version.ref = "hamcrest" }
test-hilt = { module = "com.google.dagger:hilt-android-testing", version.ref = "hilt" }