Skip to content

Commit 2fd253d

Browse files
andimarekbbakerman
authored andcommitted
print union descriptions
1 parent 0f006c4 commit 2fd253d

File tree

2 files changed

+83
-4
lines changed

2 files changed

+83
-4
lines changed

src/main/java/graphql/schema/idl/SchemaPrinter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ private TypePrinter<GraphQLUnionType> unionPrinter() {
176176
if (isIntrospectionType(type)) {
177177
return;
178178
}
179+
printComments(out, type, "");
179180
out.format("union %s = ", type.getName());
180181
List<GraphQLOutputType> types = type.getTypes();
181182
for (int i = 0; i < types.size(); i++) {
@@ -185,7 +186,7 @@ private TypePrinter<GraphQLUnionType> unionPrinter() {
185186
}
186187
out.format("%s", objectType.getName());
187188
}
188-
out.format("}\n\n");
189+
out.format("\n\n");
189190
};
190191
}
191192

@@ -356,6 +357,8 @@ private String getDescription(Object descriptionHolder) {
356357
return ((GraphQLFieldDefinition) descriptionHolder).getDescription();
357358
} else if (descriptionHolder instanceof GraphQLEnumValueDefinition) {
358359
return ((GraphQLEnumValueDefinition) descriptionHolder).getDescription();
360+
} else if (descriptionHolder instanceof GraphQLUnionType) {
361+
return ((GraphQLUnionType) descriptionHolder).getDescription();
359362
} else {
360363
return Assert.assertShouldNeverHappen();
361364
}

src/test/groovy/graphql/schema/idl/SchemaPrinterTest.groovy

Lines changed: 79 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@ import graphql.schema.GraphQLObjectType
1212
import graphql.schema.GraphQLScalarType
1313
import graphql.schema.GraphQLSchema
1414
import graphql.schema.GraphQLType
15+
import graphql.schema.GraphQLUnionType
1516
import graphql.schema.TypeResolver
1617
import spock.lang.Specification
1718

1819
import java.util.function.UnaryOperator
1920

21+
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition
22+
2023
class SchemaPrinterTest extends Specification {
2124

2225
def nonNull(GraphQLType type) {
@@ -228,7 +231,7 @@ type Subscription {
228231

229232
def "prints object description as comment"() {
230233
given:
231-
GraphQLFieldDefinition fieldDefinition = GraphQLFieldDefinition.newFieldDefinition()
234+
GraphQLFieldDefinition fieldDefinition = newFieldDefinition()
232235
.name("field").type(Scalars.GraphQLString).build()
233236
def queryType = GraphQLObjectType.newObject().name("Query").description("About Query\nSecond Line").field(fieldDefinition).build()
234237
def schema = GraphQLSchema.newSchema().query(queryType).build()
@@ -247,7 +250,7 @@ type Query {
247250

248251
def "prints field description as comment"() {
249252
given:
250-
GraphQLFieldDefinition fieldDefinition = GraphQLFieldDefinition.newFieldDefinition()
253+
GraphQLFieldDefinition fieldDefinition = newFieldDefinition()
251254
.name("field").description("About field\nsecond").type(Scalars.GraphQLString).build()
252255
def queryType = GraphQLObjectType.newObject().name("Query").field(fieldDefinition).build()
253256
def schema = GraphQLSchema.newSchema().query(queryType).build()
@@ -272,7 +275,7 @@ type Query {
272275
.description("About enum")
273276
.value("value", "value", "value desc")
274277
.build()
275-
GraphQLFieldDefinition fieldDefinition = GraphQLFieldDefinition.newFieldDefinition()
278+
GraphQLFieldDefinition fieldDefinition = newFieldDefinition()
276279
.name("field").type(graphQLEnumType).build()
277280
def queryType = GraphQLObjectType.newObject().name("Query").field(fieldDefinition).build()
278281
def schema = GraphQLSchema.newSchema().query(queryType).build()
@@ -290,6 +293,79 @@ enum Enum {
290293
value
291294
}
292295
296+
"""
297+
298+
}
299+
300+
def "prints union description as comment"() {
301+
given:
302+
GraphQLFieldDefinition fieldDefinition = newFieldDefinition()
303+
.name("field").type(Scalars.GraphQLString).build()
304+
def possibleType = GraphQLObjectType.newObject().name("PossibleType").field(fieldDefinition).build()
305+
GraphQLUnionType unionType = GraphQLUnionType.newUnionType()
306+
.name("Union")
307+
.description("About union")
308+
.possibleType(possibleType)
309+
.typeResolver({ it -> null })
310+
.build()
311+
GraphQLFieldDefinition fieldDefinition2 = newFieldDefinition()
312+
.name("field").type(unionType).build()
313+
def queryType = GraphQLObjectType.newObject().name("Query").field(fieldDefinition2).build()
314+
def schema = GraphQLSchema.newSchema().query(queryType).build()
315+
when:
316+
def result = new SchemaPrinter().print(schema)
317+
318+
then:
319+
result == """#About union
320+
union Union = PossibleType
321+
322+
type PossibleType {
323+
field : String
324+
}
325+
326+
type Query {
327+
field : Union
328+
}
329+
330+
"""
331+
332+
}
333+
334+
def "prints union"() {
335+
def possibleType1 = GraphQLObjectType.newObject().name("PossibleType1").field(
336+
newFieldDefinition().name("field").type(Scalars.GraphQLString).build()
337+
).build()
338+
def possibleType2 = GraphQLObjectType.newObject().name("PossibleType2").field(
339+
newFieldDefinition().name("field").type(Scalars.GraphQLString).build()
340+
).build()
341+
GraphQLUnionType unionType = GraphQLUnionType.newUnionType()
342+
.name("Union")
343+
.possibleType(possibleType1)
344+
.possibleType(possibleType2)
345+
.typeResolver({ it -> null })
346+
.build()
347+
GraphQLFieldDefinition fieldDefinition2 = newFieldDefinition()
348+
.name("field").type(unionType).build()
349+
def queryType = GraphQLObjectType.newObject().name("Query").field(fieldDefinition2).build()
350+
def schema = GraphQLSchema.newSchema().query(queryType).build()
351+
when:
352+
def result = new SchemaPrinter().print(schema)
353+
354+
then:
355+
result == """union Union = PossibleType1 | PossibleType2
356+
357+
type PossibleType1 {
358+
field : String
359+
}
360+
361+
type PossibleType2 {
362+
field : String
363+
}
364+
365+
type Query {
366+
field : Union
367+
}
368+
293369
"""
294370

295371
}

0 commit comments

Comments
 (0)