Skip to content

Commit

Permalink
Updated schema generator to support return DataFetcherResult of list …
Browse files Browse the repository at this point in the history
…of DataFetcherResult (#1338)
  • Loading branch information
dryan-cais authored Jan 14, 2022
1 parent fe745dc commit a747e3d
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,11 @@ import kotlin.reflect.full.createType
* CompletableFuture<T>
* CompletableFuture<DataFetcherResult<T>>
* List<DataFetcherResult<T>>
* DataFetcherResult<List<DataFetcherResult<T>>>
*/
internal fun getWrappedReturnType(returnType: KType): KType {
return when {
returnType.isSubclassOf(DataFetcherResult::class) && returnType.getTypeOfFirstArgument().isSubclassOf(List::class) -> getWrappedReturnType(returnType.getTypeOfFirstArgument())
returnType.isSubclassOf(DataFetcherResult::class) -> returnType.getTypeOfFirstArgument()
returnType.isSubclassOf(Publisher::class) -> { checkTypeForDataFetcherResult(returnType) }
returnType.isSubclassOf(CompletableFuture::class) -> { checkTypeForDataFetcherResult(returnType) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ class FunctionReturnTypesKtTest {
val listOfListString: List<List<String>> = listOf(listOf(string))
val dataFetcherResult: DataFetcherResult<String> = DataFetcherResult.newResult<String>().data(string).build()
val listDataFetcherResult: List<DataFetcherResult<String>> = listOf(DataFetcherResult.newResult<String>().data(string).build())
val dataFetcherResultListDataFetcherResult: DataFetcherResult<List<DataFetcherResult<String>>> =
DataFetcherResult.newResult<List<DataFetcherResult<String>>>().data(listOf(DataFetcherResult.newResult<String>().data(string).build())).build()
val dataFetcherResultListString: DataFetcherResult<List<String>> = DataFetcherResult.newResult<List<String>>().data(listOf(string)).build()
val listDataFetcherResultListString: List<DataFetcherResult<List<String>>> = listOf(DataFetcherResult.newResult<List<String>>().data(listOf(string)).build())
val publisher: Publisher<String> = Flowable.just(string)
Expand Down Expand Up @@ -72,6 +74,11 @@ class FunctionReturnTypesKtTest {
assertEquals(MyClass::listOfListString.returnType, actual = getWrappedReturnType(MyClass::listDataFetcherResultListString.returnType))
}

@Test
fun `getWrappedReturnType of DataFetcherResult of List of DataFetcherResult`() {
assertEquals(MyClass::listOfString.returnType, actual = getWrappedReturnType(MyClass::dataFetcherResultListDataFetcherResult.returnType))
}

@Test
fun `getWrappedReturnType of CompletableFuture`() {
assertEquals(MyClass::string.returnType, actual = getWrappedReturnType(MyClass::completableFuture.returnType))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ class DataFetcherResultListTest {
assertEquals("String!", schema.queryType.getFieldDefinition("getString").type.toString())
assertEquals("String!", schema.queryType.getFieldDefinition("getDataFetcherResultString").type.toString())
assertEquals("[String!]!", schema.queryType.getFieldDefinition("getListString").type.toString())
assertEquals("[String!]!", schema.queryType.getFieldDefinition("getDataFetcherListOfDataFetcherString").type.toString())
}

class SimpleQuery {
Expand All @@ -43,5 +44,8 @@ class DataFetcherResultListTest {
fun getDataFetcherResultString(): DataFetcherResult<String> =
DataFetcherResult.newResult<String>().data(string).build()
fun getListString(): List<DataFetcherResult<String>> = listOf(DataFetcherResult.newResult<String>().data(string).build())
fun getDataFetcherListOfDataFetcherString(): DataFetcherResult<List<DataFetcherResult<String>>> = DataFetcherResult.newResult<List<DataFetcherResult<String>>>().data(
listOf(DataFetcherResult.newResult<String>().data(string).build())
).build()
}
}

0 comments on commit a747e3d

Please sign in to comment.