Skip to content

Commit 9fc2d3b

Browse files
committed
ConnectionTypeDefinitionConfigurer supports type extensions
Closes gh-816
1 parent 9d34402 commit 9fc2d3b

File tree

2 files changed

+29
-7
lines changed

2 files changed

+29
-7
lines changed

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

+5-1
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
*/
1616
package org.springframework.graphql.execution;
1717

18+
import java.util.Collection;
1819
import java.util.LinkedHashSet;
1920
import java.util.Set;
2021
import java.util.stream.Collectors;
22+
import java.util.stream.Stream;
2123

2224
import graphql.language.FieldDefinition;
2325
import graphql.language.ImplementingTypeDefinition;
@@ -85,7 +87,9 @@ public void configure(TypeDefinitionRegistry registry) {
8587
}
8688

8789
private static Set<String> findConnectionTypeNames(TypeDefinitionRegistry registry) {
88-
return registry.types().values().stream()
90+
return Stream.concat(
91+
registry.types().values().stream(),
92+
registry.objectTypeExtensions().values().stream().flatMap(Collection::stream))
8993
.filter(definition -> definition instanceof ImplementingTypeDefinition)
9094
.flatMap(definition -> {
9195
ImplementingTypeDefinition<?> typeDefinition = (ImplementingTypeDefinition<?>) definition;

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

+24-6
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,38 @@ public class ConnectionTypeDefinitionConfigurerTests {
4545

4646
@Test
4747
void connectionTypeGeneration() {
48+
GraphQlSetup graphQlSetup = GraphQlSetup.schemaResource(BookSource.paginationSchema);
49+
testConnectionTypeGeneration(graphQlSetup);
50+
}
51+
52+
@Test
53+
void connectionTypeGenerationWithObjectExtension() {
54+
String schema = """
55+
type Query {
56+
bookById(id:ID): Book
57+
}
58+
type Book {
59+
id: ID
60+
name: String
61+
}
62+
extend type Query {
63+
books(first:Int, after:String): BookConnection
64+
}
65+
""";
66+
GraphQlSetup graphQlSetup = GraphQlSetup.schemaContent(schema);
67+
testConnectionTypeGeneration(graphQlSetup);
68+
}
4869

70+
private static void testConnectionTypeGeneration(GraphQlSetup graphQlSetup) {
4971
List<Book> books = BookSource.books();
5072

5173
DataFetcher<?> dataFetcher = environment ->
5274
createConnection(books, book -> new DefaultConnectionCursor("book:" + book.getId()));
5375

5476
String document = BookSource.booksConnectionQuery("");
5577

56-
Mono<ExecutionGraphQlResponse> response = initGraphQlSetup()
78+
Mono<ExecutionGraphQlResponse> response = graphQlSetup
79+
.typeDefinitionConfigurer(new ConnectionTypeDefinitionConfigurer())
5780
.dataFetcher("Query", "books", dataFetcher)
5881
.toGraphQlService()
5982
.execute(document);
@@ -78,11 +101,6 @@ void connectionTypeGeneration() {
78101
);
79102
}
80103

81-
private GraphQlSetup initGraphQlSetup() {
82-
return GraphQlSetup.schemaResource(BookSource.paginationSchema)
83-
.typeDefinitionConfigurer(new ConnectionTypeDefinitionConfigurer());
84-
}
85-
86104
private static <N> Connection<N> createConnection(
87105
List<N> nodes, Function<N, ConnectionCursor> cursorFunction) {
88106

0 commit comments

Comments
 (0)