@@ -20,6 +20,7 @@ package com.netflix.graphql.dgs.codegen
20
20
21
21
import com.squareup.kotlinpoet.*
22
22
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
23
+ import graphql.schema.DataFetchingEnvironment
23
24
import org.assertj.core.api.Assertions.assertThat
24
25
import org.assertj.core.api.Assertions.assertThatThrownBy
25
26
import org.assertj.core.data.Index
@@ -35,6 +36,10 @@ import java.util.stream.Stream.of
35
36
36
37
class KotlinCodeGenTest {
37
38
39
+ val basePackageName = " com.netflix.graphql.dgs.codegen.tests.generated"
40
+ val typesPackageName = " $basePackageName .types"
41
+ val datafetchersPackageName = " $basePackageName .datafetchers"
42
+
38
43
@Test
39
44
fun generateDataClassWithStringProperties () {
40
45
val schema = """
@@ -68,6 +73,90 @@ class KotlinCodeGenTest {
68
73
assertCompilesKotlin(dataTypes)
69
74
}
70
75
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
+
71
160
@Test
72
161
fun generateDataClassWithNullablePrimitive () {
73
162
val schema = """
0 commit comments