From 71b1f5868be4314b60245cffe36695689ba0a2a1 Mon Sep 17 00:00:00 2001 From: rstoyanchev Date: Fri, 1 Sep 2023 16:38:35 +0100 Subject: [PATCH] Fix IndexOutOfBoundsException for empty Window Closes gh-775 --- .../pagination/ConnectionFieldTypeVisitor.java | 4 ++++ .../support/SchemaMappingPaginationTests.java | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/spring-graphql/src/main/java/org/springframework/graphql/data/pagination/ConnectionFieldTypeVisitor.java b/spring-graphql/src/main/java/org/springframework/graphql/data/pagination/ConnectionFieldTypeVisitor.java index 6e186a67..b2b2bf66 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/data/pagination/ConnectionFieldTypeVisitor.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/data/pagination/ConnectionFieldTypeVisitor.java @@ -217,6 +217,10 @@ public final class ConnectionFieldTypeVisitor extends GraphQLTypeVisitorStub { } Collection nodes = this.adapter.getContent(container); + if (nodes.isEmpty()) { + return EMPTY_CONNECTION; + } + int index = 0; List> edges = new ArrayList<>(nodes.size()); for (T node : nodes) { diff --git a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingPaginationTests.java b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingPaginationTests.java index 66631abc..8008091a 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingPaginationTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/SchemaMappingPaginationTests.java @@ -66,6 +66,23 @@ public class SchemaMappingPaginationTests { "}}}"); } + @Test // gh-775 + void zeroResults() { + + String document = BookSource.booksConnectionQuery("first:0, after:\"O_3\""); + Mono response = graphQlService().execute(document); + + ResponseHelper.forResponse(response).assertData(""" + {"books":{\ + "edges":[],\ + "pageInfo":{\ + "startCursor":null,\ + "endCursor":null,\ + "hasPreviousPage":false,\ + "hasNextPage":false}}}""" + ); + } + private TestExecutionGraphQlService graphQlService() { ScrollPositionCursorStrategy cursorStrategy = new ScrollPositionCursorStrategy();