@@ -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.junit.jupiter.api.Nested
25
26
import org.junit.jupiter.api.Test
@@ -32,6 +33,10 @@ import java.util.stream.Stream
32
33
33
34
class KotlinCodeGenTest {
34
35
36
+ val basePackageName = " com.netflix.graphql.dgs.codegen.tests.generated"
37
+ val typesPackageName = " $basePackageName .types"
38
+ val datafetchersPackageName = " $basePackageName .datafetchers"
39
+
35
40
@Test
36
41
fun generateDataClassWithStringProperties () {
37
42
@@ -66,6 +71,90 @@ class KotlinCodeGenTest {
66
71
assertCompilesKotlin(dataTypes)
67
72
}
68
73
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
+ @Test
118
+ fun generateDataFetcherInterfaceWithArgument () {
119
+
120
+ val schema = """
121
+ type Query {
122
+ person(name: String): Person
123
+ }
124
+
125
+ type Person {
126
+ firstname: String
127
+ lastname: String
128
+ }
129
+ """ .trimIndent()
130
+
131
+ val dataFetchers = CodeGen (
132
+ CodeGenConfig (
133
+ schemas = setOf (schema),
134
+ packageName = basePackageName,
135
+ language = Language .KOTLIN
136
+ )
137
+ ).generate().kotlinDataFetchers
138
+
139
+ assertThat(dataFetchers.size).isEqualTo(1 )
140
+ assertThat(dataFetchers[0 ].name).isEqualTo(" PersonDatafetcher" )
141
+ assertThat(dataFetchers[0 ].packageName).isEqualTo(datafetchersPackageName)
142
+ val type = dataFetchers[0 ].members[0 ] as TypeSpec
143
+
144
+ assertThat(type.kind).isEqualTo(TypeSpec .Kind .INTERFACE )
145
+ assertThat(type.funSpecs).hasSize(1 )
146
+ val fn = type.funSpecs.single()
147
+ assertThat(fn.name).isEqualTo(" getPerson" )
148
+ assertThat((fn.returnType as ClassName ).canonicalName).isEqualTo(" $typesPackageName .Person" )
149
+ assertThat(fn.parameters).hasSize(2 )
150
+ val arg0 = fn.parameters[0 ]
151
+ assertThat(arg0.name).isEqualTo(" name" )
152
+ assertThat((arg0.type as ClassName ).canonicalName).isEqualTo(String ::class .qualifiedName)
153
+ val arg1 = fn.parameters[1 ]
154
+ assertThat(arg1.name).isEqualTo(" dataFetchingEnvironment" )
155
+ assertThat((arg1.type as ClassName ).canonicalName).isEqualTo(DataFetchingEnvironment ::class .qualifiedName)
156
+ }
157
+
69
158
@Test
70
159
fun generateDataClassWithNullablePrimitive () {
71
160
0 commit comments