From 52cc9a8969bdaa058ae9ccadbaaa72abf223f2f5 Mon Sep 17 00:00:00 2001 From: Kaung Khant Soe Date: Mon, 10 Mar 2025 22:44:07 +0700 Subject: [PATCH 1/2] [#606] Fix wrong imports and androidTest fail --- sample-compose/app/build.gradle.kts | 17 +++++++++++++---- .../co/nimblehq/sample/compose/test/MockUtil.kt | 2 +- .../ui/screens/main/home/HomeScreenTest.kt | 6 +++--- sample-compose/gradle/libs.versions.toml | 14 ++++++++++---- 4 files changed, 27 insertions(+), 12 deletions(-) diff --git a/sample-compose/app/build.gradle.kts b/sample-compose/app/build.gradle.kts index f0881a37b..031b50943 100644 --- a/sample-compose/app/build.gradle.kts +++ b/sample-compose/app/build.gradle.kts @@ -84,11 +84,14 @@ android { buildConfig = true } - packagingOptions { + packaging { jniLibs { // Resolve "libmockkjvmtiagent.so" https://github.com/mockk/mockk/issues/297#issuecomment-901924678 useLegacyPackaging = true } + resources { + merges += listOf("/META-INF/LICENSE.md", "/META-INF/LICENSE-notice.md") + } } lint { @@ -143,15 +146,21 @@ dependencies { // UI test with Robolectric testImplementation(platform(libs.compose.bom)) - testImplementation(libs.test.compose.ui) + testImplementation(libs.test.compose.ui.junit4) testImplementation(libs.test.rules) testImplementation(libs.test.robolectric) // UI test androidTestImplementation(platform(libs.compose.bom)) - androidTestImplementation(libs.test.compose.ui) + androidTestImplementation(libs.test.compose.ui.junit4) androidTestImplementation(libs.test.rules) - androidTestImplementation(libs.test.mockk) + androidTestImplementation(libs.test.mockk.android) + + // Unable to resolve activity for Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] + // cmp=co.nimblehq.sample.compose/androidx.activity.ComponentActivity } -- + // see https://github.com/robolectric/robolectric/pull/4736 for details + // Ref: https://developer.android.com/develop/ui/compose/testing#setup + debugImplementation(libs.test.compose.ui.manifest) } /* diff --git a/sample-compose/app/src/androidTest/java/co/nimblehq/sample/compose/test/MockUtil.kt b/sample-compose/app/src/androidTest/java/co/nimblehq/sample/compose/test/MockUtil.kt index d79a92a4c..7a2022a2c 100644 --- a/sample-compose/app/src/androidTest/java/co/nimblehq/sample/compose/test/MockUtil.kt +++ b/sample-compose/app/src/androidTest/java/co/nimblehq/sample/compose/test/MockUtil.kt @@ -1,6 +1,6 @@ package co.nimblehq.sample.compose.test -import co.nimblehq.sample.compose.domain.model.Model +import co.nimblehq.sample.compose.domain.models.Model object MockUtil { diff --git a/sample-compose/app/src/androidTest/java/co/nimblehq/sample/compose/ui/screens/main/home/HomeScreenTest.kt b/sample-compose/app/src/androidTest/java/co/nimblehq/sample/compose/ui/screens/main/home/HomeScreenTest.kt index c5358e41a..b090086e8 100644 --- a/sample-compose/app/src/androidTest/java/co/nimblehq/sample/compose/ui/screens/main/home/HomeScreenTest.kt +++ b/sample-compose/app/src/androidTest/java/co/nimblehq/sample/compose/ui/screens/main/home/HomeScreenTest.kt @@ -8,9 +8,9 @@ import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.rule.GrantPermissionRule -import co.nimblehq.sample.compose.domain.usecase.GetModelsUseCase -import co.nimblehq.sample.compose.domain.usecase.IsFirstTimeLaunchPreferencesUseCase -import co.nimblehq.sample.compose.domain.usecase.UpdateFirstTimeLaunchPreferencesUseCase +import co.nimblehq.sample.compose.domain.usecases.GetModelsUseCase +import co.nimblehq.sample.compose.domain.usecases.IsFirstTimeLaunchPreferencesUseCase +import co.nimblehq.sample.compose.domain.usecases.UpdateFirstTimeLaunchPreferencesUseCase import co.nimblehq.sample.compose.test.MockUtil import co.nimblehq.sample.compose.test.TestDispatchersProvider import co.nimblehq.sample.compose.ui.base.BaseDestination diff --git a/sample-compose/gradle/libs.versions.toml b/sample-compose/gradle/libs.versions.toml index 3f34b5425..65bf5d243 100644 --- a/sample-compose/gradle/libs.versions.toml +++ b/sample-compose/gradle/libs.versions.toml @@ -24,7 +24,7 @@ kotlinxCoroutines = "1.7.3" kover = "0.7.3" ksp = "2.1.0-1.0.29" lifecycle = "2.8.7" -mockk = "1.13.5" +mockk = "1.13.8" moshi = "1.15.1" nimbleCommon = "0.1.2" okhttp = "4.12.0" @@ -32,7 +32,7 @@ retrofit = "2.11.0" robolectric = "4.13" security = "1.0.0" testCore = "1.6.1" -testRules = "1.6.1" +testRules = "1.7.0-alpha01" timber = "5.0.1" turbine = "0.13.0" @@ -87,12 +87,18 @@ test-core-ktx = { group = "androidx.test", name = "core-ktx", version.ref = "tes test-junit = { group = "junit", name = "junit", version.ref = "junit" } test-kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "kotlinxCoroutines" } test-kotest-assertions-core = { group = "io.kotest", name = "kotest-assertions-core", version.ref = "kotest" } +# For Unit Test test-mockk = { group = "io.mockk", name = "mockk", version.ref = "mockk" } test-turbine = { group = "app.cash.turbine", name = "turbine", version.ref = "turbine" } -test-compose-ui = { group = "androidx.compose.ui", name = "ui-test-junit4" } +test-compose-ui-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } test-robolectric = { group = "org.robolectric", name = "robolectric", version.ref = "robolectric" } test-rules = { group = "androidx.test", name = "rules", version.ref = "testRules" } +# For UI Test +# Ref: https://github.com/mockk/mockk/issues/325#issuecomment-549027350 +test-mockk-android = { group = "io.mockk", name = "mockk-android", version.ref = "mockk" } +test-compose-ui-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } + [bundles] androidx = [ "androidx-core", @@ -129,7 +135,7 @@ unitTest = [ "test-mockk", ] uiTest = [ - "test-compose-ui", + "test-compose-ui-junit4", "test-robolectric", ] From 55e73e615f613153596179f3fac08fa7a89d2c10 Mon Sep 17 00:00:00 2001 From: Kaung Khant Soe Date: Mon, 10 Mar 2025 22:47:53 +0700 Subject: [PATCH 2/2] [#606] Remove redundant imports --- .../sample/compose/ui/screens/main/home/HomeScreenTest.kt | 1 - .../usecases/IsFirstTimeLaunchPreferencesUseCaseTest.kt | 3 --- .../usecases/UpdateFirstTimeLaunchPreferencesUseCaseTest.kt | 4 ---- 3 files changed, 8 deletions(-) diff --git a/sample-compose/app/src/test/java/co/nimblehq/sample/compose/ui/screens/main/home/HomeScreenTest.kt b/sample-compose/app/src/test/java/co/nimblehq/sample/compose/ui/screens/main/home/HomeScreenTest.kt index 4ca17b626..3a1b9569a 100644 --- a/sample-compose/app/src/test/java/co/nimblehq/sample/compose/ui/screens/main/home/HomeScreenTest.kt +++ b/sample-compose/app/src/test/java/co/nimblehq/sample/compose/ui/screens/main/home/HomeScreenTest.kt @@ -18,7 +18,6 @@ import io.kotest.matchers.shouldBe import io.mockk.* import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOf -import kotlinx.coroutines.test.* import org.junit.* import org.junit.Assert.assertEquals import org.junit.runner.RunWith diff --git a/sample-compose/domain/src/test/java/co/nimblehq/sample/compose/domain/usecases/IsFirstTimeLaunchPreferencesUseCaseTest.kt b/sample-compose/domain/src/test/java/co/nimblehq/sample/compose/domain/usecases/IsFirstTimeLaunchPreferencesUseCaseTest.kt index 7a9d4f2e8..7a07ea5ac 100644 --- a/sample-compose/domain/src/test/java/co/nimblehq/sample/compose/domain/usecases/IsFirstTimeLaunchPreferencesUseCaseTest.kt +++ b/sample-compose/domain/src/test/java/co/nimblehq/sample/compose/domain/usecases/IsFirstTimeLaunchPreferencesUseCaseTest.kt @@ -4,15 +4,12 @@ import co.nimblehq.sample.compose.domain.repositories.AppPreferencesRepository import io.kotest.matchers.shouldBe import io.mockk.every import io.mockk.mockk -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.* import kotlinx.coroutines.test.runTest -import org.junit.Assert.* import org.junit.Before import org.junit.Test -@OptIn(ExperimentalCoroutinesApi::class) class IsFirstTimeLaunchPreferencesUseCaseTest { private lateinit var mockAppPreferencesRepository: AppPreferencesRepository diff --git a/sample-compose/domain/src/test/java/co/nimblehq/sample/compose/domain/usecases/UpdateFirstTimeLaunchPreferencesUseCaseTest.kt b/sample-compose/domain/src/test/java/co/nimblehq/sample/compose/domain/usecases/UpdateFirstTimeLaunchPreferencesUseCaseTest.kt index 4514b5f15..d21298a9c 100644 --- a/sample-compose/domain/src/test/java/co/nimblehq/sample/compose/domain/usecases/UpdateFirstTimeLaunchPreferencesUseCaseTest.kt +++ b/sample-compose/domain/src/test/java/co/nimblehq/sample/compose/domain/usecases/UpdateFirstTimeLaunchPreferencesUseCaseTest.kt @@ -2,14 +2,10 @@ package co.nimblehq.sample.compose.domain.usecases import co.nimblehq.sample.compose.domain.repositories.AppPreferencesRepository import io.mockk.* -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.* import kotlinx.coroutines.test.runTest -import org.junit.Assert.* import org.junit.Before import org.junit.Test -@OptIn(ExperimentalCoroutinesApi::class) class UpdateFirstTimeLaunchPreferencesUseCaseTest { private lateinit var mockAppPreferencesRepository: AppPreferencesRepository