@@ -20,6 +20,7 @@ package com.netflix.graphql.dgs.codegen
2020
2121import com.squareup.kotlinpoet.*
2222import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
23+ import graphql.schema.DataFetchingEnvironment
2324import org.assertj.core.api.Assertions.assertThat
2425import org.assertj.core.api.Assertions.assertThatThrownBy
2526import org.assertj.core.data.Index
@@ -35,6 +36,10 @@ import java.util.stream.Stream.of
3536
3637class KotlinCodeGenTest {
3738
39+ val basePackageName = " com.netflix.graphql.dgs.codegen.tests.generated"
40+ val typesPackageName = " $basePackageName .types"
41+ val datafetchersPackageName = " $basePackageName .datafetchers"
42+
3843 @Test
3944 fun generateDataClassWithStringProperties () {
4045 val schema = """
@@ -68,6 +73,90 @@ class KotlinCodeGenTest {
6873 assertCompilesKotlin(dataTypes)
6974 }
7075
76+ @Test
77+ fun generateDataFetcherInterfaceWithFunction () {
78+ val schema = """
79+ type Query {
80+ people: [Person]
81+ }
82+
83+ type Person {
84+ firstname: String
85+ lastname: String
86+ }
87+ """ .trimIndent()
88+
89+ val dataFetchers = CodeGen (
90+ CodeGenConfig (
91+ schemas = setOf (schema),
92+ packageName = basePackageName,
93+ language = Language .KOTLIN ,
94+ generateDataFetcherInterfaces = true
95+ )
96+ ).generate().kotlinDataFetchers
97+
98+ assertThat(dataFetchers.size).isEqualTo(1 )
99+ assertThat(dataFetchers[0 ].name).isEqualTo(" PeopleDatafetcher" )
100+ assertThat(dataFetchers[0 ].packageName).isEqualTo(datafetchersPackageName)
101+ val type = dataFetchers[0 ].members[0 ] as TypeSpec
102+
103+ assertThat(type.kind).isEqualTo(TypeSpec .Kind .INTERFACE )
104+ assertThat(type.funSpecs).hasSize(1 )
105+ val fn = type.funSpecs.single()
106+ assertThat(fn.name).isEqualTo(" getPeople" )
107+ val returnType = fn.returnType as ParameterizedTypeName
108+ assertThat(fn.returnType)
109+ assertThat(returnType.rawType.canonicalName).isEqualTo(List ::class .qualifiedName)
110+ assertThat(returnType.typeArguments).hasSize(1 )
111+ val arg0 = returnType.typeArguments.single() as ClassName
112+ assertThat(arg0.canonicalName).isEqualTo(" $typesPackageName .Person" )
113+ assertThat(fn.parameters).hasSize(1 )
114+ val param0 = fn.parameters.single()
115+ assertThat(param0.name).isEqualTo(" dataFetchingEnvironment" )
116+ assertThat((param0.type as ClassName ).canonicalName).isEqualTo(DataFetchingEnvironment ::class .qualifiedName)
117+ }
118+
119+ @Test
120+ fun generateDataFetcherInterfaceWithArgument () {
121+ val schema = """
122+ type Query {
123+ person(name: String): Person
124+ }
125+
126+ type Person {
127+ firstname: String
128+ lastname: String
129+ }
130+ """ .trimIndent()
131+
132+ val dataFetchers = CodeGen (
133+ CodeGenConfig (
134+ schemas = setOf (schema),
135+ packageName = basePackageName,
136+ language = Language .KOTLIN ,
137+ generateDataFetcherInterfaces = true
138+ )
139+ ).generate().kotlinDataFetchers
140+
141+ assertThat(dataFetchers.size).isEqualTo(1 )
142+ assertThat(dataFetchers[0 ].name).isEqualTo(" PersonDatafetcher" )
143+ assertThat(dataFetchers[0 ].packageName).isEqualTo(datafetchersPackageName)
144+ val type = dataFetchers[0 ].members[0 ] as TypeSpec
145+
146+ assertThat(type.kind).isEqualTo(TypeSpec .Kind .INTERFACE )
147+ assertThat(type.funSpecs).hasSize(1 )
148+ val fn = type.funSpecs.single()
149+ assertThat(fn.name).isEqualTo(" getPerson" )
150+ assertThat((fn.returnType as ClassName ).canonicalName).isEqualTo(" $typesPackageName .Person" )
151+ assertThat(fn.parameters).hasSize(2 )
152+ val arg0 = fn.parameters[0 ]
153+ assertThat(arg0.name).isEqualTo(" name" )
154+ assertThat((arg0.type as ClassName ).canonicalName).isEqualTo(String ::class .qualifiedName)
155+ val arg1 = fn.parameters[1 ]
156+ assertThat(arg1.name).isEqualTo(" dataFetchingEnvironment" )
157+ assertThat((arg1.type as ClassName ).canonicalName).isEqualTo(DataFetchingEnvironment ::class .qualifiedName)
158+ }
159+
71160 @Test
72161 fun generateDataClassWithNullablePrimitive () {
73162 val schema = """
0 commit comments