From 24388192e12a8143a1e5d5e00505c910981a5e73 Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Tue, 6 Dec 2022 20:16:48 +0100 Subject: [PATCH] Add first Kaspresso test --- app/build.gradle.kts | 10 ++++++ app/src/androidTest/AndroidManifest.xml | 4 +++ .../gq/kirmanak/mealient/FirstSetUpTest.kt | 32 +++++++++++++++++++ .../kirmanak/mealient/MealientTestRunner.kt | 15 +++++++++ .../mealient/screen/DisclaimerScreen.kt | 13 ++++++++ gradle/libs.versions.toml | 10 ++++++ 6 files changed, 84 insertions(+) create mode 100644 app/src/androidTest/AndroidManifest.xml create mode 100644 app/src/androidTest/kotlin/gq/kirmanak/mealient/FirstSetUpTest.kt create mode 100644 app/src/androidTest/kotlin/gq/kirmanak/mealient/MealientTestRunner.kt create mode 100644 app/src/androidTest/kotlin/gq/kirmanak/mealient/screen/DisclaimerScreen.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0ac419b..ea97c39 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -17,6 +17,7 @@ android { applicationId = "gq.kirmanak.mealient" versionCode = 25 versionName = "0.3.10" + testInstrumentationRunner = "gq.kirmanak.mealient.MealientTestRunner" } signingConfigs { @@ -89,6 +90,8 @@ dependencies { kapt(libs.google.dagger.hiltCompiler) kaptTest(libs.google.dagger.hiltAndroidCompiler) testImplementation(libs.google.dagger.hiltAndroidTesting) + kaptAndroidTest(libs.google.dagger.hiltAndroidCompiler) + androidTestImplementation(libs.google.dagger.hiltAndroidTesting) implementation(libs.androidx.paging.runtimeKtx) testImplementation(libs.androidx.paging.commonKtx) @@ -122,4 +125,11 @@ dependencies { testImplementation(libs.io.mockk) debugImplementation(libs.squareup.leakcanary) + + androidTestImplementation(libs.junit) + androidTestImplementation(libs.androidx.test.junit) + androidTestImplementation(libs.kaspersky.kaspresso) + androidTestImplementation(libs.androidx.test.core) + androidTestImplementation(libs.androidx.test.rules) + androidTestImplementation(libs.androidx.test.runner) } \ No newline at end of file diff --git a/app/src/androidTest/AndroidManifest.xml b/app/src/androidTest/AndroidManifest.xml new file mode 100644 index 0000000..cfb2be6 --- /dev/null +++ b/app/src/androidTest/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/androidTest/kotlin/gq/kirmanak/mealient/FirstSetUpTest.kt b/app/src/androidTest/kotlin/gq/kirmanak/mealient/FirstSetUpTest.kt new file mode 100644 index 0000000..85581fe --- /dev/null +++ b/app/src/androidTest/kotlin/gq/kirmanak/mealient/FirstSetUpTest.kt @@ -0,0 +1,32 @@ +package gq.kirmanak.mealient + +import androidx.test.ext.junit.rules.activityScenarioRule +import com.kaspersky.kaspresso.testcases.api.testcase.TestCase +import dagger.hilt.android.testing.HiltAndroidRule +import dagger.hilt.android.testing.HiltAndroidTest +import gq.kirmanak.mealient.screen.DisclaimerScreen +import gq.kirmanak.mealient.ui.activity.MainActivity +import org.junit.Rule +import org.junit.Test + +@HiltAndroidTest +class FirstSetUpTest : TestCase() { + + @get:Rule(order = 0) + var hiltRule = HiltAndroidRule(this) + + @get:Rule(order = 1) + val mainActivityRule = activityScenarioRule() + + @Test + fun test() = run { + step("Ensure button is disabled") { + DisclaimerScreen { + okayButton { + isVisible() + isDisabled() + } + } + } + } +} \ No newline at end of file diff --git a/app/src/androidTest/kotlin/gq/kirmanak/mealient/MealientTestRunner.kt b/app/src/androidTest/kotlin/gq/kirmanak/mealient/MealientTestRunner.kt new file mode 100644 index 0000000..4352422 --- /dev/null +++ b/app/src/androidTest/kotlin/gq/kirmanak/mealient/MealientTestRunner.kt @@ -0,0 +1,15 @@ +package gq.kirmanak.mealient + +import android.app.Application +import android.content.Context +import androidx.test.runner.AndroidJUnitRunner +import dagger.hilt.android.testing.HiltTestApplication + +class MealientTestRunner : AndroidJUnitRunner() { + + override fun newApplication( + cl: ClassLoader?, + className: String?, + context: Context?, + ): Application = super.newApplication(cl, HiltTestApplication::class.java.name, context) +} \ No newline at end of file diff --git a/app/src/androidTest/kotlin/gq/kirmanak/mealient/screen/DisclaimerScreen.kt b/app/src/androidTest/kotlin/gq/kirmanak/mealient/screen/DisclaimerScreen.kt new file mode 100644 index 0000000..d06ab45 --- /dev/null +++ b/app/src/androidTest/kotlin/gq/kirmanak/mealient/screen/DisclaimerScreen.kt @@ -0,0 +1,13 @@ +package gq.kirmanak.mealient.screen + +import com.kaspersky.kaspresso.screens.KScreen +import gq.kirmanak.mealient.R +import gq.kirmanak.mealient.ui.activity.MainActivity +import io.github.kakaocup.kakao.text.KButton + +object DisclaimerScreen : KScreen() { + override val layoutId = R.layout.fragment_disclaimer + override val viewClass = MainActivity::class.java + + val okayButton = KButton { withId(R.id.okay) } +} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f6f528f..b7bee3d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -77,6 +77,10 @@ desugar = "1.2.2" kspPlugin = "1.7.20-1.0.7" # https://developer.android.com/jetpack/androidx/releases/sharetarget shareTarget = "1.2.0" +# https://github.com/KasperskyLab/Kaspresso/releases +kaspresso = "1.4.2" +# https://developer.android.com/jetpack/androidx/releases/test +androidXTest = "1.5.0" [libraries] android-gradlePlugin = { group = "com.android.tools.build", name = "gradle", version.ref = "androidGradlePlugin" } @@ -133,6 +137,10 @@ androidx-room-testing = { group = "androidx.room", name = "room-testing", versio androidx-test-junit = { group = "androidx.test.ext", name = "junit-ktx", version.ref = "junitKtx" } androidx-security-crypto = { group = "androidx.security", name = "security-crypto", version.ref = "security" } +androidx-test-core = { group = "androidx.test", name = "core", version.ref = "androidXTest" } +androidx-test-rules = { group = "androidx.test", name = "rules", version.ref = "androidXTest" } +androidx-test-runner = { group = "androidx.test", name = "runner", version.ref = "androidXTest" } + jakewharton-retrofitSerialization = { group = "com.jakewharton.retrofit", name = "retrofit2-kotlinx-serialization-converter", version.ref = "retrofitKotlinxSerialization" } squareup-retrofit = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" } @@ -158,6 +166,8 @@ io-mockk = { group = "io.mockk", name = "mockk", version.ref = "mockk" } chuckerteam-chucker = { group = "com.github.chuckerteam.chucker", name = "library", version.ref = "chucker" } +kaspersky-kaspresso = { group = "com.kaspersky.android-components", name = "kaspresso", version.ref = "kaspresso" } + [plugins] sonarqube = { id = "org.sonarqube", version.ref = "sonarqube" } rootcoverage = { id = "nl.neotech.plugin.rootcoverage", version.ref = "rootCoverage" }