Skip to content
This repository was archived by the owner on May 16, 2019. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
group 'com.github.pgutkowski'
version '0.3.0'
version '0.3.1'

buildscript {
ext.kotlin_version = '1.3.0'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import com.github.pgutkowski.kgraphql.Context
import com.github.pgutkowski.kgraphql.schema.model.FunctionWrapper
import com.github.pgutkowski.kgraphql.schema.model.InputValueDef
import com.github.pgutkowski.kgraphql.schema.model.PropertyDef
import java.lang.IllegalArgumentException


class PropertyDSL<T : Any, R>(val name : String, block : PropertyDSL<T, R>.() -> Unit) : LimitedAccessItemDSL<T>(), ResolverDSL.Target {
Expand Down Expand Up @@ -40,6 +39,24 @@ class PropertyDSL<T : Any, R>(val name : String, block : PropertyDSL<T, R>.() ->
fun <E, W, Q, A, S>resolver(function: (T, E, W, Q, A, S) -> R)
= resolver(FunctionWrapper.on(function, true))

fun suspendResolver(function: suspend (T) -> R)
= resolver(FunctionWrapper.onSuspend(function, true))

fun <E> suspendResolver(function: suspend (T, E) -> R)
= resolver(FunctionWrapper.onSuspend(function, true))

fun <E, W> suspendResolver(function: suspend (T, E, W) -> R)
= resolver(FunctionWrapper.onSuspend(function, true))

fun <E, W, Q> suspendResolver(function: suspend (T, E, W, Q) -> R) =
resolver(FunctionWrapper.onSuspend(function, true))

fun <E, W, Q, A> suspendResolver(function: suspend (T, E, W, Q, A) -> R) =
resolver(FunctionWrapper.onSuspend(function, true))

fun <E, W, Q, A, S> suspendResolver(function: suspend (T, E, W, Q, A, S) -> R) =
resolver(FunctionWrapper.onSuspend(function, true))

fun accessRule(rule: (T, Context) -> Exception?){

val accessRuleAdapter: (T?, Context) -> Exception? = { parent, ctx ->
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
package com.github.pgutkowski.kgraphql.specification.language

import com.github.pgutkowski.kgraphql.Actor
import com.github.pgutkowski.kgraphql.Specification
import com.github.pgutkowski.kgraphql.defaultSchema
import com.github.pgutkowski.kgraphql.deserialize
import com.github.pgutkowski.kgraphql.executeEqualQueries
import com.github.pgutkowski.kgraphql.*
import kotlinx.coroutines.delay
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Test
Expand All @@ -30,6 +27,14 @@ class ArgumentsSpecificationTest {
}.take(size)
}
}
repeat(1000) { num ->
property<Int>("automated-$num") {
suspendResolver {
delay(3)
num
}
}
}
}
}

Expand All @@ -50,5 +55,17 @@ class ArgumentsSpecificationTest {
)
}

@Test
fun `suspendable resolvers`() {
val query = "{ actor { " + (0..999).joinToString(", ") { "automated-$it" } + " } }"

val map = deserialize(schema.execute(query))
assertThat(map.extract<Int>("data/actor/automated-0"), equalTo(0))
assertThat(map.extract<Int>("data/actor/automated-271"), equalTo(271))
assertThat(map.extract<Int>("data/actor/automated-314"), equalTo(314))
assertThat(map.extract<Int>("data/actor/automated-500"), equalTo(500))
assertThat(map.extract<Int>("data/actor/automated-999"), equalTo(999))
}


}