diff --git a/app/build.gradle b/app/build.gradle index 930ffc4f9..e02f742d7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -92,8 +92,8 @@ dependencies { implementation 'com.hannesdorfmann:adapterdelegates4-kotlin-dsl:4.3.0' implementation 'com.hannesdorfmann:adapterdelegates4-kotlin-dsl-viewbinding:4.3.0' - implementation 'org.koin:koin-android:2.2.2' - implementation 'org.koin:koin-androidx-viewmodel:2.2.2' + implementation 'io.insert-koin:koin-android:3.0.1-beta-2' + implementation 'io.insert-koin:koin-android-ext:3.0.1-beta-2' implementation 'io.coil-kt:coil-base:1.1.1' implementation 'com.davemorrissey.labs:subsampling-scale-image-view-androidx:3.10.0' implementation 'com.tomclaw.cache:cache:1.0' @@ -102,5 +102,5 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation 'org.json:json:20201115' - testImplementation 'org.koin:koin-test:2.2.2' + testImplementation 'io.insert-koin:koin-test-junit4:3.0.1-beta-2' } \ No newline at end of file diff --git a/app/src/test/java/org/koitharu/kotatsu/parsers/RemoteRepositoryTest.kt b/app/src/test/java/org/koitharu/kotatsu/parsers/RemoteRepositoryTest.kt index 4f6033b5a..8f5020ddd 100644 --- a/app/src/test/java/org/koitharu/kotatsu/parsers/RemoteRepositoryTest.kt +++ b/app/src/test/java/org/koitharu/kotatsu/parsers/RemoteRepositoryTest.kt @@ -1,35 +1,32 @@ package org.koitharu.kotatsu.parsers import kotlinx.coroutines.runBlocking -import okhttp3.CookieJar -import okhttp3.OkHttpClient import org.junit.Assert -import org.junit.BeforeClass +import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.Parameterized -import org.koin.core.context.startKoin -import org.koin.dsl.module +import org.koin.core.component.inject +import org.koin.core.parameter.parametersOf import org.koin.test.KoinTest -import org.koin.test.get -import org.koitharu.kotatsu.base.domain.MangaLoaderContext +import org.koin.test.KoinTestRule import org.koitharu.kotatsu.core.model.MangaSource -import org.koitharu.kotatsu.core.network.UserAgentInterceptor import org.koitharu.kotatsu.core.parser.RemoteMangaRepository -import org.koitharu.kotatsu.core.prefs.SourceSettings import org.koitharu.kotatsu.utils.AssertX import org.koitharu.kotatsu.utils.ext.isDistinctBy -import java.util.concurrent.TimeUnit @RunWith(Parameterized::class) class RemoteRepositoryTest(source: MangaSource) : KoinTest { - private val repo = try { - source.cls.getDeclaredConstructor(MangaLoaderContext::class.java) - .newInstance(get()) - } catch (e: NoSuchMethodException) { - source.cls.newInstance() - } as RemoteMangaRepository + private val repo by inject { + parametersOf(source) + } + + @get:Rule + val koinTestRule = KoinTestRule.create { + printLogger() + modules(repositoryTestModule) + } @Test fun list() { @@ -71,8 +68,8 @@ class RemoteRepositoryTest(source: MangaSource) : KoinTest { val tags = runBlocking { repo.getTags() } Assert.assertFalse("No tags found", tags.isEmpty()) val tag = tags.random() - Assert.assertFalse("Tag title is blank for ${tag}", tag.key.isBlank()) - Assert.assertFalse("Tag title is blank for ${tag}", tag.title.isBlank()) + Assert.assertFalse("Tag title is blank for $tag", tag.key.isBlank()) + Assert.assertFalse("Tag title is blank for $tag", tag.title.isBlank()) val list = runBlocking { repo.getList(0, tag = tag) } Assert.assertFalse("List is empty", list.isEmpty()) val item = list.random() @@ -128,34 +125,6 @@ class RemoteRepositoryTest(source: MangaSource) : KoinTest { companion object { - @JvmStatic - @BeforeClass - fun initialize() { - startKoin { - modules( - module { - single { TemporaryCookieJar() } - factory { - OkHttpClient.Builder() - .cookieJar(get()) - .addInterceptor(UserAgentInterceptor()) - .connectTimeout(20, TimeUnit.SECONDS) - .readTimeout(60, TimeUnit.SECONDS) - .writeTimeout(20, TimeUnit.SECONDS) - .build() - } - single { - object : MangaLoaderContext(get(), get()) { - override fun getSettings(source: MangaSource): SourceSettings { - return SourceSettingsMock() - } - } - } - } - ) - } - } - @JvmStatic @Parameterized.Parameters(name = "{0}") fun getProviders() = (MangaSource.values().toList() - MangaSource.LOCAL).toTypedArray() diff --git a/app/src/test/java/org/koitharu/kotatsu/parsers/RepositoryTestModule.kt b/app/src/test/java/org/koitharu/kotatsu/parsers/RepositoryTestModule.kt new file mode 100644 index 000000000..bb31ee2bc --- /dev/null +++ b/app/src/test/java/org/koitharu/kotatsu/parsers/RepositoryTestModule.kt @@ -0,0 +1,40 @@ +package org.koitharu.kotatsu.parsers + +import okhttp3.CookieJar +import okhttp3.OkHttpClient +import org.koin.dsl.module +import org.koitharu.kotatsu.base.domain.MangaLoaderContext +import org.koitharu.kotatsu.core.model.MangaSource +import org.koitharu.kotatsu.core.network.UserAgentInterceptor +import org.koitharu.kotatsu.core.parser.RemoteMangaRepository +import org.koitharu.kotatsu.core.prefs.SourceSettings +import java.util.concurrent.TimeUnit + +val repositoryTestModule + get() = module { + single { TemporaryCookieJar() } + factory { + OkHttpClient.Builder() + .cookieJar(get()) + .addInterceptor(UserAgentInterceptor()) + .connectTimeout(20, TimeUnit.SECONDS) + .readTimeout(60, TimeUnit.SECONDS) + .writeTimeout(20, TimeUnit.SECONDS) + .build() + } + single { + object : MangaLoaderContext(get(), get()) { + override fun getSettings(source: MangaSource): SourceSettings { + return SourceSettingsMock() + } + } + } + factory { (source: MangaSource) -> + runCatching { + source.cls.getDeclaredConstructor(MangaLoaderContext::class.java) + .newInstance(get()) + }.recoverCatching { + source.cls.newInstance() + }.getOrThrow() as RemoteMangaRepository + } + } \ No newline at end of file