From 86e15662c4cd66338929d4edc71db93368b895bb Mon Sep 17 00:00:00 2001 From: Anna Shipil Date: Thu, 15 Jan 2026 15:37:48 +0100 Subject: [PATCH 01/10] DEVX-714: adding graphQLOrders function and graphQLAllOrders example --- .../graphql/api/ByProjectKeyGraphqlQuery.java | 27 +++++++++++++++++++ .../src/test/java/example/ExamplesTest.java | 26 ++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/commercetools/commercetools-graphql-api/src/main/java/com/commercetools/graphql/api/ByProjectKeyGraphqlQuery.java b/commercetools/commercetools-graphql-api/src/main/java/com/commercetools/graphql/api/ByProjectKeyGraphqlQuery.java index 83de7822180..a5b177f9b68 100644 --- a/commercetools/commercetools-graphql-api/src/main/java/com/commercetools/graphql/api/ByProjectKeyGraphqlQuery.java +++ b/commercetools/commercetools-graphql-api/src/main/java/com/commercetools/graphql/api/ByProjectKeyGraphqlQuery.java @@ -8,7 +8,11 @@ import java.util.concurrent.CompletableFuture; import com.commercetools.api.client.ErrorableTrait; +import com.commercetools.graphql.CommercetoolsTestUtils; +import com.commercetools.api.client.ProjectApiRoot; +import com.commercetools.graphql.api.types.Order; +import com.commercetools.graphql.api.types.OrderQueryResult; import io.vrap.rmf.base.client.*; import org.apache.commons.lang3.builder.EqualsBuilder; @@ -73,6 +77,29 @@ public CompletableFuture>> execute(final ApiH .withBody(graphQLDataResponse -> GraphQLResponse.of(response.getBody(), graphQLRequest))); } + public List graphQLOrders(int limit) { + final ProjectApiRoot projectRoot = CommercetoolsTestUtils.getProjectApiRoot(); + List allOrders = new ArrayList<>(); + boolean limitNotReached = true; + String lastId = null; + while (limitNotReached) { + GraphQLRequestBuilder orderBuilder = GraphQL.query( + "query { orders { results { id, version } } }").dataMapper(GraphQLData::getOrders); + + if (lastId != null) + orderBuilder.variables(builder -> builder.addValue("where", "id > lastId")); + + var result = projectRoot.graphql().query(orderBuilder.build()).executeBlocking(); + var orders = result.getBody().getData().getResults(); + allOrders.addAll(orders); + var length = orders.size(); + lastId = result.getBody().getData().getResults().get(length - 1).getId(); + + limitNotReached = length >= limit; + } + return allOrders; + } + public String getProjectKey() { return this.projectKey; } diff --git a/commercetools/internal-docs/src/test/java/example/ExamplesTest.java b/commercetools/internal-docs/src/test/java/example/ExamplesTest.java index 625c0e4804b..bfe6075b7ea 100644 --- a/commercetools/internal-docs/src/test/java/example/ExamplesTest.java +++ b/commercetools/internal-docs/src/test/java/example/ExamplesTest.java @@ -35,6 +35,11 @@ import com.commercetools.api.models.product_type.AttributeLocalizedEnumValue; import com.commercetools.api.models.project.Project; import com.commercetools.api.models.tax_category.TaxCategoryPagedQueryResponse; +import com.commercetools.graphql.CommercetoolsTestUtils; +import com.commercetools.graphql.api.GraphQL; +import com.commercetools.graphql.api.GraphQLData; +import com.commercetools.graphql.api.GraphQLRequestBuilder; +import com.commercetools.graphql.api.types.OrderQueryResult; import com.commercetools.http.apachehttp.CtApacheHttpClient; import com.commercetools.http.javanet.CtJavaNetHttpClient; import com.commercetools.http.netty.CtNettyHttpClient; @@ -379,6 +384,27 @@ public void queryAll() { .join(); } + public void graphQLAllOrders() { + final ProjectApiRoot projectRoot = CommercetoolsTestUtils.getProjectApiRoot(); + boolean limitNotReached = true; + int limit = 10; + String lastId = null; + while (limitNotReached) { + GraphQLRequestBuilder orderBuilder = GraphQL.query( + "query { orders { results { id, version } } }").dataMapper(GraphQLData::getOrders); + + if (lastId != null) + orderBuilder.variables(builder -> builder.addValue("where", "id > lastId")); + + var result = projectRoot.graphql().query(orderBuilder.build()).executeBlocking(); + var orders = result.getBody().getData().getResults(); + var length = orders.size(); + lastId = result.getBody().getData().getResults().get(length - 1).getId(); + + limitNotReached = length >= limit; + } + } + public void middleware() { ProjectApiRoot apiRoot = ApiRootBuilder.of() .defaultClient(ClientCredentials.of() From b433299d8bc64a9e9bbdb117780c5b6b540ad8a6 Mon Sep 17 00:00:00 2001 From: Anna Shipil Date: Fri, 16 Jan 2026 13:56:41 +0100 Subject: [PATCH 02/10] DEVX-714: adding graphQLAllOrders example --- .../graphql/api/ByProjectKeyGraphqlQuery.java | 24 ------------------- .../src/test/java/example/ExamplesTest.java | 13 ++++++---- 2 files changed, 9 insertions(+), 28 deletions(-) diff --git a/commercetools/commercetools-graphql-api/src/main/java/com/commercetools/graphql/api/ByProjectKeyGraphqlQuery.java b/commercetools/commercetools-graphql-api/src/main/java/com/commercetools/graphql/api/ByProjectKeyGraphqlQuery.java index a5b177f9b68..10e6e1bbfe5 100644 --- a/commercetools/commercetools-graphql-api/src/main/java/com/commercetools/graphql/api/ByProjectKeyGraphqlQuery.java +++ b/commercetools/commercetools-graphql-api/src/main/java/com/commercetools/graphql/api/ByProjectKeyGraphqlQuery.java @@ -8,7 +8,6 @@ import java.util.concurrent.CompletableFuture; import com.commercetools.api.client.ErrorableTrait; -import com.commercetools.graphql.CommercetoolsTestUtils; import com.commercetools.api.client.ProjectApiRoot; import com.commercetools.graphql.api.types.Order; @@ -77,29 +76,6 @@ public CompletableFuture>> execute(final ApiH .withBody(graphQLDataResponse -> GraphQLResponse.of(response.getBody(), graphQLRequest))); } - public List graphQLOrders(int limit) { - final ProjectApiRoot projectRoot = CommercetoolsTestUtils.getProjectApiRoot(); - List allOrders = new ArrayList<>(); - boolean limitNotReached = true; - String lastId = null; - while (limitNotReached) { - GraphQLRequestBuilder orderBuilder = GraphQL.query( - "query { orders { results { id, version } } }").dataMapper(GraphQLData::getOrders); - - if (lastId != null) - orderBuilder.variables(builder -> builder.addValue("where", "id > lastId")); - - var result = projectRoot.graphql().query(orderBuilder.build()).executeBlocking(); - var orders = result.getBody().getData().getResults(); - allOrders.addAll(orders); - var length = orders.size(); - lastId = result.getBody().getData().getResults().get(length - 1).getId(); - - limitNotReached = length >= limit; - } - return allOrders; - } - public String getProjectKey() { return this.projectKey; } diff --git a/commercetools/internal-docs/src/test/java/example/ExamplesTest.java b/commercetools/internal-docs/src/test/java/example/ExamplesTest.java index bfe6075b7ea..fcecb11ca76 100644 --- a/commercetools/internal-docs/src/test/java/example/ExamplesTest.java +++ b/commercetools/internal-docs/src/test/java/example/ExamplesTest.java @@ -384,6 +384,7 @@ public void queryAll() { .join(); } + @Test public void graphQLAllOrders() { final ProjectApiRoot projectRoot = CommercetoolsTestUtils.getProjectApiRoot(); boolean limitNotReached = true; @@ -391,10 +392,14 @@ public void graphQLAllOrders() { String lastId = null; while (limitNotReached) { GraphQLRequestBuilder orderBuilder = GraphQL.query( - "query { orders { results { id, version } } }").dataMapper(GraphQLData::getOrders); - - if (lastId != null) - orderBuilder.variables(builder -> builder.addValue("where", "id > lastId")); + "query getOrders() { " + + "orders (limit: " + limit + ") {" + + "results {id}}}").dataMapper(GraphQLData::getOrders); + + if (lastId != null) { + String whereQuery = "id > " + lastId; + orderBuilder.variables(builder -> builder.addValue("where", whereQuery)); + } var result = projectRoot.graphql().query(orderBuilder.build()).executeBlocking(); var orders = result.getBody().getData().getResults(); From 9232c8f806b5eebeff35c09b1616b6598f3f5e73 Mon Sep 17 00:00:00 2001 From: "ct-sdks[bot]" <153784748+ct-sdks[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 13:00:04 +0000 Subject: [PATCH 03/10] spotless: Fix code style --- .../graphql/api/ByProjectKeyGraphqlQuery.java | 3 --- .../internal-docs/src/test/java/example/ExamplesTest.java | 7 +++---- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/commercetools/commercetools-graphql-api/src/main/java/com/commercetools/graphql/api/ByProjectKeyGraphqlQuery.java b/commercetools/commercetools-graphql-api/src/main/java/com/commercetools/graphql/api/ByProjectKeyGraphqlQuery.java index 10e6e1bbfe5..83de7822180 100644 --- a/commercetools/commercetools-graphql-api/src/main/java/com/commercetools/graphql/api/ByProjectKeyGraphqlQuery.java +++ b/commercetools/commercetools-graphql-api/src/main/java/com/commercetools/graphql/api/ByProjectKeyGraphqlQuery.java @@ -9,9 +9,6 @@ import com.commercetools.api.client.ErrorableTrait; -import com.commercetools.api.client.ProjectApiRoot; -import com.commercetools.graphql.api.types.Order; -import com.commercetools.graphql.api.types.OrderQueryResult; import io.vrap.rmf.base.client.*; import org.apache.commons.lang3.builder.EqualsBuilder; diff --git a/commercetools/internal-docs/src/test/java/example/ExamplesTest.java b/commercetools/internal-docs/src/test/java/example/ExamplesTest.java index fcecb11ca76..04344b28e8e 100644 --- a/commercetools/internal-docs/src/test/java/example/ExamplesTest.java +++ b/commercetools/internal-docs/src/test/java/example/ExamplesTest.java @@ -391,10 +391,9 @@ public void graphQLAllOrders() { int limit = 10; String lastId = null; while (limitNotReached) { - GraphQLRequestBuilder orderBuilder = GraphQL.query( - "query getOrders() { " + - "orders (limit: " + limit + ") {" + - "results {id}}}").dataMapper(GraphQLData::getOrders); + GraphQLRequestBuilder orderBuilder = GraphQL + .query("query getOrders() { " + "orders (limit: " + limit + ") {" + "results {id}}}") + .dataMapper(GraphQLData::getOrders); if (lastId != null) { String whereQuery = "id > " + lastId; From f55baa482ba79baa40e35eed903add81bdd174f7 Mon Sep 17 00:00:00 2001 From: "ct-sdks[bot]" <153784748+ct-sdks[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 13:00:05 +0000 Subject: [PATCH 04/10] spotless: add commit to blame ignore revs file --- .git-blame-ignore-revs | 1 + 1 file changed, 1 insertion(+) diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 27aef1fb0b7..e2aa2c08bd1 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -20,3 +20,4 @@ fcdaa3d6735d2382a44d066a6ce051a2c5e6469f 3addaca346bcdfd555fca0340e40c7e5518c5185 165a4da6a015267909adf7e7d5f3edc16a56dda6 c4e2bf407aa0b7a3d34605134791013ba8a2d376 +9232c8f806b5eebeff35c09b1616b6598f3f5e73 From 8d76c53b131d4dcd10d830a25fdf8d41e90db137 Mon Sep 17 00:00:00 2001 From: Anna Shipil Date: Fri, 16 Jan 2026 16:12:05 +0100 Subject: [PATCH 05/10] DEVX-714: updating imports --- .../internal-docs/src/test/java/example/ExamplesTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commercetools/internal-docs/src/test/java/example/ExamplesTest.java b/commercetools/internal-docs/src/test/java/example/ExamplesTest.java index fcecb11ca76..20729d0dee9 100644 --- a/commercetools/internal-docs/src/test/java/example/ExamplesTest.java +++ b/commercetools/internal-docs/src/test/java/example/ExamplesTest.java @@ -35,7 +35,6 @@ import com.commercetools.api.models.product_type.AttributeLocalizedEnumValue; import com.commercetools.api.models.project.Project; import com.commercetools.api.models.tax_category.TaxCategoryPagedQueryResponse; -import com.commercetools.graphql.CommercetoolsTestUtils; import com.commercetools.graphql.api.GraphQL; import com.commercetools.graphql.api.GraphQLData; import com.commercetools.graphql.api.GraphQLRequestBuilder; @@ -45,6 +44,7 @@ import com.commercetools.http.netty.CtNettyHttpClient; import com.commercetools.http.okhttp4.CtOkHttp4Client; +import commercetools.utils.CommercetoolsTestUtils; import io.vrap.rmf.base.client.*; import io.vrap.rmf.base.client.http.ErrorMiddleware; import io.vrap.rmf.base.client.oauth2.ClientCredentials; From 062fb57831db2e3e25afc1bd63cf8b09d46ffa67 Mon Sep 17 00:00:00 2001 From: "ct-sdks[bot]" <153784748+ct-sdks[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 15:15:19 +0000 Subject: [PATCH 06/10] spotless: Fix code style --- .../internal-docs/src/test/java/example/ExamplesTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commercetools/internal-docs/src/test/java/example/ExamplesTest.java b/commercetools/internal-docs/src/test/java/example/ExamplesTest.java index 9b193ebcff0..bf31ffce62b 100644 --- a/commercetools/internal-docs/src/test/java/example/ExamplesTest.java +++ b/commercetools/internal-docs/src/test/java/example/ExamplesTest.java @@ -43,8 +43,8 @@ import com.commercetools.http.javanet.CtJavaNetHttpClient; import com.commercetools.http.netty.CtNettyHttpClient; import com.commercetools.http.okhttp4.CtOkHttp4Client; - import commercetools.utils.CommercetoolsTestUtils; + import io.vrap.rmf.base.client.*; import io.vrap.rmf.base.client.http.ErrorMiddleware; import io.vrap.rmf.base.client.oauth2.ClientCredentials; From ade8dc2f6b2a405ec14f57c7e66f942cac1416a9 Mon Sep 17 00:00:00 2001 From: "ct-sdks[bot]" <153784748+ct-sdks[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 15:15:19 +0000 Subject: [PATCH 07/10] spotless: add commit to blame ignore revs file --- .git-blame-ignore-revs | 1 + 1 file changed, 1 insertion(+) diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index e2aa2c08bd1..7e4c105fd01 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -21,3 +21,4 @@ fcdaa3d6735d2382a44d066a6ce051a2c5e6469f 165a4da6a015267909adf7e7d5f3edc16a56dda6 c4e2bf407aa0b7a3d34605134791013ba8a2d376 9232c8f806b5eebeff35c09b1616b6598f3f5e73 +062fb57831db2e3e25afc1bd63cf8b09d46ffa67 From 20f322527d7f67f72c88c486b9e2f6011e6306c8 Mon Sep 17 00:00:00 2001 From: Anna Shipil Date: Mon, 19 Jan 2026 14:25:54 +0100 Subject: [PATCH 08/10] DEVX-714: updating gradle dependencies to use CommercetoolsTestUtils --- .../commercetools-graphql-api/build.gradle | 14 ++++++++++++++ commercetools/internal-docs/build.gradle | 6 +++--- .../src/test/java/example/ExamplesTest.java | 9 +++++---- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/commercetools/commercetools-graphql-api/build.gradle b/commercetools/commercetools-graphql-api/build.gradle index 5eb5acaec61..ce786a901f8 100644 --- a/commercetools/commercetools-graphql-api/build.gradle +++ b/commercetools/commercetools-graphql-api/build.gradle @@ -2,6 +2,7 @@ import com.commercetools.sdk.plugins.GraphQLPlugin plugins { id "com.netflix.dgs.codegen" version "8.1.0" + id 'java' } apply plugin:'com.netflix.dgs.codegen' @@ -13,6 +14,19 @@ java { } } +tasks.register('integrationTestJar', Jar) { + archiveClassifier = 'test-utils' + from sourceSets.integrationTest.output +} + +configurations { + integrationTestArtifacts +} + +artifacts { + integrationTestArtifacts integrationTestJar +} + dependencies { api project(':commercetools:commercetools-sdk-java-api') testImplementation project(':commercetools:commercetools-http-client') diff --git a/commercetools/internal-docs/build.gradle b/commercetools/internal-docs/build.gradle index df98815bb73..85d7ab8883e 100644 --- a/commercetools/internal-docs/build.gradle +++ b/commercetools/internal-docs/build.gradle @@ -1,4 +1,5 @@ dependencies { + testImplementation 'org.junit.jupiter:junit-jupiter:5.x.x' implementation project(":commercetools:commercetools-sdk-java-api") implementation project(":commercetools:commercetools-sdk-java-importapi") implementation project(":commercetools:commercetools-sdk-java-history") @@ -10,9 +11,8 @@ dependencies { implementation project(":commercetools:commercetools-graphql-api") implementation project(":commercetools:commercetools-monitoring-newrelic") implementation project(":commercetools:commercetools-monitoring-datadog") - - testImplementation ctsdkv1.client version ctsdkv1.version - implementation ctsdkv1.models version ctsdkv1.version + testImplementation project(path: ':commercetools:commercetools-graphql-api', configuration: 'integrationTestArtifacts') + testImplementation 'com.commercetools.sdk.jvm.core:commercetools-models:2.16.0' testImplementation project(":commercetools:commercetools-javanet-client") testImplementation commons.io version commons.io_version diff --git a/commercetools/internal-docs/src/test/java/example/ExamplesTest.java b/commercetools/internal-docs/src/test/java/example/ExamplesTest.java index 9b193ebcff0..0f2cb2a6765 100644 --- a/commercetools/internal-docs/src/test/java/example/ExamplesTest.java +++ b/commercetools/internal-docs/src/test/java/example/ExamplesTest.java @@ -35,6 +35,7 @@ import com.commercetools.api.models.product_type.AttributeLocalizedEnumValue; import com.commercetools.api.models.project.Project; import com.commercetools.api.models.tax_category.TaxCategoryPagedQueryResponse; +import com.commercetools.graphql.CommercetoolsTestUtils; import com.commercetools.graphql.api.GraphQL; import com.commercetools.graphql.api.GraphQLData; import com.commercetools.graphql.api.GraphQLRequestBuilder; @@ -44,7 +45,6 @@ import com.commercetools.http.netty.CtNettyHttpClient; import com.commercetools.http.okhttp4.CtOkHttp4Client; -import commercetools.utils.CommercetoolsTestUtils; import io.vrap.rmf.base.client.*; import io.vrap.rmf.base.client.http.ErrorMiddleware; import io.vrap.rmf.base.client.oauth2.ClientCredentials; @@ -388,11 +388,11 @@ public void queryAll() { public void graphQLAllOrders() { final ProjectApiRoot projectRoot = CommercetoolsTestUtils.getProjectApiRoot(); boolean limitNotReached = true; - int limit = 10; + int limit = 10, total_length = 0; String lastId = null; while (limitNotReached) { GraphQLRequestBuilder orderBuilder = GraphQL - .query("query getOrders() { " + "orders (limit: " + limit + ") {" + "results {id}}}") + .query("query getOrders { " + "orders (limit: " + limit + ") {" + "results {id}}}") .dataMapper(GraphQLData::getOrders); if (lastId != null) { @@ -403,9 +403,10 @@ public void graphQLAllOrders() { var result = projectRoot.graphql().query(orderBuilder.build()).executeBlocking(); var orders = result.getBody().getData().getResults(); var length = orders.size(); + total_length += length; lastId = result.getBody().getData().getResults().get(length - 1).getId(); - limitNotReached = length >= limit; + limitNotReached = total_length < limit; } } From 07add824a2112b8ffecb33224de920d461736313 Mon Sep 17 00:00:00 2001 From: Anna Shipil Date: Mon, 19 Jan 2026 15:58:16 +0100 Subject: [PATCH 09/10] DEVX-714: updating test example --- .../internal-docs/src/test/java/example/ExamplesTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/commercetools/internal-docs/src/test/java/example/ExamplesTest.java b/commercetools/internal-docs/src/test/java/example/ExamplesTest.java index 0f2cb2a6765..8e430f71c50 100644 --- a/commercetools/internal-docs/src/test/java/example/ExamplesTest.java +++ b/commercetools/internal-docs/src/test/java/example/ExamplesTest.java @@ -384,7 +384,6 @@ public void queryAll() { .join(); } - @Test public void graphQLAllOrders() { final ProjectApiRoot projectRoot = CommercetoolsTestUtils.getProjectApiRoot(); boolean limitNotReached = true; From 577b1cc16a0fa22d1610795fe5df7fd7b0b0f7b6 Mon Sep 17 00:00:00 2001 From: Jens Schulze Date: Tue, 20 Jan 2026 10:01:24 +0100 Subject: [PATCH 10/10] some adjustments --- .../src/test/java/example/ExamplesTest.java | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/commercetools/internal-docs/src/test/java/example/ExamplesTest.java b/commercetools/internal-docs/src/test/java/example/ExamplesTest.java index 8e430f71c50..b523e79d95a 100644 --- a/commercetools/internal-docs/src/test/java/example/ExamplesTest.java +++ b/commercetools/internal-docs/src/test/java/example/ExamplesTest.java @@ -28,6 +28,7 @@ import com.commercetools.api.models.common.LocalizedStringBuilder; import com.commercetools.api.models.customer.*; import com.commercetools.api.models.customer_group.*; +import com.commercetools.api.models.graph_ql.GraphQLVariablesMap; import com.commercetools.api.models.product.AttributesAccessor; import com.commercetools.api.models.product.ProductProjection; import com.commercetools.api.models.product.ProductVariant; @@ -390,22 +391,36 @@ public void graphQLAllOrders() { int limit = 10, total_length = 0; String lastId = null; while (limitNotReached) { - GraphQLRequestBuilder orderBuilder = GraphQL - .query("query getOrders { " + "orders (limit: " + limit + ") {" + "results {id}}}") - .dataMapper(GraphQLData::getOrders); - + GraphQLRequestBuilder orderBuilder = GraphQL.query(""" + query Orders($where: String, $limit: Int!) { + orders(where: $where, sort: "id asc", limit: $limit) { + results { + id + version + } + } + }""").dataMapper(GraphQLData::getOrders); + + var variables = GraphQLVariablesMap.builder().addValue("limit", limit); if (lastId != null) { - String whereQuery = "id > " + lastId; - orderBuilder.variables(builder -> builder.addValue("where", whereQuery)); + String whereQuery = "id > \"%s\"".formatted(lastId); + variables.addValue("where", whereQuery); } + orderBuilder.variables(variables.build()); var result = projectRoot.graphql().query(orderBuilder.build()).executeBlocking(); var orders = result.getBody().getData().getResults(); + + orders.forEach(order -> { + Assertions.assertThat(order.getId()).isNotNull(); + Assertions.assertThat(order.getVersion()).isNotNull(); + }); + var length = orders.size(); total_length += length; lastId = result.getBody().getData().getResults().get(length - 1).getId(); - limitNotReached = total_length < limit; + limitNotReached = length == limit; } }