@@ -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,91 @@ 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
+
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
+
69
159
@Test
70
160
fun generateDataClassWithNullablePrimitive () {
71
161
0 commit comments