From c7e2d63a9f3cec2d1f4cbcd27c695ca21cafdb7d Mon Sep 17 00:00:00 2001 From: Steven Barker Date: Thu, 7 Mar 2024 12:46:22 +1300 Subject: [PATCH] start adding defer stuff to tests --- .../kotlin/graphql/nadel/tests/EngineTests.kt | 45 +++++++++++++------ 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/test/src/test/kotlin/graphql/nadel/tests/EngineTests.kt b/test/src/test/kotlin/graphql/nadel/tests/EngineTests.kt index dd9d4212c..de4de843c 100644 --- a/test/src/test/kotlin/graphql/nadel/tests/EngineTests.kt +++ b/test/src/test/kotlin/graphql/nadel/tests/EngineTests.kt @@ -1,11 +1,13 @@ package graphql.nadel.tests import com.fasterxml.jackson.module.kotlin.readValue +import graphql.incremental.DelayedIncrementalPartialResult import graphql.language.AstPrinter import graphql.language.AstSorter import graphql.nadel.Nadel import graphql.nadel.NadelExecutionHints import graphql.nadel.NadelExecutionInput.Companion.newNadelExecutionInput +import graphql.nadel.NadelIncrementalServiceExecutionResult import graphql.nadel.NadelSchemas import graphql.nadel.ServiceExecution import graphql.nadel.ServiceExecutionFactory @@ -21,6 +23,9 @@ import graphql.nadel.validation.NadelSchemaValidation import graphql.nadel.validation.NadelSchemaValidationError import io.kotest.core.spec.style.FunSpec import io.kotest.core.test.TestContext +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.future.await import org.junit.jupiter.api.fail import java.io.File @@ -168,7 +173,7 @@ private suspend fun execute( ) printSyncLine(actualQuery) - val response = synchronized(serviceCalls) { + synchronized(serviceCalls) { val indexOfCall = serviceCalls .indexOfFirst { it.serviceName == serviceName @@ -181,9 +186,32 @@ private suspend fun execute( if (indexOfCall != null) { val serviceCall = serviceCalls.removeAt(indexOfCall) if (serviceCall.incrementalResponse != null) { - serviceCall.incrementalResponse.initialResponse //for now, just return initial response - } else { - serviceCall.response!! + + val incrementalItemPublisher: Flow = flowOf(*serviceCall.incrementalResponse.delayedResponses.toTypedArray()) + + CompletableFuture.completedFuture( + NadelIncrementalServiceExecutionResult( + serviceExecutionResult = NadelServiceExecutionResultImpl( + serviceCall.incrementalResponse.initialResponse["data"] as MutableJsonMap? ?: LinkedHashMap(), + serviceCall.incrementalResponse.initialResponse["errors"] as MutableList? ?: ArrayList(), + serviceCall.incrementalResponse.initialResponse["extensions"] as MutableJsonMap? ?: LinkedHashMap(), + ), + incrementalItemPublisher = null, + hasNext = true + ) + + + } else if (serviceCall.response != null) { + CompletableFuture.completedFuture( + NadelServiceExecutionResultImpl( + serviceCall.response!!["data"] as MutableJsonMap? ?: LinkedHashMap(), + serviceCall.response!!["errors"] as MutableList? ?: ArrayList(), + serviceCall.response!!["extensions"] as MutableJsonMap? ?: LinkedHashMap(), + ), + ) + } + else { + fail("") } } else { fail( @@ -197,15 +225,6 @@ private suspend fun execute( ) } } - - @Suppress("UNCHECKED_CAST") - CompletableFuture.completedFuture( - NadelServiceExecutionResultImpl( - response["data"] as MutableJsonMap? ?: LinkedHashMap(), - response["errors"] as MutableList? ?: ArrayList(), - response["extensions"] as MutableJsonMap? ?: LinkedHashMap(), - ), - ) } catch (e: Throwable) { fail("Unable to invoke service '$serviceName'", e) }