Skip to content

Commit f381bd6

Browse files
committed
feat(spring-boot): respect the GraphQL specifications on the controller response
1 parent 7e86d99 commit f381bd6

File tree

3 files changed

+18
-9
lines changed

3 files changed

+18
-9
lines changed

graphql-kotlin-toolkit-spring-boot/src/main/kotlin/com/auritylab/graphql/kotlin/toolkit/spring/Controller.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import com.auritylab.graphql.kotlin.toolkit.spring.api.GraphQLInvocation
44
import com.auritylab.kotlin.object_path.KObjectPath
55
import com.fasterxml.jackson.databind.ObjectMapper
66
import com.fasterxml.jackson.module.kotlin.readValue
7-
import graphql.ExecutionResult
87
import java.util.concurrent.CompletableFuture
98
import org.springframework.http.HttpHeaders
109
import org.springframework.http.HttpStatus
@@ -50,7 +49,7 @@ internal class Controller(
5049
@RequestParam(value = "operationName", required = false) operationName: String?,
5150
@RequestParam(value = "variables", required = false) variables: String?,
5251
request: WebRequest
53-
): CompletableFuture<ExecutionResult> =
52+
): CompletableFuture<out Any> =
5453
execute(Operation(query, operationName, variables?.let { parse<Map<String, String>>(it) }), request)
5554

5655
/**
@@ -70,7 +69,7 @@ internal class Controller(
7069
@RequestParam(value = "query", required = false) query: String?,
7170
@RequestBody(required = false) body: String?,
7271
request: WebRequest
73-
): CompletableFuture<ExecutionResult> {
72+
): CompletableFuture<out Any> {
7473
// Parse the given contentType into a MediaType.
7574
val parsedMediaType = MediaType.parseMediaType(contentType)
7675

@@ -111,7 +110,7 @@ internal class Controller(
111110
@RequestParam(value = "map") map: String,
112111
multipartRequest: MultipartRequest,
113112
request: WebRequest
114-
): CompletableFuture<ExecutionResult> {
113+
): CompletableFuture<out Any> {
115114
val parsedOperation = parse<Operation>(operations)
116115
?: throw ResponseStatusException(HttpStatus.BAD_REQUEST, "Unable to parse operation")
117116
val parsedMap = parse<Map<String, List<String>>>(map)
@@ -149,11 +148,11 @@ internal class Controller(
149148
private fun execute(
150149
operation: Operation,
151150
request: WebRequest
152-
): CompletableFuture<ExecutionResult> =
151+
): CompletableFuture<out Any> =
153152
invocation.invoke(
154153
GraphQLInvocation.Data(operation.query, operation.operationName, operation.variables),
155154
request
156-
)
155+
).thenApply { it.toSpecification() }
157156

158157
/**
159158
* Represents a GraphQL operation with a [query], [operationName] (optional) and [variables] (optional).

graphql-kotlin-toolkit-spring-boot/src/test/kotlin/com/auritylab/graphql/kotlin/toolkit/spring/ControllerMockedInvocationTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import com.fasterxml.jackson.databind.ObjectMapper
55
import com.nhaarman.mockitokotlin2.any
66
import com.nhaarman.mockitokotlin2.argThat
77
import com.nhaarman.mockitokotlin2.check
8-
import com.nhaarman.mockitokotlin2.reset
8+
import com.nhaarman.mockitokotlin2.clearInvocations
99
import com.nhaarman.mockitokotlin2.times
1010
import com.nhaarman.mockitokotlin2.verify
1111
import java.util.UUID
@@ -43,7 +43,7 @@ class ControllerMockedInvocationTest {
4343

4444
@BeforeEach
4545
fun resetMock() {
46-
reset(invocation)
46+
clearInvocations(invocation)
4747
}
4848

4949
@Test

graphql-kotlin-toolkit-spring-boot/src/test/kotlin/com/auritylab/graphql/kotlin/toolkit/spring/TestConfiguration.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ import com.auritylab.graphql.kotlin.toolkit.spring.api.GraphQLInvocation
44
import com.auritylab.graphql.kotlin.toolkit.spring.api.schemaOfResourceFiles
55
import com.fasterxml.jackson.databind.ObjectMapper
66
import com.fasterxml.jackson.module.kotlin.KotlinModule
7+
import com.nhaarman.mockitokotlin2.any
8+
import com.nhaarman.mockitokotlin2.whenever
9+
import graphql.ExecutionResultImpl
10+
import java.util.concurrent.CompletableFuture
711
import org.mockito.Mockito
812
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
913
import org.springframework.context.annotation.Bean
@@ -25,5 +29,11 @@ internal class TestConfiguration {
2529

2630
@Bean
2731
@Profile("graphql-invocation-mock")
28-
fun invocation(): GraphQLInvocation = Mockito.mock(GraphQLInvocation::class.java)
32+
fun invocation(): GraphQLInvocation {
33+
val m = Mockito.mock(GraphQLInvocation::class.java)
34+
35+
whenever(m.invoke(any(), any())).thenReturn(CompletableFuture.completedFuture(ExecutionResultImpl(listOf())))
36+
37+
return m
38+
}
2939
}

0 commit comments

Comments
 (0)