@@ -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.junit.jupiter.api.Nested
2526import org.junit.jupiter.api.Test
@@ -32,6 +33,10 @@ import java.util.stream.Stream
3233
3334class KotlinCodeGenTest {
3435
36+ val basePackageName = " com.netflix.graphql.dgs.codegen.tests.generated"
37+ val typesPackageName = " $basePackageName .types"
38+ val datafetchersPackageName = " $basePackageName .datafetchers"
39+
3540 @Test
3641 fun generateDataClassWithStringProperties () {
3742
@@ -66,6 +71,91 @@ class KotlinCodeGenTest {
6671 assertCompilesKotlin(dataTypes)
6772 }
6873
74+ @Test
75+ fun generateDataFetcherInterfaceWithFunction () {
76+
77+ val schema = """
78+ type Query {
79+ people: [Person]
80+ }
81+
82+ type Person {
83+ firstname: String
84+ lastname: String
85+ }
86+ """ .trimIndent()
87+
88+ val dataFetchers = CodeGen (
89+ CodeGenConfig (
90+ schemas = setOf (schema),
91+ packageName = basePackageName,
92+ language = Language .KOTLIN
93+ )
94+ ).generate().kotlinDataFetchers
95+
96+ assertThat(dataFetchers.size).isEqualTo(1 )
97+ assertThat(dataFetchers[0 ].name).isEqualTo(" PeopleDatafetcher" )
98+ assertThat(dataFetchers[0 ].packageName).isEqualTo(datafetchersPackageName)
99+ val type = dataFetchers[0 ].members[0 ] as TypeSpec
100+
101+ assertThat(type.kind).isEqualTo(TypeSpec .Kind .INTERFACE )
102+ assertThat(type.funSpecs).hasSize(1 )
103+ val fn = type.funSpecs.single()
104+ assertThat(fn.name).isEqualTo(" getPeople" )
105+ val returnType = fn.returnType as ParameterizedTypeName
106+ assertThat(fn.returnType)
107+ assertThat(returnType.rawType.canonicalName).isEqualTo(List ::class .qualifiedName)
108+ assertThat(returnType.typeArguments).hasSize(1 )
109+ val arg0 = returnType.typeArguments.single() as ClassName
110+ assertThat(arg0.canonicalName).isEqualTo(" $typesPackageName .Person" )
111+ assertThat(fn.parameters).hasSize(1 )
112+ val param0 = fn.parameters.single()
113+ assertThat(param0.name).isEqualTo(" dataFetchingEnvironment" )
114+ assertThat((param0.type as ClassName ).canonicalName).isEqualTo(DataFetchingEnvironment ::class .qualifiedName)
115+ }
116+
117+
118+ @Test
119+ fun generateDataFetcherInterfaceWithArgument () {
120+
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+ )
138+ ).generate() as CodeGenResult ).kotlinDataFetchers
139+
140+ assertThat(dataFetchers.size).isEqualTo(1 )
141+ assertThat(dataFetchers[0 ].name).isEqualTo(" PersonDatafetcher" )
142+ assertThat(dataFetchers[0 ].packageName).isEqualTo(datafetchersPackageName)
143+ val type = dataFetchers[0 ].members[0 ] as TypeSpec
144+
145+ assertThat(type.kind).isEqualTo(TypeSpec .Kind .INTERFACE )
146+ assertThat(type.funSpecs).hasSize(1 )
147+ val fn = type.funSpecs.single()
148+ assertThat(fn.name).isEqualTo(" getPerson" )
149+ assertThat((fn.returnType as ClassName ).canonicalName).isEqualTo(" $typesPackageName .Person" )
150+ assertThat(fn.parameters).hasSize(2 );
151+ val arg0 = fn.parameters[0 ]
152+ assertThat(arg0.name).isEqualTo(" name" )
153+ assertThat((arg0.type as ClassName ).canonicalName).isEqualTo(String ::class .qualifiedName)
154+ val arg1 = fn.parameters[1 ]
155+ assertThat(arg1.name).isEqualTo(" dataFetchingEnvironment" )
156+ assertThat((arg1.type as ClassName ).canonicalName).isEqualTo(DataFetchingEnvironment ::class .qualifiedName)
157+ }
158+
69159 @Test
70160 fun generateDataClassWithNullablePrimitive () {
71161
0 commit comments