ConnectionTypeDefinitionConfigurer supports type extensions

Closes gh-816
This commit is contained in:
rstoyanchev
2023-09-18 17:42:09 +01:00
parent 9d34402545
commit 9fc2d3b9d7
2 changed files with 29 additions and 7 deletions

View File

@@ -15,9 +15,11 @@
*/
package org.springframework.graphql.execution;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import graphql.language.FieldDefinition;
import graphql.language.ImplementingTypeDefinition;
@@ -85,7 +87,9 @@ public class ConnectionTypeDefinitionConfigurer implements TypeDefinitionConfigu
}
private static Set<String> findConnectionTypeNames(TypeDefinitionRegistry registry) {
return registry.types().values().stream()
return Stream.concat(
registry.types().values().stream(),
registry.objectTypeExtensions().values().stream().flatMap(Collection::stream))
.filter(definition -> definition instanceof ImplementingTypeDefinition)
.flatMap(definition -> {
ImplementingTypeDefinition<?> typeDefinition = (ImplementingTypeDefinition<?>) definition;

View File

@@ -45,7 +45,29 @@ public class ConnectionTypeDefinitionConfigurerTests {
@Test
void connectionTypeGeneration() {
GraphQlSetup graphQlSetup = GraphQlSetup.schemaResource(BookSource.paginationSchema);
testConnectionTypeGeneration(graphQlSetup);
}
@Test
void connectionTypeGenerationWithObjectExtension() {
String schema = """
type Query {
bookById(id:ID): Book
}
type Book {
id: ID
name: String
}
extend type Query {
books(first:Int, after:String): BookConnection
}
""";
GraphQlSetup graphQlSetup = GraphQlSetup.schemaContent(schema);
testConnectionTypeGeneration(graphQlSetup);
}
private static void testConnectionTypeGeneration(GraphQlSetup graphQlSetup) {
List<Book> books = BookSource.books();
DataFetcher<?> dataFetcher = environment ->
@@ -53,7 +75,8 @@ public class ConnectionTypeDefinitionConfigurerTests {
String document = BookSource.booksConnectionQuery("");
Mono<ExecutionGraphQlResponse> response = initGraphQlSetup()
Mono<ExecutionGraphQlResponse> response = graphQlSetup
.typeDefinitionConfigurer(new ConnectionTypeDefinitionConfigurer())
.dataFetcher("Query", "books", dataFetcher)
.toGraphQlService()
.execute(document);
@@ -78,11 +101,6 @@ public class ConnectionTypeDefinitionConfigurerTests {
);
}
private GraphQlSetup initGraphQlSetup() {
return GraphQlSetup.schemaResource(BookSource.paginationSchema)
.typeDefinitionConfigurer(new ConnectionTypeDefinitionConfigurer());
}
private static <N> Connection<N> createConnection(
List<N> nodes, Function<N, ConnectionCursor> cursorFunction) {