From 71792d96662c77ebea7ed9ab8af6f20b068778e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Salcedo=20Garc=C3=ADa?= Date: Thu, 4 Jan 2024 11:49:11 +0100 Subject: [PATCH] feat: migrate to Apollo4 --- .../KatanaMultiplatformDataRemotePlugin.kt | 9 ++-- common/user/data/build.gradle.kts | 4 -- .../user/data/mappers/responses/userId.kt | 4 +- .../user/data/mappers/responses/userInfo.kt | 8 ++-- .../data/sources/id/UserIdRemoteSourceImpl.kt | 2 +- .../sources/info/UserInfoRemoteSourceImpl.kt | 2 +- .../mappers/responses/UserIdMapperTest.kt | 7 --- .../sources/info/UserInfoRemoteSourceTest.kt | 11 +++-- .../dev/alvr/katana/core/remote/extensions.kt | 8 +++- .../katana/core/tests/KotestProjectConfig.kt | 2 +- features/account/data/build.gradle.kts | 4 -- features/explore/data/build.gradle.kts | 4 -- features/lists/data/build.gradle.kts | 4 -- .../sources/CommonListsRemoteSourceImpl.kt | 4 +- .../mappers/responses/MediaEntryMapperTest.kt | 2 +- .../alvr/katana/features/lists/data/mocks.kt | 8 +--- .../sources/ApolloListsRemoteSourceTest.kt | 4 +- .../sources/CommonListsRemoteSourceTest.kt | 45 +++++++++---------- .../alvr/katana/features/lists/data/utils.kt | 12 ----- features/social/data/build.gradle.kts | 4 -- gradle/libs.versions.toml | 2 +- 21 files changed, 58 insertions(+), 92 deletions(-) delete mode 100644 features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/utils.kt diff --git a/build-logic/katana-convention/src/main/kotlin/dev/alvr/katana/buildlogic/mp/mobile/data/KatanaMultiplatformDataRemotePlugin.kt b/build-logic/katana-convention/src/main/kotlin/dev/alvr/katana/buildlogic/mp/mobile/data/KatanaMultiplatformDataRemotePlugin.kt index f7484ebfd..592a55706 100644 --- a/build-logic/katana-convention/src/main/kotlin/dev/alvr/katana/buildlogic/mp/mobile/data/KatanaMultiplatformDataRemotePlugin.kt +++ b/build-logic/katana-convention/src/main/kotlin/dev/alvr/katana/buildlogic/mp/mobile/data/KatanaMultiplatformDataRemotePlugin.kt @@ -61,23 +61,24 @@ internal class KatanaMultiplatformDataRemotePlugin : Plugin { private fun ApolloExtension.configureApollo() { service("anilist") { generateAsInternal = true - generateDataBuilders = true packageName = fullPackageName - if (fullPackageName.contains(BASE_PACKAGE)) { - alwaysGenerateTypesMatching = listOf("Query", "User") + if (path == CORE_PROJECT) { generateApolloMetadata = true generateAsInternal = false + generateDataBuilders = true introspection { endpointUrl = "https://graphql.anilist.co" schemaFile = project.file("src/commonMain/graphql/schema.graphqls") } + } else { + dependsOn(project(CORE_PROJECT)) } } } private companion object { - const val BASE_PACKAGE = ".remote" + const val CORE_PROJECT = ":core:remote" } } diff --git a/common/user/data/build.gradle.kts b/common/user/data/build.gradle.kts index 8c1e3c3aa..6f63c99ff 100644 --- a/common/user/data/build.gradle.kts +++ b/common/user/data/build.gradle.kts @@ -2,10 +2,6 @@ plugins { id("katana.multiplatform.data.remote") } -dependencies { - apolloMetadata(projects.core.remote) -} - katanaMultiplatform { commonMainDependencies { implementation(projects.core.common) diff --git a/common/user/data/src/commonMain/kotlin/dev/alvr/katana/common/user/data/mappers/responses/userId.kt b/common/user/data/src/commonMain/kotlin/dev/alvr/katana/common/user/data/mappers/responses/userId.kt index ece7c64db..ddafa24f3 100644 --- a/common/user/data/src/commonMain/kotlin/dev/alvr/katana/common/user/data/mappers/responses/userId.kt +++ b/common/user/data/src/commonMain/kotlin/dev/alvr/katana/common/user/data/mappers/responses/userId.kt @@ -3,6 +3,6 @@ package dev.alvr.katana.common.user.data.mappers.responses import dev.alvr.katana.common.user.data.UserIdQuery import dev.alvr.katana.common.user.domain.models.UserId -internal operator fun UserIdQuery.Data?.invoke(): UserId = UserId( - id = checkNotNull(this?.viewer?.id) { "ViewerId is required." }, +internal operator fun UserIdQuery.Data.invoke(): UserId = UserId( + id = checkNotNull(viewer?.id) { "ViewerId is required." }, ) diff --git a/common/user/data/src/commonMain/kotlin/dev/alvr/katana/common/user/data/mappers/responses/userInfo.kt b/common/user/data/src/commonMain/kotlin/dev/alvr/katana/common/user/data/mappers/responses/userInfo.kt index dff0a97a0..bcb6409f8 100644 --- a/common/user/data/src/commonMain/kotlin/dev/alvr/katana/common/user/data/mappers/responses/userInfo.kt +++ b/common/user/data/src/commonMain/kotlin/dev/alvr/katana/common/user/data/mappers/responses/userInfo.kt @@ -3,8 +3,8 @@ package dev.alvr.katana.common.user.data.mappers.responses import dev.alvr.katana.common.user.data.UserInfoQuery import dev.alvr.katana.common.user.domain.models.UserInfo -internal operator fun UserInfoQuery.Data?.invoke() = UserInfo( - username = this?.user?.name.orEmpty(), - avatar = this?.user?.avatar?.medium.orEmpty(), - banner = this?.user?.bannerImage.orEmpty(), +internal operator fun UserInfoQuery.Data.invoke() = UserInfo( + username = user?.name.orEmpty(), + avatar = user?.avatar?.medium.orEmpty(), + banner = user?.bannerImage.orEmpty(), ) diff --git a/common/user/data/src/commonMain/kotlin/dev/alvr/katana/common/user/data/sources/id/UserIdRemoteSourceImpl.kt b/common/user/data/src/commonMain/kotlin/dev/alvr/katana/common/user/data/sources/id/UserIdRemoteSourceImpl.kt index d32f18818..288c6ec96 100644 --- a/common/user/data/src/commonMain/kotlin/dev/alvr/katana/common/user/data/sources/id/UserIdRemoteSourceImpl.kt +++ b/common/user/data/src/commonMain/kotlin/dev/alvr/katana/common/user/data/sources/id/UserIdRemoteSourceImpl.kt @@ -37,5 +37,5 @@ internal class UserIdRemoteSourceImpl( .query(UserIdQuery()) .fetchPolicy(policy) .execute() - .data() + .dataAssertNoErrors() } diff --git a/common/user/data/src/commonMain/kotlin/dev/alvr/katana/common/user/data/sources/info/UserInfoRemoteSourceImpl.kt b/common/user/data/src/commonMain/kotlin/dev/alvr/katana/common/user/data/sources/info/UserInfoRemoteSourceImpl.kt index 9c3424008..212d2e97e 100644 --- a/common/user/data/src/commonMain/kotlin/dev/alvr/katana/common/user/data/sources/info/UserInfoRemoteSourceImpl.kt +++ b/common/user/data/src/commonMain/kotlin/dev/alvr/katana/common/user/data/sources/info/UserInfoRemoteSourceImpl.kt @@ -26,7 +26,7 @@ internal class UserInfoRemoteSourceImpl( client.query(UserInfoQuery()) .fetchPolicy(FetchPolicy.CacheAndNetwork) .watch() - .map { res -> res.data().right() as Either } + .map { res -> res.dataAssertNoErrors().right() as Either } .catch { error -> Logger.e(error) { "Was not possible to get the user info" } diff --git a/common/user/data/src/commonTest/kotlin/dev/alvr/katana/common/user/data/mappers/responses/UserIdMapperTest.kt b/common/user/data/src/commonTest/kotlin/dev/alvr/katana/common/user/data/mappers/responses/UserIdMapperTest.kt index c7e3e84f8..c51d83562 100644 --- a/common/user/data/src/commonTest/kotlin/dev/alvr/katana/common/user/data/mappers/responses/UserIdMapperTest.kt +++ b/common/user/data/src/commonTest/kotlin/dev/alvr/katana/common/user/data/mappers/responses/UserIdMapperTest.kt @@ -8,13 +8,6 @@ import io.kotest.matchers.ints.shouldBeExactly import io.kotest.matchers.throwable.shouldHaveMessage internal class UserIdMapperTest : FreeSpec({ - "null UserIdQuery Data" { - shouldThrowExactlyUnit { - val userId: UserIdQuery.Data? = null - userId() - } shouldHaveMessage "ViewerId is required." - } - "UserIdQuery with null viewer" { shouldThrowExactlyUnit { val userId = UserIdQuery.Data(viewer = null) diff --git a/common/user/data/src/commonTest/kotlin/dev/alvr/katana/common/user/data/sources/info/UserInfoRemoteSourceTest.kt b/common/user/data/src/commonTest/kotlin/dev/alvr/katana/common/user/data/sources/info/UserInfoRemoteSourceTest.kt index c21bfc8fe..391faeed1 100644 --- a/common/user/data/src/commonTest/kotlin/dev/alvr/katana/common/user/data/sources/info/UserInfoRemoteSourceTest.kt +++ b/common/user/data/src/commonTest/kotlin/dev/alvr/katana/common/user/data/sources/info/UserInfoRemoteSourceTest.kt @@ -19,15 +19,20 @@ import kotlin.time.Duration.Companion.milliseconds @OptIn(ApolloExperimental::class) internal class UserInfoRemoteSourceTest : FreeSpec() { - private val client = ApolloClient.Builder().networkTransport(MapTestNetworkTransport()).build() - private val source: UserInfoRemoteSource = UserInfoRemoteSourceImpl(client) + private lateinit var client: ApolloClient + private lateinit var source: UserInfoRemoteSource init { + beforeTest { + client = ApolloClient.Builder().networkTransport(MapTestNetworkTransport()).build() + source = UserInfoRemoteSourceImpl(client) + } + "observing the user info" - { "the server returns no data" { client.registerTestResponse(UserInfoQuery()) source.userInfo.test(100.milliseconds) { - awaitItem().shouldBeRight(userInfoNoData) + awaitItem().shouldBeLeft(UserFailure.GettingUserInfo) cancelAndIgnoreRemainingEvents() } } diff --git a/core/remote/src/commonMain/kotlin/dev/alvr/katana/core/remote/extensions.kt b/core/remote/src/commonMain/kotlin/dev/alvr/katana/core/remote/extensions.kt index 338f51fa2..4675cceaf 100644 --- a/core/remote/src/commonMain/kotlin/dev/alvr/katana/core/remote/extensions.kt +++ b/core/remote/src/commonMain/kotlin/dev/alvr/katana/core/remote/extensions.kt @@ -6,9 +6,11 @@ import com.apollographql.apollo3.exception.ApolloHttpException import com.apollographql.apollo3.exception.ApolloNetworkException import com.apollographql.apollo3.exception.ApolloParseException import com.apollographql.apollo3.exception.CacheMissException +import com.apollographql.apollo3.exception.DefaultApolloException import com.apollographql.apollo3.exception.HttpCacheMissException import com.apollographql.apollo3.exception.JsonDataException import com.apollographql.apollo3.exception.JsonEncodingException +import com.apollographql.apollo3.exception.NoDataException import dev.alvr.katana.core.domain.failures.Failure fun Either.optional() = Optional.presentIfNotNull(getOrNull()) @@ -20,11 +22,13 @@ fun Throwable.toFailure( unknown: Failure = Failure.Unknown, ): Failure = when (this) { is ApolloHttpException, - is ApolloNetworkException -> network + is ApolloNetworkException, + is DefaultApolloException -> network is CacheMissException, is HttpCacheMissException -> cache is ApolloParseException, is JsonDataException, - is JsonEncodingException -> response + is JsonEncodingException, + is NoDataException -> response else -> unknown } diff --git a/core/tests/src/commonMain/kotlin/dev/alvr/katana/core/tests/KotestProjectConfig.kt b/core/tests/src/commonMain/kotlin/dev/alvr/katana/core/tests/KotestProjectConfig.kt index 87a005e68..db003d458 100644 --- a/core/tests/src/commonMain/kotlin/dev/alvr/katana/core/tests/KotestProjectConfig.kt +++ b/core/tests/src/commonMain/kotlin/dev/alvr/katana/core/tests/KotestProjectConfig.kt @@ -7,7 +7,7 @@ import io.kotest.core.spec.IsolationMode import io.kotest.core.test.AssertionMode object KotestProjectConfig : AbstractProjectConfig() { - private const val NUM_THREADS = 1 + private const val NUM_THREADS = 2 override val assertionMode = AssertionMode.Warn override val coroutineDebugProbes = true diff --git a/features/account/data/build.gradle.kts b/features/account/data/build.gradle.kts index 93e1fdd9c..ca626a75f 100644 --- a/features/account/data/build.gradle.kts +++ b/features/account/data/build.gradle.kts @@ -2,10 +2,6 @@ plugins { id("katana.multiplatform.data.remote") } -dependencies { - apolloMetadata(projects.core.remote) -} - katanaMultiplatform { commonMainDependencies { implementation(projects.core.remote) diff --git a/features/explore/data/build.gradle.kts b/features/explore/data/build.gradle.kts index 67d16b735..f9804cbde 100644 --- a/features/explore/data/build.gradle.kts +++ b/features/explore/data/build.gradle.kts @@ -2,10 +2,6 @@ plugins { id("katana.multiplatform.data.remote") } -dependencies { - apolloMetadata(projects.core.remote) -} - katanaMultiplatform { commonMainDependencies { implementation(projects.core.remote) diff --git a/features/lists/data/build.gradle.kts b/features/lists/data/build.gradle.kts index d93813613..e16797cf1 100644 --- a/features/lists/data/build.gradle.kts +++ b/features/lists/data/build.gradle.kts @@ -2,10 +2,6 @@ plugins { id("katana.multiplatform.data.remote") } -dependencies { - apolloMetadata(projects.core.remote) -} - katanaMultiplatform { commonMainDependencies { implementation(projects.common.user.domain) diff --git a/features/lists/data/src/commonMain/kotlin/dev/alvr/katana/features/lists/data/sources/CommonListsRemoteSourceImpl.kt b/features/lists/data/src/commonMain/kotlin/dev/alvr/katana/features/lists/data/sources/CommonListsRemoteSourceImpl.kt index 62c2bda61..20e49fdbe 100644 --- a/features/lists/data/src/commonMain/kotlin/dev/alvr/katana/features/lists/data/sources/CommonListsRemoteSourceImpl.kt +++ b/features/lists/data/src/commonMain/kotlin/dev/alvr/katana/features/lists/data/sources/CommonListsRemoteSourceImpl.kt @@ -25,6 +25,7 @@ import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.emitAll import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach internal class CommonListsRemoteSourceImpl( private val client: ApolloClient, @@ -47,8 +48,9 @@ internal class CommonListsRemoteSourceImpl( .query(MediaListCollectionQuery(userId.getId().optional(), type)) .fetchPolicyInterceptor(reloadInterceptor) .watch() + .onEach { println(it) } .distinctUntilChanged() - .map { res -> MediaCollection(res.data?.mediaList(type).orEmpty()).right() } + .map { res -> MediaCollection(res.dataAssertNoErrors.mediaList(type)).right() } .distinctUntilChanged() .catch { error -> Logger.e(error) { "There was an error collecting the lists" } diff --git a/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/mappers/responses/MediaEntryMapperTest.kt b/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/mappers/responses/MediaEntryMapperTest.kt index 4b602939c..c3b3bd0b4 100644 --- a/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/mappers/responses/MediaEntryMapperTest.kt +++ b/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/mappers/responses/MediaEntryMapperTest.kt @@ -9,7 +9,7 @@ import io.kotest.matchers.shouldNotBe import dev.alvr.katana.features.lists.data.fragment.MediaEntry as MediaEntryFragment internal class MediaEntryMapperTest : FreeSpec({ - MediaFormat.knownValues() + MediaFormat.knownEntries .forEach { format -> "MediaFormat $format should not be ${CommonMediaEntry.Format.UNKNOWN}" { MediaEntryFragment( diff --git a/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/mocks.kt b/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/mocks.kt index 3a6c764d7..05da7f71e 100644 --- a/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/mocks.kt +++ b/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/mocks.kt @@ -49,13 +49,7 @@ internal val mediaListMock = MediaList( updatedAt = Arb.dateTimeTz().orNull().next(), ) -internal val apolloErrorMock = Error( - message = Arb.string().next(), - locations = emptyList(), - path = emptyList(), - extensions = emptyMap(), - nonStandardFields = emptyMap(), -) +internal val apolloErrorMock = Error.Builder(Arb.string().next()).build() private fun Arb.Companion.date() = arbitrary { Date( diff --git a/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/sources/ApolloListsRemoteSourceTest.kt b/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/sources/ApolloListsRemoteSourceTest.kt index 367a3dcd6..088b5045f 100644 --- a/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/sources/ApolloListsRemoteSourceTest.kt +++ b/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/sources/ApolloListsRemoteSourceTest.kt @@ -318,7 +318,7 @@ internal class ApolloListsRemoteSourceTest : FreeSpec() { ) animeSource.animeCollection.test(100.milliseconds) { - awaitItem().shouldBeRight().lists.shouldBeEmpty() + awaitItem().shouldBeLeft(ListsFailure.GetMediaCollection) awaitComplete() } @@ -580,7 +580,7 @@ internal class ApolloListsRemoteSourceTest : FreeSpec() { ) mangaSource.mangaCollection.test(100.milliseconds) { - awaitItem().shouldBeRight().lists.shouldBeEmpty() + awaitItem().shouldBeLeft(ListsFailure.GetMediaCollection) awaitComplete() } diff --git a/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/sources/CommonListsRemoteSourceTest.kt b/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/sources/CommonListsRemoteSourceTest.kt index 4d8d0e344..e64d853f4 100644 --- a/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/sources/CommonListsRemoteSourceTest.kt +++ b/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/sources/CommonListsRemoteSourceTest.kt @@ -6,19 +6,20 @@ import com.apollographql.apollo3.ApolloClient import com.apollographql.apollo3.annotations.ApolloExperimental import com.apollographql.apollo3.api.ApolloResponse import com.apollographql.apollo3.interceptor.ApolloInterceptor -import com.apollographql.apollo3.mockserver.MockResponse import com.apollographql.apollo3.mockserver.MockServer +import com.apollographql.apollo3.mockserver.enqueueError +import com.apollographql.apollo3.mockserver.enqueueString import com.apollographql.apollo3.testing.QueueTestNetworkTransport import com.apollographql.apollo3.testing.enqueueTestResponse import com.benasher44.uuid.uuid4 import dev.alvr.katana.common.user.domain.managers.UserIdManager +import dev.alvr.katana.core.domain.failures.Failure import dev.alvr.katana.core.remote.type.MediaType import dev.alvr.katana.core.remote.type.buildMediaListCollection import dev.alvr.katana.core.tests.shouldBeLeft import dev.alvr.katana.core.tests.shouldBeRight import dev.alvr.katana.features.lists.data.MediaListCollectionQuery import dev.alvr.katana.features.lists.data.apolloErrorMock -import dev.alvr.katana.features.lists.data.enqueueResponse import dev.alvr.katana.features.lists.data.mediaListCollectionQueryMock import dev.alvr.katana.features.lists.data.mediaListEntriesMutationMock import dev.alvr.katana.features.lists.data.mediaListMock @@ -31,7 +32,6 @@ import dev.mokkery.mock import dev.mokkery.verifySuspend import io.kotest.core.spec.style.FreeSpec import kotlin.time.Duration.Companion.milliseconds -import kotlin.time.Duration.Companion.seconds @OptIn(ApolloExperimental::class) internal class CommonListsRemoteSourceTest : FreeSpec() { @@ -50,12 +50,16 @@ internal class CommonListsRemoteSourceTest : FreeSpec() { val response = ApolloResponse.Builder( operation = mediaListCollectionQueryMock, requestUuid = uuid4(), - data = data, - ).build() + ).data(data).build() client.enqueueTestResponse(response) source.getMediaCollection(type).test(100.milliseconds) { - awaitItem().shouldBeRight(MediaCollection(emptyList())) + if (data == null) { + awaitItem().shouldBeLeft(ListsFailure.GetMediaCollection) + } else { + awaitItem().shouldBeRight(MediaCollection(emptyList())) + } + cancelAndIgnoreRemainingEvents() } verifySuspend { userIdManager.getId() } @@ -66,12 +70,11 @@ internal class CommonListsRemoteSourceTest : FreeSpec() { val response = ApolloResponse.Builder( operation = mediaListCollectionQueryMock, requestUuid = uuid4(), - data = data, - ).errors(listOf(apolloErrorMock)).build() + ).data(data).errors(listOf(apolloErrorMock)).build() client.enqueueTestResponse(response) source.getMediaCollection(type).test(100.milliseconds) { - awaitItem().shouldBeRight(MediaCollection(emptyList())) + awaitItem().shouldBeLeft(Failure.Unknown) cancelAndIgnoreRemainingEvents() } verifySuspend { userIdManager.getId() } @@ -95,14 +98,14 @@ internal class CommonListsRemoteSourceTest : FreeSpec() { reloadInterceptor, ) - afterSpec { mockServer.stop() } + afterSpec { mockServer.close() } - badClient().forEach { (type, action) -> + mockServer.badClient().forEach { (type, enqueueAction) -> "a HTTP error occurs" { everySuspend { userIdManager.getId() } returns 37_384.right() - mockServer.enqueueResponse(action) + enqueueAction() - source.getMediaCollection(type).test(5.seconds) { + source.getMediaCollection(type).test(250.milliseconds) { awaitItem().shouldBeLeft(ListsFailure.GetMediaCollection) cancelAndIgnoreRemainingEvents() } @@ -124,24 +127,20 @@ internal class CommonListsRemoteSourceTest : FreeSpec() { add(null) add(empty) } - val types = MediaType.knownValues() + val types = MediaType.knownEntries return buildList { values.forEach { v -> types.forEach { t -> add(v to t) } } } } - private fun badClient(): List Unit)>> { - fun apolloCommand( - block: MockResponse.Builder.() -> Unit, - ): MockResponse.Builder.() -> Unit = { MockResponse.Builder().apply(block) } - + private fun MockServer.badClient(): List Unit)>> { val commands = buildList { - add(apolloCommand { statusCode(500) }) - add(apolloCommand { body("Malformed body") }) - add(apolloCommand { body("""{"data": {"random": 42}}""") }) + add { enqueueError(500) } + add { enqueueString("Malformed body") } + add { enqueueString("""{"data": {"random": 42}}""") } } - val types = MediaType.knownValues() + val types = MediaType.knownEntries return buildList { commands.forEach { c -> types.forEach { t -> add(t to c) } } diff --git a/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/utils.kt b/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/utils.kt deleted file mode 100644 index 4952d415d..000000000 --- a/features/lists/data/src/commonTest/kotlin/dev/alvr/katana/features/lists/data/utils.kt +++ /dev/null @@ -1,12 +0,0 @@ -package dev.alvr.katana.features.lists.data - -import com.apollographql.apollo3.annotations.ApolloExperimental -import com.apollographql.apollo3.mockserver.MockResponse -import com.apollographql.apollo3.mockserver.MockServer - -@OptIn(ApolloExperimental::class) -internal fun MockServer.enqueueResponse(builder: MockResponse.Builder.() -> Unit) { - repeat(4) { - enqueue(MockResponse.Builder().apply(builder).build()) - } -} diff --git a/features/social/data/build.gradle.kts b/features/social/data/build.gradle.kts index 881f2c4b3..dd81aed27 100644 --- a/features/social/data/build.gradle.kts +++ b/features/social/data/build.gradle.kts @@ -2,10 +2,6 @@ plugins { id("katana.multiplatform.data.remote") } -dependencies { - apolloMetadata(projects.core.remote) -} - katanaMultiplatform { commonMainDependencies { implementation(projects.core.remote) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 79aba41f7..301e958e8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ android = "8.3.2" androidx-activity = "1.8.2" androidx-lifecycle = "2.7.0" androidx-splashscreen = "1.0.1" -apollo = "3.8.3" +apollo = "4.0.0-beta.5" arrow = "1.2.4" buildconfig = "5.3.5" complete-kotlin = "1.1.0"