Skip to content

Commit fd184b9

Browse files
committed
Update generated Connection types in schema
This commit ensures that the generated Connection type has a nullable "edges: [*Edge]" field, per specification. Closes gh-1296
1 parent 0313ca6 commit fd184b9

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

spring-graphql/src/main/java/org/springframework/graphql/execution/ConnectionTypeDefinitionConfigurer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public void configure(TypeDefinitionRegistry registry) {
7474

7575
registry.add(ObjectTypeDefinition.newObjectTypeDefinition()
7676
.name(connectionTypeName)
77-
.fieldDefinition(initFieldDefinition("edges", new NonNullType(new ListType(new TypeName(edgeTypeName)))))
77+
.fieldDefinition(initFieldDefinition("edges", new ListType(new TypeName(edgeTypeName))))
7878
.fieldDefinition(initFieldDefinition("pageInfo", new NonNullType(PAGE_INFO_TYPE)))
7979
.build());
8080

spring-graphql/src/test/java/org/springframework/graphql/execution/ConnectionTypeDefinitionConfigurerTests.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import graphql.relay.DefaultPageInfo;
2828
import graphql.relay.Edge;
2929
import graphql.schema.DataFetcher;
30+
import graphql.schema.GraphQLSchema;
31+
import graphql.schema.idl.SchemaPrinter;
3032
import org.junit.jupiter.api.Test;
3133
import reactor.core.publisher.Mono;
3234

@@ -36,14 +38,45 @@
3638
import org.springframework.graphql.GraphQlSetup;
3739
import org.springframework.graphql.ResponseHelper;
3840

41+
import static org.assertj.core.api.Assertions.assertThat;
42+
3943
/**
4044
* Unit tests for {@link ConnectionTypeDefinitionConfigurer}.
4145
*
4246
* @author Rossen Stoyanchev
43-
* @since 1.2.0
47+
* @author Brian Clozel
4448
*/
4549
class ConnectionTypeDefinitionConfigurerTests {
4650

51+
@Test
52+
void generateTypesInSchema() {
53+
GraphQlSetup graphQlSetup = GraphQlSetup.schemaResource(BookSource.paginationSchema)
54+
.typeDefinitionConfigurer(new ConnectionTypeDefinitionConfigurer());
55+
GraphQLSchema schema = graphQlSetup.toGraphQl().getGraphQLSchema();
56+
SchemaPrinter printer = new SchemaPrinter(SchemaPrinter.Options.defaultOptions());
57+
String schemaString = printer.print(schema);
58+
assertThat(schemaString).contains("""
59+
type BookConnection {
60+
edges: [BookEdge]
61+
pageInfo: PageInfo!
62+
}
63+
""",
64+
"""
65+
type BookEdge {
66+
cursor: String!
67+
node: Book!
68+
}
69+
""",
70+
"""
71+
type PageInfo {
72+
endCursor: String
73+
hasNextPage: Boolean!
74+
hasPreviousPage: Boolean!
75+
startCursor: String
76+
}
77+
""");
78+
}
79+
4780
@Test
4881
void connectionTypeGeneration() {
4982
GraphQlSetup graphQlSetup = GraphQlSetup.schemaResource(BookSource.paginationSchema);

0 commit comments

Comments
 (0)