From d07902f1c0fea9497ae03b4aabef5647ab98fdd8 Mon Sep 17 00:00:00 2001 From: lihenggui Date: Fri, 11 Oct 2024 16:47:47 -0700 Subject: [PATCH] Migrate data-test to kmp module --- core/data-test/build.gradle.kts | 14 +++-- .../data/test/AlwaysOnlineNetworkMonitor.kt | 3 +- .../data/test/DefaultZoneIdTimeZoneMonitor.kt | 3 +- .../core/data/test/TestDataModule.kt | 55 ++++--------------- .../test/repository/FakeNewsRepository.kt | 7 +-- .../repository/FakeRecentSearchRepository.kt | 3 +- .../FakeSearchContentsRepository.kt | 3 +- .../test/repository/FakeTopicsRepository.kt | 7 +-- .../test/repository/FakeUserDataRepository.kt | 3 +- core/data-test/src/main/AndroidManifest.xml | 17 ------ 10 files changed, 28 insertions(+), 87 deletions(-) rename core/data-test/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/data/test/AlwaysOnlineNetworkMonitor.kt (89%) rename core/data-test/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/data/test/DefaultZoneIdTimeZoneMonitor.kt (90%) rename core/data-test/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/data/test/TestDataModule.kt (59%) rename core/data-test/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeNewsRepository.kt (91%) rename core/data-test/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeRecentSearchRepository.kt (91%) rename core/data-test/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeSearchContentsRepository.kt (90%) rename core/data-test/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeTopicsRepository.kt (88%) rename core/data-test/src/{main => commonMain}/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt (97%) delete mode 100644 core/data-test/src/main/AndroidManifest.xml diff --git a/core/data-test/build.gradle.kts b/core/data-test/build.gradle.kts index 420c34a57..041ec603c 100644 --- a/core/data-test/build.gradle.kts +++ b/core/data-test/build.gradle.kts @@ -14,16 +14,18 @@ * limitations under the License. */ plugins { - alias(libs.plugins.nowinandroid.android.library) - alias(libs.plugins.nowinandroid.hilt) + alias(libs.plugins.nowinandroid.kmp.library) + alias(libs.plugins.nowinandroid.di.koin) } android { namespace = "com.google.samples.apps.nowinandroid.core.data.test" } -dependencies { - api(projects.core.data) - - implementation(libs.hilt.android.testing) +kotlin { + sourceSets { + commonMain.dependencies { + api(projects.core.data) + } + } } diff --git a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/AlwaysOnlineNetworkMonitor.kt b/core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/AlwaysOnlineNetworkMonitor.kt similarity index 89% rename from core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/AlwaysOnlineNetworkMonitor.kt rename to core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/AlwaysOnlineNetworkMonitor.kt index c00c99ded..f3a144aa1 100644 --- a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/AlwaysOnlineNetworkMonitor.kt +++ b/core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/AlwaysOnlineNetworkMonitor.kt @@ -19,8 +19,7 @@ package com.google.samples.apps.nowinandroid.core.data.test import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf -import javax.inject.Inject -class AlwaysOnlineNetworkMonitor @Inject constructor() : NetworkMonitor { +class AlwaysOnlineNetworkMonitor : NetworkMonitor { override val isOnline: Flow = flowOf(true) } diff --git a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/DefaultZoneIdTimeZoneMonitor.kt b/core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/DefaultZoneIdTimeZoneMonitor.kt similarity index 90% rename from core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/DefaultZoneIdTimeZoneMonitor.kt rename to core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/DefaultZoneIdTimeZoneMonitor.kt index 5a21ae337..934c8b3b3 100644 --- a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/DefaultZoneIdTimeZoneMonitor.kt +++ b/core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/DefaultZoneIdTimeZoneMonitor.kt @@ -20,8 +20,7 @@ import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf import kotlinx.datetime.TimeZone -import javax.inject.Inject -class DefaultZoneIdTimeZoneMonitor @Inject constructor() : TimeZoneMonitor { +class DefaultZoneIdTimeZoneMonitor : TimeZoneMonitor { override val currentTimeZone: Flow = flowOf(TimeZone.of("Europe/Warsaw")) } diff --git a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/TestDataModule.kt b/core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/TestDataModule.kt similarity index 59% rename from core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/TestDataModule.kt rename to core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/TestDataModule.kt index 46158479c..fa1fab6c8 100644 --- a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/TestDataModule.kt +++ b/core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/TestDataModule.kt @@ -16,7 +16,6 @@ package com.google.samples.apps.nowinandroid.core.data.test -import com.google.samples.apps.nowinandroid.core.data.di.DataModule import com.google.samples.apps.nowinandroid.core.data.repository.NewsRepository import com.google.samples.apps.nowinandroid.core.data.repository.RecentSearchRepository import com.google.samples.apps.nowinandroid.core.data.repository.SearchContentsRepository @@ -29,47 +28,15 @@ import com.google.samples.apps.nowinandroid.core.data.test.repository.FakeTopics import com.google.samples.apps.nowinandroid.core.data.test.repository.FakeUserDataRepository import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor -import dagger.Binds -import dagger.Module -import dagger.hilt.components.SingletonComponent -import dagger.hilt.testing.TestInstallIn - -@Module -@TestInstallIn( - components = [SingletonComponent::class], - replaces = [DataModule::class], -) -internal interface TestDataModule { - @Binds - fun bindsTopicRepository( - fakeTopicsRepository: FakeTopicsRepository, - ): TopicsRepository - - @Binds - fun bindsNewsResourceRepository( - fakeNewsRepository: FakeNewsRepository, - ): NewsRepository - - @Binds - fun bindsUserDataRepository( - userDataRepository: FakeUserDataRepository, - ): UserDataRepository - - @Binds - fun bindsRecentSearchRepository( - recentSearchRepository: FakeRecentSearchRepository, - ): RecentSearchRepository - - @Binds - fun bindsSearchContentsRepository( - searchContentsRepository: FakeSearchContentsRepository, - ): SearchContentsRepository - - @Binds - fun bindsNetworkMonitor( - networkMonitor: AlwaysOnlineNetworkMonitor, - ): NetworkMonitor - - @Binds - fun binds(impl: DefaultZoneIdTimeZoneMonitor): TimeZoneMonitor +import org.koin.core.qualifier.named +import org.koin.dsl.module + +val testDataModule = module { + single { FakeTopicsRepository(get(named("IoDispatcher")), get()) } + single { FakeNewsRepository(get(named("IoDispatcher")), get()) } + single { FakeUserDataRepository(get()) } + single { FakeRecentSearchRepository() } + single { FakeSearchContentsRepository() } + single { AlwaysOnlineNetworkMonitor() } + single { DefaultZoneIdTimeZoneMonitor() } } diff --git a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeNewsRepository.kt b/core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeNewsRepository.kt similarity index 91% rename from core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeNewsRepository.kt rename to core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeNewsRepository.kt index 0cdec6090..e4a2ea6b9 100644 --- a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeNewsRepository.kt +++ b/core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeNewsRepository.kt @@ -23,15 +23,12 @@ import com.google.samples.apps.nowinandroid.core.data.repository.NewsResourceQue import com.google.samples.apps.nowinandroid.core.database.model.NewsResourceEntity import com.google.samples.apps.nowinandroid.core.database.model.asExternalModel import com.google.samples.apps.nowinandroid.core.model.data.NewsResource -import com.google.samples.apps.nowinandroid.core.network.Dispatcher -import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO import com.google.samples.apps.nowinandroid.core.network.demo.DemoNiaNetworkDataSource import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn -import javax.inject.Inject /** * Fake implementation of the [NewsRepository] that retrieves the news resources from a JSON String. @@ -39,8 +36,8 @@ import javax.inject.Inject * This allows us to run the app with fake data, without needing an internet connection or working * backend. */ -class FakeNewsRepository @Inject constructor( - @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, +class FakeNewsRepository( + private val ioDispatcher: CoroutineDispatcher, private val datasource: DemoNiaNetworkDataSource, ) : NewsRepository { diff --git a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeRecentSearchRepository.kt b/core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeRecentSearchRepository.kt similarity index 91% rename from core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeRecentSearchRepository.kt rename to core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeRecentSearchRepository.kt index b8d949efe..a114960d7 100644 --- a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeRecentSearchRepository.kt +++ b/core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeRecentSearchRepository.kt @@ -20,12 +20,11 @@ import com.google.samples.apps.nowinandroid.core.data.model.RecentSearchQuery import com.google.samples.apps.nowinandroid.core.data.repository.RecentSearchRepository import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf -import javax.inject.Inject /** * Fake implementation of the [RecentSearchRepository] */ -internal class FakeRecentSearchRepository @Inject constructor() : RecentSearchRepository { +internal class FakeRecentSearchRepository : RecentSearchRepository { override suspend fun insertOrReplaceRecentSearch(searchQuery: String) = Unit override fun getRecentSearchQueries(limit: Int): Flow> = diff --git a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeSearchContentsRepository.kt b/core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeSearchContentsRepository.kt similarity index 90% rename from core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeSearchContentsRepository.kt rename to core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeSearchContentsRepository.kt index 1feeb6dcc..c415fb2ba 100644 --- a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeSearchContentsRepository.kt +++ b/core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeSearchContentsRepository.kt @@ -20,12 +20,11 @@ import com.google.samples.apps.nowinandroid.core.data.repository.SearchContentsR import com.google.samples.apps.nowinandroid.core.model.data.SearchResult import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf -import javax.inject.Inject /** * Fake implementation of the [SearchContentsRepository] */ -internal class FakeSearchContentsRepository @Inject constructor() : SearchContentsRepository { +internal class FakeSearchContentsRepository : SearchContentsRepository { override suspend fun populateFtsData() = Unit override fun searchContents(searchQuery: String): Flow = flowOf() diff --git a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeTopicsRepository.kt b/core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeTopicsRepository.kt similarity index 88% rename from core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeTopicsRepository.kt rename to core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeTopicsRepository.kt index 0b81dd309..d379a002b 100644 --- a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeTopicsRepository.kt +++ b/core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeTopicsRepository.kt @@ -19,15 +19,12 @@ package com.google.samples.apps.nowinandroid.core.data.test.repository import com.google.samples.apps.nowinandroid.core.data.Synchronizer import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository import com.google.samples.apps.nowinandroid.core.model.data.Topic -import com.google.samples.apps.nowinandroid.core.network.Dispatcher -import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO import com.google.samples.apps.nowinandroid.core.network.demo.DemoNiaNetworkDataSource import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map -import javax.inject.Inject /** * Fake implementation of the [TopicsRepository] that retrieves the topics from a JSON String, and @@ -36,8 +33,8 @@ import javax.inject.Inject * This allows us to run the app with fake data, without needing an internet connection or working * backend. */ -internal class FakeTopicsRepository @Inject constructor( - @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, +internal class FakeTopicsRepository( + private val ioDispatcher: CoroutineDispatcher, private val datasource: DemoNiaNetworkDataSource, ) : TopicsRepository { override fun getTopics(): Flow> = flow { diff --git a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt b/core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt similarity index 97% rename from core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt rename to core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt index 61ab422af..0c0bf59e8 100644 --- a/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt +++ b/core/data-test/src/commonMain/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt @@ -22,7 +22,6 @@ import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand import com.google.samples.apps.nowinandroid.core.model.data.UserData import kotlinx.coroutines.flow.Flow -import javax.inject.Inject /** * Fake implementation of the [UserDataRepository] that returns hardcoded user data. @@ -30,7 +29,7 @@ import javax.inject.Inject * This allows us to run the app with fake data, without needing an internet connection or working * backend. */ -class FakeUserDataRepository @Inject constructor( +class FakeUserDataRepository( private val niaPreferencesDataSource: NiaPreferencesDataSource, ) : UserDataRepository { diff --git a/core/data-test/src/main/AndroidManifest.xml b/core/data-test/src/main/AndroidManifest.xml deleted file mode 100644 index 27a3ea8b0..000000000 --- a/core/data-test/src/main/AndroidManifest.xml +++ /dev/null @@ -1,17 +0,0 @@ - - -