From b89a6690eb10e99a9a838615de8ea6797447c50c Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 2 Jul 2025 12:26:25 +0300 Subject: [PATCH] Updated on 2026-08-14 --- app/build.gradle.kts | 1 + .../kotlin/com/tangem/common/BaseTestCase.kt | 30 ++++++++++--------- .../com/tangem/common/HiltTestRunner.kt | 4 +-- .../allure/FailedStepScreenshotInterceptor.kt | 23 ++++++++++++++ gradle/dependencies.toml | 6 ++-- 5 files changed, 46 insertions(+), 18 deletions(-) create mode 100644 app/src/androidTest/kotlin/com/tangem/common/allure/FailedStepScreenshotInterceptor.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c17cd6b366..91ee07995e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -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) diff --git a/app/src/androidTest/kotlin/com/tangem/common/BaseTestCase.kt b/app/src/androidTest/kotlin/com/tangem/common/BaseTestCase.kt index b5c7601cde..48696ff92e 100644 --- a/app/src/androidTest/kotlin/com/tangem/common/BaseTestCase.kt +++ b/app/src/androidTest/kotlin/com/tangem/common/BaseTestCase.kt @@ -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 - } - } \ No newline at end of file diff --git a/app/src/androidTest/kotlin/com/tangem/common/HiltTestRunner.kt b/app/src/androidTest/kotlin/com/tangem/common/HiltTestRunner.kt index 3f5c02d5a5..ece09d8ca2 100644 --- a/app/src/androidTest/kotlin/com/tangem/common/HiltTestRunner.kt +++ b/app/src/androidTest/kotlin/com/tangem/common/HiltTestRunner.kt @@ -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?, diff --git a/app/src/androidTest/kotlin/com/tangem/common/allure/FailedStepScreenshotInterceptor.kt b/app/src/androidTest/kotlin/com/tangem/common/allure/FailedStepScreenshotInterceptor.kt new file mode 100644 index 0000000000..6a4672170f --- /dev/null +++ b/app/src/androidTest/kotlin/com/tangem/common/allure/FailedStepScreenshotInterceptor.kt @@ -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}" +} \ No newline at end of file diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 92b3c84211..36ba0d9d05 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -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" }