diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 520610f..91272f5 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -142,6 +142,9 @@ dependencies { kspTest(libs.androidx.hilt.compiler) kspTest(libs.google.dagger.hilt.androidCompiler) + androidTestImplementation(testFixtures(project("::movies:movies-domain"))) + androidTestImplementation(testFixtures(project("::tv:tv-domain"))) + androidTestImplementation(testFixtures(project("::shared"))) androidTestImplementation(libs.androidx.test.coreKtx) androidTestImplementation(libs.androidx.test.ext.jUnit) androidTestImplementation(libs.androidx.test.runner) diff --git a/app/src/androidTest/java/com/zsoltbertalan/flickslate/FakeGenreRepository.kt b/app/src/androidTest/java/com/zsoltbertalan/flickslate/FakeGenreRepository.kt index 16287ab..459cd7e 100644 --- a/app/src/androidTest/java/com/zsoltbertalan/flickslate/FakeGenreRepository.kt +++ b/app/src/androidTest/java/com/zsoltbertalan/flickslate/FakeGenreRepository.kt @@ -8,7 +8,7 @@ import com.zsoltbertalan.flickslate.search.domain.api.model.GenreMoviesPagingRep import com.zsoltbertalan.flickslate.shared.model.Failure import com.zsoltbertalan.flickslate.shared.model.GenresReply import com.zsoltbertalan.flickslate.shared.util.Outcome -import com.zsoltbertalan.flickslate.testhelper.GenreMother +import com.zsoltbertalan.flickslate.shared.model.GenreMother import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf diff --git a/app/src/androidTest/java/com/zsoltbertalan/flickslate/FakeMoviesRepository.kt b/app/src/androidTest/java/com/zsoltbertalan/flickslate/FakeMoviesRepository.kt index 022cfa6..01905ad 100644 --- a/app/src/androidTest/java/com/zsoltbertalan/flickslate/FakeMoviesRepository.kt +++ b/app/src/androidTest/java/com/zsoltbertalan/flickslate/FakeMoviesRepository.kt @@ -8,7 +8,7 @@ import com.zsoltbertalan.flickslate.shared.model.Movie import com.zsoltbertalan.flickslate.shared.model.PageData import com.zsoltbertalan.flickslate.shared.model.PagingReply import com.zsoltbertalan.flickslate.shared.util.Outcome -import com.zsoltbertalan.flickslate.testhelper.MovieMother +import com.zsoltbertalan.flickslate.movies.domain.model.MovieMother import dagger.hilt.android.scopes.ActivityRetainedScoped import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf diff --git a/app/src/androidTest/java/com/zsoltbertalan/flickslate/FakeSearchRepository.kt b/app/src/androidTest/java/com/zsoltbertalan/flickslate/FakeSearchRepository.kt index 166509f..44d0739 100644 --- a/app/src/androidTest/java/com/zsoltbertalan/flickslate/FakeSearchRepository.kt +++ b/app/src/androidTest/java/com/zsoltbertalan/flickslate/FakeSearchRepository.kt @@ -3,21 +3,12 @@ package com.zsoltbertalan.flickslate import com.github.michaelbull.result.Ok import com.zsoltbertalan.flickslate.search.data.repository.SearchAccessor import com.zsoltbertalan.flickslate.search.domain.api.SearchRepository -import com.zsoltbertalan.flickslate.shared.model.GenresReply import com.zsoltbertalan.flickslate.shared.model.Movie import com.zsoltbertalan.flickslate.shared.model.PageData import com.zsoltbertalan.flickslate.shared.model.PagingReply import com.zsoltbertalan.flickslate.shared.util.Outcome -import com.zsoltbertalan.flickslate.testhelper.GenreMother -import com.zsoltbertalan.flickslate.testhelper.MovieMother -import com.zsoltbertalan.flickslate.testhelper.TvMother -import com.zsoltbertalan.flickslate.tv.data.repository.TvAccessor -import com.zsoltbertalan.flickslate.tv.domain.api.TvRepository -import com.zsoltbertalan.flickslate.tv.domain.model.TvDetail -import com.zsoltbertalan.flickslate.tv.domain.model.TvShow +import com.zsoltbertalan.flickslate.movies.domain.model.MovieMother import dagger.hilt.android.scopes.ViewModelScoped -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flowOf import se.ansman.dagger.auto.android.testing.Replaces import javax.inject.Inject diff --git a/app/src/androidTest/java/com/zsoltbertalan/flickslate/FakeTvRepository.kt b/app/src/androidTest/java/com/zsoltbertalan/flickslate/FakeTvRepository.kt index 5ffd0c7..d871b20 100644 --- a/app/src/androidTest/java/com/zsoltbertalan/flickslate/FakeTvRepository.kt +++ b/app/src/androidTest/java/com/zsoltbertalan/flickslate/FakeTvRepository.kt @@ -4,7 +4,7 @@ import com.github.michaelbull.result.Ok import com.zsoltbertalan.flickslate.shared.model.PageData import com.zsoltbertalan.flickslate.shared.model.PagingReply import com.zsoltbertalan.flickslate.shared.util.Outcome -import com.zsoltbertalan.flickslate.testhelper.TvMother +import com.zsoltbertalan.flickslate.tv.domain.model.TvMother import com.zsoltbertalan.flickslate.tv.data.repository.TvAccessor import com.zsoltbertalan.flickslate.tv.domain.api.TvRepository import com.zsoltbertalan.flickslate.tv.domain.model.TvDetail diff --git a/build-logic/convention/src/main/kotlin/data-convention.gradle.kts b/build-logic/convention/src/main/kotlin/data-convention.gradle.kts index 9963693..88e929f 100644 --- a/build-logic/convention/src/main/kotlin/data-convention.gradle.kts +++ b/build-logic/convention/src/main/kotlin/data-convention.gradle.kts @@ -33,5 +33,9 @@ dependencies { "ksp"(libs.findLibrary("google.dagger.compiler").get()) "ksp"(libs.findLibrary("google.dagger.hilt.compiler").get()) - //"testImplementation"(libs.findLibrary("junit").get()) + "testImplementation"(libs.findLibrary("junit").get()) + "testImplementation"(libs.findLibrary("test.kotest.assertions.shared").get()) + "testImplementation"(libs.findLibrary("test.kotest.assertions.core").get()) + "testImplementation"(libs.findLibrary("test.mockk.core").get()) + "testImplementation"(libs.findLibrary("kotlinx.coroutines.test").get()) } diff --git a/build-logic/convention/src/main/kotlin/ui-convention.gradle.kts b/build-logic/convention/src/main/kotlin/ui-convention.gradle.kts index 240c2bb..54786c8 100644 --- a/build-logic/convention/src/main/kotlin/ui-convention.gradle.kts +++ b/build-logic/convention/src/main/kotlin/ui-convention.gradle.kts @@ -45,7 +45,11 @@ dependencies { "ksp"(libs.findLibrary("google.dagger.hilt.compiler").get()) "ksp"(libs.findLibrary("google.dagger.hilt.androidCompiler").get()) -// "testImplementation"(libs.findLibrary("junit").get()) + "testImplementation"(libs.findLibrary("junit").get()) + "testImplementation"(libs.findLibrary("test.kotest.assertions.shared").get()) + "testImplementation"(libs.findLibrary("test.kotest.assertions.core").get()) + "testImplementation"(libs.findLibrary("test.mockk.core").get()) + "testImplementation"(libs.findLibrary("kotlinx.coroutines.test").get()) } tasks.withType().configureEach { diff --git a/gradle.properties b/gradle.properties index 99df97c..3bc637f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,4 +22,5 @@ kotlin.code.style=official # thereby reducing the size of the R class for that library android.nonTransitiveRClass=true org.gradle.configuration-cache=true -org.gradle.caching=true \ No newline at end of file +org.gradle.caching=true +android.experimental.enableTestFixturesKotlinSupport=true \ No newline at end of file diff --git a/movies/movies-data/build.gradle.kts b/movies/movies-data/build.gradle.kts index 0c449c7..ba57502 100644 --- a/movies/movies-data/build.gradle.kts +++ b/movies/movies-data/build.gradle.kts @@ -20,8 +20,17 @@ android { proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } + @Suppress("UnstableApiUsage") + testFixtures { + enable = true + } } dependencies { api(project(":movies:movies-domain")) + testImplementation(testFixtures(project("::movies:movies-data"))) + testImplementation(testFixtures(project("::movies:movies-domain"))) + + //Remove in AGP 8.9.0 https://issuetracker.google.com/issues/340315591 + testFixturesCompileOnly("org.jetbrains.kotlin:kotlin-stdlib:2.1.0") } diff --git a/app/src/test/java/com/zsoltbertalan/flickslate/mappers/MappersTest.kt b/movies/movies-data/src/test/java/com/zsoltbertalan/flickslate/movies/data/network/model/MovieResponseDtoTest.kt similarity index 87% rename from app/src/test/java/com/zsoltbertalan/flickslate/mappers/MappersTest.kt rename to movies/movies-data/src/test/java/com/zsoltbertalan/flickslate/movies/data/network/model/MovieResponseDtoTest.kt index 1518636..9dd169a 100644 --- a/app/src/test/java/com/zsoltbertalan/flickslate/mappers/MappersTest.kt +++ b/movies/movies-data/src/test/java/com/zsoltbertalan/flickslate/movies/data/network/model/MovieResponseDtoTest.kt @@ -1,6 +1,5 @@ -package com.zsoltbertalan.flickslate.mappers +package com.zsoltbertalan.flickslate.movies.data.network.model -import com.zsoltbertalan.flickslate.testhelper.MovieDtoMother import com.zsoltbertalan.flickslate.shared.data.network.model.toMoviesReply import com.zsoltbertalan.flickslate.shared.model.Movie import com.zsoltbertalan.flickslate.shared.model.PagingReply @@ -8,7 +7,7 @@ import io.kotest.matchers.shouldBe import org.junit.Before import org.junit.Test -class MappersTest { +class MovieResponseDtoTest { private lateinit var mappedResponse: PagingReply diff --git a/app/src/test/java/com/zsoltbertalan/flickslate/movies/repository/MoviesRepositoryTest.kt b/movies/movies-data/src/test/java/com/zsoltbertalan/flickslate/movies/data/repository/MoviesAccessorTest.kt similarity index 94% rename from app/src/test/java/com/zsoltbertalan/flickslate/movies/repository/MoviesRepositoryTest.kt rename to movies/movies-data/src/test/java/com/zsoltbertalan/flickslate/movies/data/repository/MoviesAccessorTest.kt index fa55803..0236c08 100644 --- a/app/src/test/java/com/zsoltbertalan/flickslate/movies/repository/MoviesRepositoryTest.kt +++ b/movies/movies-data/src/test/java/com/zsoltbertalan/flickslate/movies/data/repository/MoviesAccessorTest.kt @@ -1,15 +1,14 @@ -package com.zsoltbertalan.flickslate.movies.repository +package com.zsoltbertalan.flickslate.movies.data.repository import com.github.michaelbull.result.Ok import com.zsoltbertalan.flickslate.movies.data.api.NowPlayingMoviesDataSource import com.zsoltbertalan.flickslate.movies.data.api.PopularMoviesDataSource import com.zsoltbertalan.flickslate.movies.data.api.UpcomingMoviesDataSource import com.zsoltbertalan.flickslate.movies.data.network.MoviesService -import com.zsoltbertalan.flickslate.movies.data.repository.MoviesAccessor import com.zsoltbertalan.flickslate.shared.model.PageData import com.zsoltbertalan.flickslate.shared.model.PagingReply -import com.zsoltbertalan.flickslate.testhelper.MovieDtoMother -import com.zsoltbertalan.flickslate.testhelper.MovieMother +import com.zsoltbertalan.flickslate.movies.data.network.model.MovieDtoMother +import com.zsoltbertalan.flickslate.movies.domain.model.MovieMother import io.kotest.matchers.equals.shouldBeEqual import io.mockk.coEvery import io.mockk.mockk @@ -20,7 +19,7 @@ import org.junit.Before import org.junit.Test import retrofit2.Response -class MoviesRepositoryTest { +class MoviesAccessorTest { private val moviesService: MoviesService = mockk() diff --git a/app/src/main/java/com/zsoltbertalan/flickslate/testhelper/MovieDtoMother.kt b/movies/movies-data/src/testFixtures/kotlin/com/zsoltbertalan/flickslate/movies/data/network/model/MovieDtoMother.kt similarity index 94% rename from app/src/main/java/com/zsoltbertalan/flickslate/testhelper/MovieDtoMother.kt rename to movies/movies-data/src/testFixtures/kotlin/com/zsoltbertalan/flickslate/movies/data/network/model/MovieDtoMother.kt index 87d5127..9d2f460 100644 --- a/app/src/main/java/com/zsoltbertalan/flickslate/testhelper/MovieDtoMother.kt +++ b/movies/movies-data/src/testFixtures/kotlin/com/zsoltbertalan/flickslate/movies/data/network/model/MovieDtoMother.kt @@ -1,9 +1,7 @@ -package com.zsoltbertalan.flickslate.testhelper +package com.zsoltbertalan.flickslate.movies.data.network.model import com.zsoltbertalan.flickslate.shared.data.network.model.MovieDto import com.zsoltbertalan.flickslate.shared.data.network.model.MoviesReplyDto -import com.zsoltbertalan.flickslate.movies.data.network.model.NowPlayingMoviesReplyDto -import com.zsoltbertalan.flickslate.movies.data.network.model.UpcomingMoviesReplyDto private const val TOTAL_RESULTS = 300 diff --git a/movies/movies-domain/build.gradle.kts b/movies/movies-domain/build.gradle.kts index 3ddfc80..fe8fccc 100644 --- a/movies/movies-domain/build.gradle.kts +++ b/movies/movies-domain/build.gradle.kts @@ -5,6 +5,12 @@ plugins { android { namespace = "com.zsoltbertalan.flickslate.movies.domain" + buildFeatures { + @Suppress("UnstableApiUsage") + testFixtures { + enable = true + } + } } dependencies { @@ -14,5 +20,6 @@ dependencies { implementation(libs.kotlinResult.result) implementation(libs.kotlinx.collections.immutable.jvm) implementation(libs.kotlinx.coroutines.core) + testFixturesCompileOnly(libs.kotlinx.collections.immutable.jvm) } \ No newline at end of file diff --git a/app/src/main/java/com/zsoltbertalan/flickslate/testhelper/MovieMother.kt b/movies/movies-domain/src/testFixtures/kotlin/com/zsoltbertalan/flickslate/movies/domain/model/MovieMother.kt similarity index 97% rename from app/src/main/java/com/zsoltbertalan/flickslate/testhelper/MovieMother.kt rename to movies/movies-domain/src/testFixtures/kotlin/com/zsoltbertalan/flickslate/movies/domain/model/MovieMother.kt index 0daced1..a4d5d6d 100644 --- a/app/src/main/java/com/zsoltbertalan/flickslate/testhelper/MovieMother.kt +++ b/movies/movies-domain/src/testFixtures/kotlin/com/zsoltbertalan/flickslate/movies/domain/model/MovieMother.kt @@ -1,6 +1,5 @@ -package com.zsoltbertalan.flickslate.testhelper +package com.zsoltbertalan.flickslate.movies.domain.model -import com.zsoltbertalan.flickslate.movies.domain.model.MovieDetail import com.zsoltbertalan.flickslate.shared.model.Genre import com.zsoltbertalan.flickslate.shared.model.Movie import kotlinx.collections.immutable.toImmutableList diff --git a/movies/movies-ui/build.gradle.kts b/movies/movies-ui/build.gradle.kts index 3a29dba..382e962 100644 --- a/movies/movies-ui/build.gradle.kts +++ b/movies/movies-ui/build.gradle.kts @@ -24,4 +24,10 @@ dependencies { api(libs.androidx.lifecycle.common) implementation(libs.androidx.lifecycle.runtime.compose) api(libs.androidx.lifecycle.viewmodel.compose) + + testImplementation(testFixtures(project("::movies:movies-domain"))) +} + +tasks.withType().configureEach { + compilerOptions.freeCompilerArgs.add("-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi") } diff --git a/app/src/test/java/com/zsoltbertalan/flickslate/movies/ui/main/MoviesViewModelTest.kt b/movies/movies-ui/src/test/java/com/zsoltbertalan/flickslate/movies/ui/main/MoviesViewModelTest.kt similarity index 97% rename from app/src/test/java/com/zsoltbertalan/flickslate/movies/ui/main/MoviesViewModelTest.kt rename to movies/movies-ui/src/test/java/com/zsoltbertalan/flickslate/movies/ui/main/MoviesViewModelTest.kt index 2ce5434..3d8444e 100644 --- a/app/src/test/java/com/zsoltbertalan/flickslate/movies/ui/main/MoviesViewModelTest.kt +++ b/movies/movies-ui/src/test/java/com/zsoltbertalan/flickslate/movies/ui/main/MoviesViewModelTest.kt @@ -3,11 +3,11 @@ package com.zsoltbertalan.flickslate.movies.ui.main import com.github.michaelbull.result.Err import com.github.michaelbull.result.Ok import com.zsoltbertalan.flickslate.movies.domain.api.MoviesRepository +import com.zsoltbertalan.flickslate.movies.domain.model.MovieMother import com.zsoltbertalan.flickslate.shared.compose.component.paging.PaginationInternalState import com.zsoltbertalan.flickslate.shared.model.Failure import com.zsoltbertalan.flickslate.shared.model.PageData import com.zsoltbertalan.flickslate.shared.model.PagingReply -import com.zsoltbertalan.flickslate.testhelper.MovieMother import io.kotest.assertions.throwables.shouldThrowExactly import io.kotest.matchers.equality.shouldBeEqualToComparingFields import io.kotest.matchers.equals.shouldBeEqual diff --git a/search/search-data/build.gradle.kts b/search/search-data/build.gradle.kts index fd6acca..de9a3d7 100644 --- a/search/search-data/build.gradle.kts +++ b/search/search-data/build.gradle.kts @@ -21,4 +21,6 @@ android { dependencies { api(project(":search:search-domain")) + testImplementation(testFixtures(project("::shared"))) + testImplementation(libs.kotlinx.serialization.json) } diff --git a/search/search-data/src/test/java/com/zsoltbertalan/flickslate/search/data/network/FailNetworkRequestResponse.kt b/search/search-data/src/test/java/com/zsoltbertalan/flickslate/search/data/network/FailNetworkRequestResponse.kt new file mode 100644 index 0000000..81d6d11 --- /dev/null +++ b/search/search-data/src/test/java/com/zsoltbertalan/flickslate/search/data/network/FailNetworkRequestResponse.kt @@ -0,0 +1,22 @@ +package com.zsoltbertalan.flickslate.search.data.network + +import com.zsoltbertalan.flickslate.search.data.network.model.GenreReplyDto +import com.zsoltbertalan.flickslate.shared.data.network.model.ErrorBody +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import okhttp3.ResponseBody.Companion.toResponseBody +import retrofit2.Response + +/** + * TODO + * This can be used to test [com.zsoltbertalan.flickslate.search.data.network.GenreRemoteDataSource] + */ +@Suppress("unused") +fun failNetworkRequestResponse(): () -> Response = { + val errorBody = ErrorBody( + success = false, + status_code = 6, + status_message = "Invalid id: The pre-requisite id is invalid or not found." + ) + Response.error(404, Json.encodeToString(errorBody).toResponseBody()) +} diff --git a/app/src/main/java/com/zsoltbertalan/flickslate/testhelper/GenreDtoMother.kt b/search/search-data/src/test/java/com/zsoltbertalan/flickslate/search/data/network/GenreDtoMother.kt similarity index 72% rename from app/src/main/java/com/zsoltbertalan/flickslate/testhelper/GenreDtoMother.kt rename to search/search-data/src/test/java/com/zsoltbertalan/flickslate/search/data/network/GenreDtoMother.kt index c86db5d..d7cf401 100644 --- a/app/src/main/java/com/zsoltbertalan/flickslate/testhelper/GenreDtoMother.kt +++ b/search/search-data/src/test/java/com/zsoltbertalan/flickslate/search/data/network/GenreDtoMother.kt @@ -1,10 +1,13 @@ -package com.zsoltbertalan.flickslate.testhelper +package com.zsoltbertalan.flickslate.search.data.network +import com.zsoltbertalan.flickslate.search.data.network.model.GenreReplyDto import com.zsoltbertalan.flickslate.shared.data.network.model.GenreDto object GenreDtoMother { - fun createGenreDtoList() = + fun createGenreReplyDto() = GenreReplyDto(createGenreDtoList()) + + private fun createGenreDtoList() = listOf( createDefaultGenreDto(id = 28, name = "Action"), createDefaultGenreDto(id = 12, name = "Adventure"), diff --git a/search/search-data/src/test/java/com/zsoltbertalan/flickslate/search/data/network/GenreRemoteDataSourceTest.kt b/search/search-data/src/test/java/com/zsoltbertalan/flickslate/search/data/network/GenreRemoteDataSourceTest.kt new file mode 100644 index 0000000..a019dc2 --- /dev/null +++ b/search/search-data/src/test/java/com/zsoltbertalan/flickslate/search/data/network/GenreRemoteDataSourceTest.kt @@ -0,0 +1,46 @@ +package com.zsoltbertalan.flickslate.search.data.network + +import com.github.michaelbull.result.Err +import com.github.michaelbull.result.Ok +import com.zsoltbertalan.flickslate.shared.model.Failure +import com.zsoltbertalan.flickslate.shared.model.GenreMother +import com.zsoltbertalan.flickslate.shared.model.GenresReply +import io.kotest.matchers.equals.shouldBeEqual +import io.mockk.coEvery +import io.mockk.mockk +import kotlinx.coroutines.test.runTest +import org.junit.Before +import org.junit.Test +import retrofit2.Response + +class GenreRemoteDataSourceTest { + + private val searchService: SearchService = mockk() + private lateinit var genreRemoteDataSource: GenreRemoteDataSource + + @Before + fun setup() { + coEvery { searchService.getGenres(any(), any()) } returns Response.success(GenreDtoMother.createGenreReplyDto()) + genreRemoteDataSource = GenreRemoteDataSource(searchService) + } + + @Test + fun `when getGenres called and service returns result then returns correct result`() = runTest { + genreRemoteDataSource.getGenres("") shouldBeEqual Ok(GenresReply(GenreMother.createGenreList(), "")) + } + + @Test + fun `when getGenres called and service returns failure then returns correct result`() = runTest { + coEvery { searchService.getGenres(any(), any()) } returns failNetworkRequestResponse()() + genreRemoteDataSource.getGenres("") shouldBeEqual + Err( + Failure.ServerError( + """ + {"success":false, + "status_code":6,"status_message":"Invalid id: The pre-requisite id is invalid + or not found."}""".trimIndent().filterNot { it == '\n' } + ) + ) + } + +} diff --git a/shared-data/build.gradle.kts b/shared-data/build.gradle.kts index ccd8fa2..c3f25fb 100644 --- a/shared-data/build.gradle.kts +++ b/shared-data/build.gradle.kts @@ -54,6 +54,13 @@ dependencies { add("ksp", libs.androidx.hilt.compiler) add("ksp", libs.google.dagger.hilt.androidCompiler) + testImplementation(testFixtures(project("::shared"))) + testImplementation(libs.junit) + testImplementation(libs.test.kotest.assertions.shared) + testImplementation(libs.test.mockk.core) + testImplementation(libs.kotlinx.coroutines.test) + testImplementation(libs.test.kotest.assertions.core) + kspTest(libs.google.dagger.compiler) kspTest(libs.androidx.hilt.compiler) kspTest(libs.google.dagger.hilt.androidCompiler) diff --git a/app/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteLaterTest.kt b/shared-data/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteLaterTest.kt similarity index 98% rename from app/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteLaterTest.kt rename to shared-data/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteLaterTest.kt index 4b926d0..5887ce8 100644 --- a/app/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteLaterTest.kt +++ b/shared-data/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteLaterTest.kt @@ -4,7 +4,7 @@ import com.github.michaelbull.result.Err import com.github.michaelbull.result.Ok import com.zsoltbertalan.flickslate.shared.model.Failure import com.zsoltbertalan.flickslate.shared.model.Genre -import com.zsoltbertalan.flickslate.testhelper.GenreMother +import com.zsoltbertalan.flickslate.shared.model.GenreMother import com.zsoltbertalan.flickslate.shared.util.Outcome import io.kotest.matchers.shouldBe import io.mockk.mockk diff --git a/app/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteOnceTest.kt b/shared-data/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteOnceTest.kt similarity index 98% rename from app/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteOnceTest.kt rename to shared-data/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteOnceTest.kt index 7ee3c86..0c4d7dc 100644 --- a/app/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteOnceTest.kt +++ b/shared-data/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteOnceTest.kt @@ -4,7 +4,7 @@ import com.github.michaelbull.result.Err import com.github.michaelbull.result.Ok import com.zsoltbertalan.flickslate.shared.model.Failure import com.zsoltbertalan.flickslate.shared.model.Genre -import com.zsoltbertalan.flickslate.testhelper.GenreMother +import com.zsoltbertalan.flickslate.shared.model.GenreMother import com.zsoltbertalan.flickslate.shared.util.Outcome import io.kotest.matchers.shouldBe import io.mockk.mockk diff --git a/app/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteTest.kt b/shared-data/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteTest.kt similarity index 98% rename from app/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteTest.kt rename to shared-data/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteTest.kt index d7794c0..0040120 100644 --- a/app/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteTest.kt +++ b/shared-data/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchCacheThenRemoteTest.kt @@ -4,7 +4,7 @@ import com.github.michaelbull.result.Err import com.github.michaelbull.result.Ok import com.zsoltbertalan.flickslate.shared.model.Failure import com.zsoltbertalan.flickslate.shared.model.Genre -import com.zsoltbertalan.flickslate.testhelper.GenreMother +import com.zsoltbertalan.flickslate.shared.model.GenreMother import com.zsoltbertalan.flickslate.shared.util.Outcome import io.kotest.matchers.shouldBe import io.mockk.mockk diff --git a/app/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchRemoteFirstTest.kt b/shared-data/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchRemoteFirstTest.kt similarity index 98% rename from app/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchRemoteFirstTest.kt rename to shared-data/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchRemoteFirstTest.kt index f4feb2f..a4b8524 100644 --- a/app/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchRemoteFirstTest.kt +++ b/shared-data/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/FetchRemoteFirstTest.kt @@ -4,9 +4,9 @@ import com.github.michaelbull.result.Err import com.github.michaelbull.result.Ok import com.zsoltbertalan.flickslate.shared.model.Failure import com.zsoltbertalan.flickslate.shared.model.Genre +import com.zsoltbertalan.flickslate.shared.model.GenreMother import com.zsoltbertalan.flickslate.shared.model.PageData import com.zsoltbertalan.flickslate.shared.model.PagingReply -import com.zsoltbertalan.flickslate.testhelper.GenreMother import com.zsoltbertalan.flickslate.shared.util.Outcome import io.kotest.matchers.shouldBe import kotlinx.coroutines.delay diff --git a/app/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/NetworkRequest.kt b/shared-data/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/NetworkRequest.kt similarity index 51% rename from app/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/NetworkRequest.kt rename to shared-data/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/NetworkRequest.kt index 59da0fe..0b4dee6 100644 --- a/app/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/NetworkRequest.kt +++ b/shared-data/src/test/java/com/zsoltbertalan/flickslate/shared/data/getresult/NetworkRequest.kt @@ -2,17 +2,11 @@ package com.zsoltbertalan.flickslate.shared.data.getresult import com.github.michaelbull.result.Err import com.github.michaelbull.result.Ok -import com.zsoltbertalan.flickslate.shared.data.network.model.ErrorBody -import com.zsoltbertalan.flickslate.search.data.network.model.GenreReplyDto import com.zsoltbertalan.flickslate.shared.model.Failure import com.zsoltbertalan.flickslate.shared.model.Genre -import com.zsoltbertalan.flickslate.testhelper.GenreMother +import com.zsoltbertalan.flickslate.shared.model.GenreMother import com.zsoltbertalan.flickslate.shared.util.Outcome import kotlinx.coroutines.delay -import kotlinx.serialization.encodeToString -import kotlinx.serialization.json.Json -import okhttp3.ResponseBody.Companion.toResponseBody -import retrofit2.Response fun makeNetworkRequestResult(): () -> Outcome> = { Ok(GenreMother.createGenreList()) } @@ -27,17 +21,3 @@ fun makeNetworkRequestDelayedResponse(): suspend () -> Outcome> = su delay(1000) Ok(GenreMother.createGenreList()) } - -/** - * TODO - * This can be used to test [com.zsoltbertalan.flickslate.search.data.network.GenreRemoteDataSource] - */ -@Suppress("unused") -fun failNetworkRequestResponse(): () -> Response = { - val errorBody = ErrorBody( - success = false, - status_code = 6, - status_message = "Invalid id: The pre-requisite id is invalid or not found." - ) - Response.error(404, Json.encodeToString(errorBody).toResponseBody()) -} diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index 176a4bd..db6d71a 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -19,6 +19,11 @@ android { proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } + + @Suppress("UnstableApiUsage") + testFixtures { + enable = true + } } dependencies { diff --git a/app/src/main/java/com/zsoltbertalan/flickslate/testhelper/GenreMother.kt b/shared/src/testFixtures/kotlin/com/zsoltbertalan/flickslate/shared/model/GenreMother.kt similarity index 84% rename from app/src/main/java/com/zsoltbertalan/flickslate/testhelper/GenreMother.kt rename to shared/src/testFixtures/kotlin/com/zsoltbertalan/flickslate/shared/model/GenreMother.kt index b552d2e..703746e 100644 --- a/app/src/main/java/com/zsoltbertalan/flickslate/testhelper/GenreMother.kt +++ b/shared/src/testFixtures/kotlin/com/zsoltbertalan/flickslate/shared/model/GenreMother.kt @@ -1,6 +1,4 @@ -package com.zsoltbertalan.flickslate.testhelper - -import com.zsoltbertalan.flickslate.shared.model.Genre +package com.zsoltbertalan.flickslate.shared.model object GenreMother { diff --git a/tv/tv-domain/build.gradle.kts b/tv/tv-domain/build.gradle.kts index 6fdbd3f..9b75588 100644 --- a/tv/tv-domain/build.gradle.kts +++ b/tv/tv-domain/build.gradle.kts @@ -12,6 +12,13 @@ android { proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } + + buildFeatures { + @Suppress("UnstableApiUsage") + testFixtures { + enable = true + } + } } dependencies { @@ -22,4 +29,6 @@ dependencies { implementation(libs.kotlinx.collections.immutable.jvm) implementation(libs.kotlinx.coroutines.core) + testFixturesCompileOnly(libs.kotlinx.collections.immutable.jvm) + } diff --git a/app/src/main/java/com/zsoltbertalan/flickslate/testhelper/TvMother.kt b/tv/tv-domain/src/testFixtures/kotlin/com/zsoltbertalan/flickslate/tv/domain/model/TvMother.kt similarity index 88% rename from app/src/main/java/com/zsoltbertalan/flickslate/testhelper/TvMother.kt rename to tv/tv-domain/src/testFixtures/kotlin/com/zsoltbertalan/flickslate/tv/domain/model/TvMother.kt index a0e3f3d..0796fd2 100644 --- a/app/src/main/java/com/zsoltbertalan/flickslate/testhelper/TvMother.kt +++ b/tv/tv-domain/src/testFixtures/kotlin/com/zsoltbertalan/flickslate/tv/domain/model/TvMother.kt @@ -1,9 +1,6 @@ -package com.zsoltbertalan.flickslate.testhelper +package com.zsoltbertalan.flickslate.tv.domain.model -import com.zsoltbertalan.flickslate.movies.domain.model.MovieDetail import com.zsoltbertalan.flickslate.shared.model.Genre -import com.zsoltbertalan.flickslate.tv.domain.model.TvDetail -import com.zsoltbertalan.flickslate.tv.domain.model.TvShow import kotlinx.collections.immutable.toImmutableList /**