From 2a8bd826aab726d3ab4b3f3bef8464122404a53b Mon Sep 17 00:00:00 2001 From: spetrunin Date: Wed, 25 Feb 2026 21:26:28 +0200 Subject: [PATCH 01/23] rename flush writer --- router/core/{flushwriter.go => subscription_response_writer.go} | 0 .../{flushwriter_test.go => subscription_response_writer_test.go} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename router/core/{flushwriter.go => subscription_response_writer.go} (100%) rename router/core/{flushwriter_test.go => subscription_response_writer_test.go} (100%) diff --git a/router/core/flushwriter.go b/router/core/subscription_response_writer.go similarity index 100% rename from router/core/flushwriter.go rename to router/core/subscription_response_writer.go diff --git a/router/core/flushwriter_test.go b/router/core/subscription_response_writer_test.go similarity index 100% rename from router/core/flushwriter_test.go rename to router/core/subscription_response_writer_test.go From 5a4af6add86b4fc681ed1bb1ce796f265c2a0f34 Mon Sep 17 00:00:00 2001 From: spetrunin Date: Thu, 5 Mar 2026 13:24:39 +0200 Subject: [PATCH 02/23] add defer support --- router-tests/defer_test.go | 59 ++++++++++++++ router-tests/testenv/testenv.go | 11 +++ router/core/defer_response_writer.go | 110 +++++++++++++++++++++++++++ router/core/graphql_handler.go | 61 +++++++++++++++ router/core/operation_processor.go | 1 + 5 files changed, 242 insertions(+) create mode 100644 router-tests/defer_test.go create mode 100644 router/core/defer_response_writer.go diff --git a/router-tests/defer_test.go b/router-tests/defer_test.go new file mode 100644 index 0000000000..4089128ee1 --- /dev/null +++ b/router-tests/defer_test.go @@ -0,0 +1,59 @@ +package integration + +import ( + "bytes" + "io" + "net/http" + "strings" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/wundergraph/cosmo/router-tests/testenv" + "github.com/wundergraph/cosmo/router/pkg/config" +) + +func TestDefer(t *testing.T) { + t.Parallel() + + testenv.Run(t, &testenv.Config{ + ModifyEngineExecutionConfiguration: func(engineExecutionConfiguration *config.EngineExecutionConfiguration) { + engineExecutionConfiguration.Debug.PrintIntermediateQueryPlans = true + engineExecutionConfiguration.Debug.PrintOperationTransformations = true + }, + }, func(t *testing.T, xEnv *testenv.Environment) { + t.Run("should return chunked multipart responses for deferred fields", func(t *testing.T) { + body := []byte(`{"query":"query { ... @defer { employee(id: 1) { id details { forename } } } }"}`) + + req := xEnv.MakeGraphQLDeferRequest(http.MethodPost, bytes.NewReader(body)) + res, err := xEnv.RouterClient.Do(req) + + require.NoError(t, err) + require.Equal(t, http.StatusOK, res.StatusCode) + + contentType := res.Header.Get("Content-Type") + t.Logf("Response Content-Type: %q\n", contentType) + t.Logf("Response Status Code: %d\n", res.StatusCode) + + data, err := io.ReadAll(res.Body) + require.NoError(t, err) + respStr := string(data) + t.Logf("Response Body: %s\n", respStr) + + require.True(t, strings.HasPrefix(contentType, "multipart/mixed")) + require.Contains(t, contentType, "deferSpec=20220824") + require.Contains(t, contentType, "boundary=\"graphql\"") + // res.Header.Get("Transfer-Encoding") is empty because we are not using the httptest.ResponseRecorder directly in the same way, + // the actual router streaming response will chunk it. We can omit this check for the integration test. + + // Verify the first chunk contains the initial data + require.Contains(t, respStr, `{"data":{},"hasNext":true}`) + + // Verify incremental chunks + require.Contains(t, respStr, `{"incremental":[{"data":{"employee":{"id":1,"details":{"forename":"Jens"}}},"path":[]}],"hasNext":false}`) + + // Verify it ends with the proper final boundary + require.True(t, strings.HasSuffix(respStr, "--graphql--\r\n")) + }) + }) +} diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index 93da790b38..06b438c868 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -2370,6 +2370,17 @@ func (e *Environment) MakeGraphQLMultipartRequest(method string, body io.Reader) return req } +func (e *Environment) MakeGraphQLDeferRequest(method string, body io.Reader) *http.Request { + req, err := http.NewRequest(method, e.GraphQLRequestURL(), body) + require.NoError(e.t, err) + + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Accept", "multipart/mixed;deferSpec=20220824, application/json") + req.Header.Set("Connection", "keep-alive") + + return req +} + func (e *Environment) GraphQLWebSocketSubscriptionURL() string { u, err := url.Parse(e.GraphQLRequestURL()) require.NoError(e.t, err) diff --git a/router/core/defer_response_writer.go b/router/core/defer_response_writer.go new file mode 100644 index 0000000000..5671143844 --- /dev/null +++ b/router/core/defer_response_writer.go @@ -0,0 +1,110 @@ +package core + +import ( + "bytes" + "context" + "io" + "net/http" + + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" +) + +type HttpDeferWriter struct { + ctx context.Context + writer io.Writer + flusher http.Flusher + buf *bytes.Buffer + firstMessage bool +} + +var _ resolve.DeferResponseWriter = (*HttpDeferWriter)(nil) + +func (f *HttpDeferWriter) Complete() { + if f.ctx.Err() != nil { + return + } + + _, _ = f.writer.Write([]byte("\r\n--" + multipartBoundary + "--\r\n")) + + // Flush before closing the writer to ensure all data is sent + f.flusher.Flush() +} + +func (f *HttpDeferWriter) Write(p []byte) (n int, err error) { + if err = f.ctx.Err(); err != nil { + return + } + + return f.buf.Write(p) +} + +func (f *HttpDeferWriter) Flush() (err error) { + if err = f.ctx.Err(); err != nil { + return err + } + + resp := f.buf.Bytes() + f.buf.Reset() + + flushBreak := "" + if f.firstMessage { + flushBreak = multipartStart + f.firstMessage = false + } + + // For @defer, each payload must be formatted as a multipart/mixed part. + // For Apollo, the payload itself is raw JSON (not wrapped in a `payload` field like subscriptions). + // \r\n--graphql\r\n + // Content-Type: application/json; charset=utf-8\r\n + // \r\n + // {"data": {...}, "incremental": [...], "hasNext": true} + // \r\n + flushBreak += "\r\nContent-Type: " + jsonContent + "\r\n\r\n" + + separation := "\r\n" + multipartStart + + // resp sometimes ends with newlines. We need to remove them + // to cleanly add the separation in the next step. + if bytes.HasSuffix(resp, []byte{'\n'}) { + resp = bytes.TrimRight(resp, "\n") + } + + full := flushBreak + string(resp) + separation + _, err = f.writer.Write([]byte(full)) + if err != nil { + return err + } + + // Flush before closing the writer to ensure all data is sent + f.flusher.Flush() + + return nil +} + +func GetDeferResponseWriter(ctx *resolve.Context, _ *http.Request, w http.ResponseWriter) (*resolve.Context, resolve.DeferResponseWriter, bool) { + flusher, ok := w.(http.Flusher) + if !ok { + return ctx, nil, false + } + + // Standard headers for Apollo Client @defer support + w.Header().Set("Content-Type", "multipart/mixed; deferSpec=20220824; boundary=\""+multipartBoundary+"\"") + w.Header().Set("Transfer-Encoding", "chunked") + w.Header().Set("Cache-Control", "no-cache") + w.Header().Set("Connection", "keep-alive") + // allow unbuffered responses, it's used when it's necessary just to pass response through + // setting this to “yes” will allow the response to be cached + w.Header().Set("X-Accel-Buffering", "no") + + flushWriter := &HttpDeferWriter{ + writer: w, + flusher: flusher, + buf: &bytes.Buffer{}, + firstMessage: true, + } + + flushWriter.ctx = ctx.Context() + + // execution engine heartbeat not needed for defer? + return ctx, flushWriter, true +} diff --git a/router/core/graphql_handler.go b/router/core/graphql_handler.go index bdd0f71767..4969f55257 100644 --- a/router/core/graphql_handler.go +++ b/router/core/graphql_handler.go @@ -323,6 +323,67 @@ func (h *GraphQLHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { }) return } + case *plan.DeferResponsePlan: + var ( + writer resolve.DeferResponseWriter + ok bool + ) + h.setDebugCacheHeaders(w, reqCtx.operation) + + defer propagateSubgraphErrors(resolveCtx) + resolveCtx, writer, ok = GetDeferResponseWriter(resolveCtx, r, w) + if !ok { + reqCtx.logger.Error("unable to get defer response writer", zap.Error(errCouldNotFlushResponse)) + trackFinalResponseError(r.Context(), errCouldNotFlushResponse) + writeRequestErrors(writeRequestErrorsParams{ + request: r, + writer: w, + statusCode: http.StatusInternalServerError, + requestErrors: graphqlerrors.RequestErrorsFromError(errCouldNotFlushResponse), + logger: reqCtx.logger, + headerPropagation: h.headerPropagation, + }) + return + } + + if !resolveCtx.ExecutionOptions.SkipLoader { + h.engineStats.ConnectionsInc() + defer h.engineStats.ConnectionsDec() + } + + _, err := h.executor.Resolver.ResolveGraphQLDeferResponse(resolveCtx, p.Response, writer) + reqCtx.dataSourceNames = getSubgraphNames(p.Response.Response.DataSources) + + if err != nil { + if errors.Is(err, context.Canceled) { + reqCtx.logger.Debug("context canceled: unable to resolve defer response", zap.Error(err)) + trackFinalResponseError(r.Context(), err) + return + } else if errors.Is(err, ErrUnauthorized) { + trackFinalResponseError(resolveCtx.Context(), err) + writeRequestErrors(writeRequestErrorsParams{ + request: r, + writer: w, + statusCode: http.StatusUnauthorized, + requestErrors: graphqlerrors.RequestErrorsFromError(err), + logger: reqCtx.logger, + headerPropagation: h.headerPropagation, + }) + return + } + + reqCtx.logger.Error("unable to resolve defer response", zap.Error(err)) + trackFinalResponseError(resolveCtx.Context(), err) + writeRequestErrors(writeRequestErrorsParams{ + request: r, + writer: w, + statusCode: http.StatusInternalServerError, + requestErrors: graphqlerrors.RequestErrorsFromError(errCouldNotResolveResponse), + logger: reqCtx.logger, + headerPropagation: h.headerPropagation, + }) + return + } default: reqCtx.logger.Error("unsupported plan kind") trackFinalResponseError(resolveCtx.Context(), errOperationPlanUnsupported) diff --git a/router/core/operation_processor.go b/router/core/operation_processor.go index a9c5a9a474..b97cb7be91 100644 --- a/router/core/operation_processor.go +++ b/router/core/operation_processor.go @@ -1496,6 +1496,7 @@ func createParseKit(i int, options *parseKitOptions) *parseKit { astnormalization.WithInlineFragmentSpreads(), astnormalization.WithRemoveFragmentDefinitions(), astnormalization.WithRemoveUnusedVariables(), + astnormalization.WithInlineDefer(), ), variablesNormalizer: astnormalization.NewVariablesNormalizer(), variablesRemapper: astnormalization.NewVariablesMapper(), From cc2c003cf489086e385b98bd765fc7add42e0445 Mon Sep 17 00:00:00 2001 From: spetrunin Date: Thu, 26 Mar 2026 18:42:04 +0200 Subject: [PATCH 03/23] add defer test suite --- router-tests/defer_test.go | 263 ++- router-tests/testdata/queries_defer/README.md | 53 + ...loyeeDetails_defer_01_single_defer.graphql | 11 + .../employeeDetails_defer_01_single_defer.txt | 13 + ...er_02_single_defer_between_regular.graphql | 12 + ..._defer_02_single_defer_between_regular.txt | 13 + ..._defer_03_multiple_fields_deferred.graphql | 12 + ...ails_defer_03_multiple_fields_deferred.txt | 13 + ...tails_defer_04_all_fields_deferred.graphql | 12 + ...eeDetails_defer_04_all_fields_deferred.txt | 13 + ...loyeeDetails_defer_05_nested_defer.graphql | 14 + .../employeeDetails_defer_05_nested_defer.txt | 18 + ...ls_defer_06_nested_defer_variation.graphql | 14 + ...etails_defer_06_nested_defer_variation.txt | 18 + ...eeDetails_defer_07_parallel_defers.graphql | 12 + ...ployeeDetails_defer_07_parallel_defers.txt | 18 + ...tails_defer_08_defer_nested_object.graphql | 12 + ...eeDetails_defer_08_defer_nested_object.txt | 13 + ...r_09_duplicated_field_across_defer.graphql | 12 + ...defer_09_duplicated_field_across_defer.txt | 13 + ...etails_defer_10_extensive_parallel.graphql | 14 + ...yeeDetails_defer_10_extensive_parallel.txt | 28 + .../employeeDetails_original.json | 1724 +++++++++++++++++ .../employee_defer_01_single_defer.graphql | 11 + .../employee_defer_01_single_defer.txt | 13 + ...er_02_single_defer_between_regular.graphql | 12 + ..._defer_02_single_defer_between_regular.txt | 13 + ..._defer_03_multiple_fields_deferred.graphql | 14 + ...oyee_defer_03_multiple_fields_deferred.txt | 13 + ...loyee_defer_04_all_fields_deferred.graphql | 14 + .../employee_defer_04_all_fields_deferred.txt | 13 + .../employee_defer_05_nested_defer.graphql | 14 + .../employee_defer_05_nested_defer.txt | 18 + ...ee_defer_06_nested_defer_variation.graphql | 14 + ...ployee_defer_06_nested_defer_variation.txt | 18 + .../employee_defer_07_parallel_defers.graphql | 12 + .../employee_defer_07_parallel_defers.txt | 18 + ...loyee_defer_08_defer_nested_object.graphql | 11 + .../employee_defer_08_defer_nested_object.txt | 18 + ...r_09_duplicated_field_across_defer.graphql | 15 + ...defer_09_duplicated_field_across_defer.txt | 13 + ...ployee_defer_10_extensive_parallel.graphql | 14 + .../employee_defer_10_extensive_parallel.txt | 43 + .../queries_defer/employee_original.json | 52 + .../employees_defer_01_single_defer.graphql | 15 + .../employees_defer_01_single_defer.txt | 13 + ...er_02_single_defer_between_regular.graphql | 14 + ..._defer_02_single_defer_between_regular.txt | 13 + ..._defer_03_multiple_fields_deferred.graphql | 14 + ...yees_defer_03_multiple_fields_deferred.txt | 13 + ...oyees_defer_04_all_fields_deferred.graphql | 16 + ...employees_defer_04_all_fields_deferred.txt | 13 + .../employees_defer_05_nested_defer.graphql | 16 + .../employees_defer_05_nested_defer.txt | 18 + ...es_defer_06_nested_defer_variation.graphql | 16 + ...loyees_defer_06_nested_defer_variation.txt | 18 + ...employees_defer_07_parallel_defers.graphql | 14 + .../employees_defer_07_parallel_defers.txt | 18 + ...oyees_defer_08_defer_nested_object.graphql | 16 + ...employees_defer_08_defer_nested_object.txt | 13 + ...r_09_duplicated_field_across_defer.graphql | 14 + ...defer_09_duplicated_field_across_defer.txt | 13 + ...loyees_defer_10_extensive_parallel.graphql | 18 + .../employees_defer_10_extensive_parallel.txt | 43 + ...efer_11_fragment_around_and_inside.graphql | 15 + ...es_defer_11_fragment_around_and_inside.txt | 18 + ...oyees_defer_12_fragment_body_defer.graphql | 15 + ...employees_defer_12_fragment_body_defer.txt | 13 + ...ees_defer_13_fragment_spread_defer.graphql | 17 + ...ployees_defer_13_fragment_spread_defer.txt | 13 + .../queries_defer/employees_original.json | 652 +++++++ ...esNoCriteria_defer_01_single_defer.graphql | 5 + ...loyeesNoCriteria_defer_01_single_defer.txt | 13 + ...er_02_single_defer_between_regular.graphql | 7 + ..._defer_02_single_defer_between_regular.txt | 13 + ..._defer_03_multiple_fields_deferred.graphql | 7 + ...eria_defer_03_multiple_fields_deferred.txt | 13 + ...teria_defer_04_all_fields_deferred.graphql | 7 + ...oCriteria_defer_04_all_fields_deferred.txt | 13 + ...esNoCriteria_defer_05_nested_defer.graphql | 7 + ...loyeesNoCriteria_defer_05_nested_defer.txt | 18 + ...ia_defer_06_nested_defer_variation.graphql | 7 + ...iteria_defer_06_nested_defer_variation.txt | 18 + ...oCriteria_defer_07_parallel_defers.graphql | 5 + ...eesNoCriteria_defer_07_parallel_defers.txt | 13 + ...teria_defer_08_defer_nested_object.graphql | 5 + ...oCriteria_defer_08_defer_nested_object.txt | 13 + ...r_09_duplicated_field_across_defer.graphql | 6 + ...defer_09_duplicated_field_across_defer.txt | 13 + ...iteria_defer_10_extensive_parallel.graphql | 7 + ...NoCriteria_defer_10_extensive_parallel.txt | 18 + .../findEmployeesNoCriteria_original.json | 56 + ...indEmployees_defer_01_single_defer.graphql | 16 + .../findEmployees_defer_01_single_defer.txt | 13 + ...er_02_single_defer_between_regular.graphql | 16 + ..._defer_02_single_defer_between_regular.txt | 13 + ..._defer_03_multiple_fields_deferred.graphql | 16 + ...yees_defer_03_multiple_fields_deferred.txt | 13 + ...oyees_defer_04_all_fields_deferred.graphql | 16 + ...Employees_defer_04_all_fields_deferred.txt | 13 + ...indEmployees_defer_05_nested_defer.graphql | 18 + .../findEmployees_defer_05_nested_defer.txt | 18 + ...es_defer_06_nested_defer_variation.graphql | 18 + ...loyees_defer_06_nested_defer_variation.txt | 18 + ...Employees_defer_07_parallel_defers.graphql | 18 + ...findEmployees_defer_07_parallel_defers.txt | 18 + ...oyees_defer_08_defer_nested_object.graphql | 14 + ...Employees_defer_08_defer_nested_object.txt | 13 + ...r_09_duplicated_field_across_defer.graphql | 15 + ...defer_09_duplicated_field_across_defer.txt | 13 + ...loyees_defer_10_extensive_parallel.graphql | 22 + ...dEmployees_defer_10_extensive_parallel.txt | 28 + .../queries_defer/findEmployees_original.json | 51 + .../full_defer_01_single_defer.graphql | 17 + .../full_defer_01_single_defer.txt | 13 + ...er_02_single_defer_between_regular.graphql | 17 + ..._defer_02_single_defer_between_regular.txt | 13 + ..._defer_03_multiple_fields_deferred.graphql | 17 + ...full_defer_03_multiple_fields_deferred.txt | 13 + .../full_defer_04_all_fields_deferred.graphql | 17 + .../full_defer_04_all_fields_deferred.txt | 13 + .../full_defer_05_nested_defer.graphql | 15 + .../full_defer_05_nested_defer.txt | 18 + ...ll_defer_06_nested_defer_variation.graphql | 19 + .../full_defer_06_nested_defer_variation.txt | 18 + .../full_defer_07_parallel_defers.graphql | 17 + .../full_defer_07_parallel_defers.txt | 18 + .../full_defer_08_defer_nested_object.graphql | 21 + .../full_defer_08_defer_nested_object.txt | 18 + ...r_09_duplicated_field_across_defer.graphql | 19 + ...defer_09_duplicated_field_across_defer.txt | 13 + .../full_defer_10_extensive_parallel.graphql | 21 + .../full_defer_10_extensive_parallel.txt | 38 + ...efer_11_fragment_around_and_inside.graphql | 18 + ...ll_defer_11_fragment_around_and_inside.txt | 18 + .../full_defer_12_fragment_body_defer.graphql | 18 + .../full_defer_12_fragment_body_defer.txt | 13 + ...ull_defer_13_fragment_spread_defer.graphql | 18 + .../full_defer_13_fragment_spread_defer.txt | 13 + .../testdata/queries_defer/full_original.json | 730 +++++++ .../products_defer_01_single_defer.graphql | 14 + .../products_defer_01_single_defer.txt | 6 + ...er_02_single_defer_between_regular.graphql | 13 + ..._defer_02_single_defer_between_regular.txt | 6 + ..._defer_03_multiple_fields_deferred.graphql | 15 + ...ucts_defer_03_multiple_fields_deferred.txt | 6 + ...ducts_defer_04_all_fields_deferred.graphql | 14 + .../products_defer_04_all_fields_deferred.txt | 6 + .../products_defer_05_nested_defer.graphql | 17 + .../products_defer_05_nested_defer.txt | 6 + ...ts_defer_06_nested_defer_variation.graphql | 16 + ...oducts_defer_06_nested_defer_variation.txt | 6 + .../products_defer_07_parallel_defers.graphql | 15 + .../products_defer_07_parallel_defers.txt | 6 + ...ducts_defer_08_defer_nested_object.graphql | 18 + .../products_defer_08_defer_nested_object.txt | 6 + ...r_09_duplicated_field_across_defer.graphql | 15 + ...defer_09_duplicated_field_across_defer.txt | 6 + ...oducts_defer_10_extensive_parallel.graphql | 26 + .../products_defer_10_extensive_parallel.txt | 6 + ...efer_11_fragment_around_and_inside.graphql | 18 + ...ts_defer_11_fragment_around_and_inside.txt | 6 + ...ducts_defer_12_fragment_body_defer.graphql | 18 + .../products_defer_12_fragment_body_defer.txt | 6 + ...cts_defer_13_fragment_spread_defer.graphql | 25 + ...roducts_defer_13_fragment_spread_defer.txt | 6 + .../queries_defer/products_original.json | 55 + .../queries_defer/queries_with_errors.txt | 23 + ...ferent_depth_defer_01_single_defer.graphql | 15 + ..._different_depth_defer_01_single_defer.txt | 13 + ...er_02_single_defer_between_regular.graphql | 15 + ..._defer_02_single_defer_between_regular.txt | 13 + ..._defer_03_multiple_fields_deferred.graphql | 15 + ...epth_defer_03_multiple_fields_deferred.txt | 18 + ...depth_defer_04_all_fields_deferred.graphql | 15 + ...ent_depth_defer_04_all_fields_deferred.txt | 13 + ...ferent_depth_defer_05_nested_defer.graphql | 17 + ..._different_depth_defer_05_nested_defer.txt | 18 + ...th_defer_06_nested_defer_variation.graphql | 15 + ..._depth_defer_06_nested_defer_variation.txt | 13 + ...ent_depth_defer_07_parallel_defers.graphql | 16 + ...fferent_depth_defer_07_parallel_defers.txt | 23 + ...depth_defer_08_defer_nested_object.graphql | 13 + ...ent_depth_defer_08_defer_nested_object.txt | 12 + ...r_09_duplicated_field_across_defer.graphql | 12 + ...defer_09_duplicated_field_across_defer.txt | 12 + ..._depth_defer_10_extensive_parallel.graphql | 18 + ...rent_depth_defer_10_extensive_parallel.txt | 37 + ...efer_11_fragment_around_and_inside.graphql | 15 + ...th_defer_11_fragment_around_and_inside.txt | 17 + ...depth_defer_12_fragment_body_defer.graphql | 15 + ...ent_depth_defer_12_fragment_body_defer.txt | 12 + ...pth_defer_13_fragment_spread_defer.graphql | 15 + ...t_depth_defer_13_fragment_spread_defer.txt | 13 + .../requires_different_depth_original.json | 21 + ...equires_mood_defer_01_single_defer.graphql | 13 + .../requires_mood_defer_01_single_defer.txt | 13 + ...er_02_single_defer_between_regular.graphql | 14 + ..._defer_02_single_defer_between_regular.txt | 13 + ..._defer_03_multiple_fields_deferred.graphql | 14 + ...mood_defer_03_multiple_fields_deferred.txt | 18 + ..._mood_defer_04_all_fields_deferred.graphql | 13 + ...ires_mood_defer_04_all_fields_deferred.txt | 13 + ...equires_mood_defer_05_nested_defer.graphql | 15 + .../requires_mood_defer_05_nested_defer.txt | 18 + ...od_defer_06_nested_defer_variation.graphql | 14 + ...s_mood_defer_06_nested_defer_variation.txt | 13 + ...ires_mood_defer_07_parallel_defers.graphql | 20 + ...requires_mood_defer_07_parallel_defers.txt | 18 + ..._mood_defer_08_defer_nested_object.graphql | 12 + ...ires_mood_defer_08_defer_nested_object.txt | 12 + ...r_09_duplicated_field_across_defer.graphql | 11 + ...defer_09_duplicated_field_across_defer.txt | 12 + ...s_mood_defer_10_extensive_parallel.graphql | 16 + ...uires_mood_defer_10_extensive_parallel.txt | 32 + ...efer_11_fragment_around_and_inside.graphql | 14 + ...od_defer_11_fragment_around_and_inside.txt | 17 + ..._mood_defer_12_fragment_body_defer.graphql | 14 + ...ires_mood_defer_12_fragment_body_defer.txt | 12 + ...ood_defer_13_fragment_spread_defer.graphql | 13 + ...es_mood_defer_13_fragment_spread_defer.txt | 13 + .../queries_defer/requires_mood_original.json | 15 + 222 files changed, 6768 insertions(+), 31 deletions(-) create mode 100644 router-tests/testdata/queries_defer/README.md create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.graphql create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.graphql create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.txt create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.graphql create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.txt create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.graphql create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.txt create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.graphql create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.txt create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.graphql create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.txt create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.graphql create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.txt create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.graphql create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.txt create mode 100644 router-tests/testdata/queries_defer/employeeDetails_original.json create mode 100644 router-tests/testdata/queries_defer/employee_defer_01_single_defer.graphql create mode 100644 router-tests/testdata/queries_defer/employee_defer_01_single_defer.txt create mode 100644 router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.graphql create mode 100644 router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt create mode 100644 router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/employee_defer_05_nested_defer.graphql create mode 100644 router-tests/testdata/queries_defer/employee_defer_05_nested_defer.txt create mode 100644 router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.graphql create mode 100644 router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.txt create mode 100644 router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.graphql create mode 100644 router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.txt create mode 100644 router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.graphql create mode 100644 router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.txt create mode 100644 router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.graphql create mode 100644 router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.txt create mode 100644 router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.graphql create mode 100644 router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.txt create mode 100644 router-tests/testdata/queries_defer/employee_original.json create mode 100644 router-tests/testdata/queries_defer/employees_defer_01_single_defer.graphql create mode 100644 router-tests/testdata/queries_defer/employees_defer_01_single_defer.txt create mode 100644 router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.graphql create mode 100644 router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.txt create mode 100644 router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/employees_defer_05_nested_defer.graphql create mode 100644 router-tests/testdata/queries_defer/employees_defer_05_nested_defer.txt create mode 100644 router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.graphql create mode 100644 router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.txt create mode 100644 router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.graphql create mode 100644 router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.txt create mode 100644 router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.graphql create mode 100644 router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.txt create mode 100644 router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.graphql create mode 100644 router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.txt create mode 100644 router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.graphql create mode 100644 router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.txt create mode 100644 router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.graphql create mode 100644 router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.txt create mode 100644 router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.graphql create mode 100644 router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.txt create mode 100644 router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.graphql create mode 100644 router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.txt create mode 100644 router-tests/testdata/queries_defer/employees_original.json create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.txt create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.txt create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.txt create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.txt create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.txt create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.txt create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.txt create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.txt create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_original.json create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer.txt create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.txt create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer.txt create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.txt create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers.txt create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.txt create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.txt create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.txt create mode 100644 router-tests/testdata/queries_defer/findEmployees_original.json create mode 100644 router-tests/testdata/queries_defer/full_defer_01_single_defer.graphql create mode 100644 router-tests/testdata/queries_defer/full_defer_01_single_defer.txt create mode 100644 router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.graphql create mode 100644 router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.txt create mode 100644 router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/full_defer_05_nested_defer.graphql create mode 100644 router-tests/testdata/queries_defer/full_defer_05_nested_defer.txt create mode 100644 router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.graphql create mode 100644 router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.txt create mode 100644 router-tests/testdata/queries_defer/full_defer_07_parallel_defers.graphql create mode 100644 router-tests/testdata/queries_defer/full_defer_07_parallel_defers.txt create mode 100644 router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.graphql create mode 100644 router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.txt create mode 100644 router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.graphql create mode 100644 router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.txt create mode 100644 router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.graphql create mode 100644 router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.txt create mode 100644 router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql create mode 100644 router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt create mode 100644 router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql create mode 100644 router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.txt create mode 100644 router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql create mode 100644 router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt create mode 100644 router-tests/testdata/queries_defer/full_original.json create mode 100644 router-tests/testdata/queries_defer/products_defer_01_single_defer.graphql create mode 100644 router-tests/testdata/queries_defer/products_defer_01_single_defer.txt create mode 100644 router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql create mode 100644 router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt create mode 100644 router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/products_defer_05_nested_defer.graphql create mode 100644 router-tests/testdata/queries_defer/products_defer_05_nested_defer.txt create mode 100644 router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql create mode 100644 router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.txt create mode 100644 router-tests/testdata/queries_defer/products_defer_07_parallel_defers.graphql create mode 100644 router-tests/testdata/queries_defer/products_defer_07_parallel_defers.txt create mode 100644 router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.graphql create mode 100644 router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.txt create mode 100644 router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql create mode 100644 router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.txt create mode 100644 router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.graphql create mode 100644 router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.txt create mode 100644 router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql create mode 100644 router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt create mode 100644 router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql create mode 100644 router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.txt create mode 100644 router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql create mode 100644 router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt create mode 100644 router-tests/testdata/queries_defer/products_original.json create mode 100644 router-tests/testdata/queries_defer/queries_with_errors.txt create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.graphql create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.txt create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.graphql create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.txt create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.graphql create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.txt create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.graphql create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.graphql create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.graphql create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.txt create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.graphql create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.txt create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.graphql create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.graphql create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.graphql create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.txt create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.graphql create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.txt create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_original.json create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.graphql create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.txt create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.graphql create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.txt create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.graphql create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.txt create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer.graphql create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer.txt create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.graphql create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.txt create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.graphql create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.txt create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.graphql create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.txt create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.graphql create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.txt create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.graphql create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.graphql create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.txt create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.graphql create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.txt create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.graphql create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.txt create mode 100644 router-tests/testdata/queries_defer/requires_mood_original.json diff --git a/router-tests/defer_test.go b/router-tests/defer_test.go index 4089128ee1..5b21ab468c 100644 --- a/router-tests/defer_test.go +++ b/router-tests/defer_test.go @@ -2,58 +2,259 @@ package integration import ( "bytes" + "encoding/json" + "fmt" "io" "net/http" + "os" + "path/filepath" "strings" "testing" + "github.com/buger/jsonparser" + "github.com/sebdah/goldie/v2" "github.com/stretchr/testify/require" "github.com/wundergraph/cosmo/router-tests/testenv" "github.com/wundergraph/cosmo/router/pkg/config" ) -func TestDefer(t *testing.T) { +func TestDeferTestdataQueries(t *testing.T) { t.Parallel() - testenv.Run(t, &testenv.Config{ - ModifyEngineExecutionConfiguration: func(engineExecutionConfiguration *config.EngineExecutionConfiguration) { - engineExecutionConfiguration.Debug.PrintIntermediateQueryPlans = true - engineExecutionConfiguration.Debug.PrintOperationTransformations = true - }, - }, func(t *testing.T, xEnv *testenv.Environment) { - t.Run("should return chunked multipart responses for deferred fields", func(t *testing.T) { - body := []byte(`{"query":"query { ... @defer { employee(id: 1) { id details { forename } } } }"}`) + testDir := filepath.Join("testdata", "queries_defer") + entries, err := os.ReadDir(testDir) + require.NoError(t, err) - req := xEnv.MakeGraphQLDeferRequest(http.MethodPost, bytes.NewReader(body)) - res, err := xEnv.RouterClient.Do(req) + for _, entry := range entries { + fileName := entry.Name() + ext := filepath.Ext(fileName) + name := strings.TrimSuffix(fileName, ext) - require.NoError(t, err) - require.Equal(t, http.StatusOK, res.StatusCode) + if ext != ".graphql" { + continue + } - contentType := res.Header.Get("Content-Type") - t.Logf("Response Content-Type: %q\n", contentType) - t.Logf("Response Status Code: %d\n", res.StatusCode) + t.Run(name, func(t *testing.T) { + t.Parallel() - data, err := io.ReadAll(res.Body) - require.NoError(t, err) - respStr := string(data) - t.Logf("Response Body: %s\n", respStr) + // "full_defer_01_single_defer" → source = "full" + source, _, _ := strings.Cut(name, "_defer_") - require.True(t, strings.HasPrefix(contentType, "multipart/mixed")) - require.Contains(t, contentType, "deferSpec=20220824") - require.Contains(t, contentType, "boundary=\"graphql\"") - // res.Header.Get("Transfer-Encoding") is empty because we are not using the httptest.ResponseRecorder directly in the same way, - // the actual router streaming response will chunk it. We can omit this check for the integration test. + gMultipart := goldie.New( + t, + goldie.WithFixtureDir("testdata/queries_defer"), + goldie.WithNameSuffix(".txt"), + goldie.WithDiffEngine(goldie.ClassicDiff), + ) + gFull := goldie.New( + t, + goldie.WithFixtureDir("testdata/queries_defer"), + goldie.WithNameSuffix("_original.json"), + goldie.WithDiffEngine(goldie.ClassicDiff), + ) - // Verify the first chunk contains the initial data - require.Contains(t, respStr, `{"data":{},"hasNext":true}`) + testenv.Run(t, &testenv.Config{ + ModifyEngineExecutionConfiguration: func(cfg *config.EngineExecutionConfiguration) { + cfg.Debug.PrintIntermediateQueryPlans = true + }, + }, func(t *testing.T, xEnv *testenv.Environment) { + queryData, err := os.ReadFile(filepath.Join(testDir, fmt.Sprintf("%s.graphql", name))) + require.NoError(t, err) - // Verify incremental chunks - require.Contains(t, respStr, `{"incremental":[{"data":{"employee":{"id":1,"details":{"forename":"Jens"}}},"path":[]}],"hasNext":false}`) + payload := map[string]any{"query": string(queryData)} + payloadData, err := json.Marshal(payload) + require.NoError(t, err) - // Verify it ends with the proper final boundary - require.True(t, strings.HasSuffix(respStr, "--graphql--\r\n")) + req := xEnv.MakeGraphQLDeferRequest(http.MethodPost, bytes.NewReader(payloadData)) + res, err := xEnv.RouterClient.Do(req) + require.NoError(t, err) + defer func() { require.NoError(t, res.Body.Close()) }() + + require.Equal(t, http.StatusOK, res.StatusCode) + require.True(t, strings.HasPrefix(res.Header.Get("Content-Type"), "multipart/mixed"), + "expected multipart/mixed response, got: %s", res.Header.Get("Content-Type")) + + body, err := io.ReadAll(res.Body) + require.NoError(t, err) + + t.Run("multipart body", func(t *testing.T) { + // Assert raw multipart body. + gMultipart.Assert(t, name, body) + }) + + t.Run("full response", func(t *testing.T) { + // Reconstruct full response from chunks and assert against original. + reconstructed, err := reconstructDeferResponse(body) + require.NoError(t, err) + + actual := normalizeJSON(t, reconstructed) + gFull.Assert(t, source, actual) + }) + }) }) + } +} + +// reconstructDeferResponse parses a multipart/mixed defer body, merges all +// incremental patches onto the initial data using jsonparser, and returns +// the complete JSON response (without transport fields like hasNext). +func reconstructDeferResponse(body []byte) ([]byte, error) { + parts, err := parseMultipartParts(body) + if err != nil { + return nil, err + } + if len(parts) == 0 { + return nil, fmt.Errorf("no parts in multipart response") + } + + result := parts[0] + + for _, part := range parts[1:] { + var innerErr error + _, err = jsonparser.ArrayEach(part, func(item []byte, _ jsonparser.ValueType, _ int, _ error) { + if innerErr != nil { + return + } + + patchData, dataType, _, e := jsonparser.Get(item, "data") + if e != nil || dataType == jsonparser.NotExist { + return + } + + // Build path keys: prepend "data", convert array indices to "[N]". + pathKeys := []string{"data"} + _, e = jsonparser.ArrayEach(item, func(seg []byte, segType jsonparser.ValueType, _ int, _ error) { + if segType == jsonparser.Number { + pathKeys = append(pathKeys, "["+string(seg)+"]") + } else { + pathKeys = append(pathKeys, string(seg)) + } + }, "path") + if e != nil { + innerErr = fmt.Errorf("parse path: %w", e) + return + } + + result, innerErr = mergeJSONAtPath(result, patchData, pathKeys) + if innerErr != nil { + return + } + + // Collect errors from incremental items into root errors. + patchErrors, errType, _, _ := jsonparser.Get(item, "errors") + if errType == jsonparser.Array { + existing, existingType, _, _ := jsonparser.Get(result, "errors") + if existingType == jsonparser.NotExist || existingType == jsonparser.Null { + result, innerErr = jsonparser.Set(result, patchErrors, "errors") + } else { + merged := appendJSONArrays(existing, patchErrors) + result, innerErr = jsonparser.Set(result, merged, "errors") + } + } + }, "incremental") + if err != nil { + return nil, fmt.Errorf("parse incremental: %w", err) + } + if innerErr != nil { + return nil, innerErr + } + } + + // Remove transport-only field. + result = jsonparser.Delete(result, "hasNext") + + return result, nil +} + +// mergeJSONAtPath navigates to pathKeys inside result and deep-merges patch there. +func mergeJSONAtPath(result, patch []byte, pathKeys []string) ([]byte, error) { + if len(pathKeys) == 0 { + return deepMergeJSON(result, patch) + } + existing, existingType, _, err := jsonparser.Get(result, pathKeys...) + if err != nil || existingType == jsonparser.NotExist { + return jsonparser.Set(result, patch, pathKeys...) + } + if existingType != jsonparser.Object { + return jsonparser.Set(result, patch, pathKeys...) + } + merged, err := deepMergeJSON(existing, patch) + if err != nil { + return nil, err + } + return jsonparser.Set(result, merged, pathKeys...) +} + +// deepMergeJSON merges src object into dst object recursively. +// For object values present in both, it recurses; otherwise src wins. +func deepMergeJSON(dst, src []byte) ([]byte, error) { + result := dst + var innerErr error + err := jsonparser.ObjectEach(src, func(key, value []byte, dataType jsonparser.ValueType, _ int) error { + if innerErr != nil { + return nil + } + k := string(key) + if dataType == jsonparser.Object { + existingVal, existingType, _, _ := jsonparser.Get(result, k) + if existingType == jsonparser.Object { + merged, e := deepMergeJSON(existingVal, value) + if e != nil { + innerErr = e + return nil + } + result, innerErr = jsonparser.Set(result, merged, k) + return nil + } + } + result, innerErr = jsonparser.Set(result, value, k) + return nil }) + if err != nil { + return nil, err + } + return result, innerErr +} + +// appendJSONArrays concatenates two JSON arrays: [...a, ...b]. +func appendJSONArrays(a, b []byte) []byte { + aInner := bytes.TrimSpace(a[1 : len(a)-1]) + bInner := bytes.TrimSpace(b[1 : len(b)-1]) + if len(aInner) == 0 { + return b + } + if len(bInner) == 0 { + return a + } + out := make([]byte, 0, 1+len(aInner)+1+len(bInner)+1) + out = append(out, '[') + out = append(out, aInner...) + out = append(out, ',') + out = append(out, bInner...) + out = append(out, ']') + return out +} + +// parseMultipartParts splits a multipart/mixed body on the --graphql boundary +// and returns the raw JSON bytes of each part. +func parseMultipartParts(body []byte) ([][]byte, error) { + boundary := []byte("\r\n--graphql") + parts := bytes.Split(body, boundary) + var result [][]byte + for _, part := range parts { + if bytes.HasPrefix(part, []byte("--")) { + continue + } + _, jsonBody, found := bytes.Cut(part, []byte("\r\n\r\n")) + if !found { + continue + } + jsonBody = bytes.TrimSpace(jsonBody) + if len(jsonBody) == 0 { + continue + } + result = append(result, jsonBody) + } + return result, nil } diff --git a/router-tests/testdata/queries_defer/README.md b/router-tests/testdata/queries_defer/README.md new file mode 100644 index 0000000000..2c2e2aa3d9 --- /dev/null +++ b/router-tests/testdata/queries_defer/README.md @@ -0,0 +1,53 @@ +# Defer Query Test Fixtures + +This directory contains GraphQL query variants that exercise `@defer` support, +along with their golden response fixtures (`.txt`). + +## Naming Convention + +``` +{source}_{number}_{description}.graphql +``` + +`source` is the base query name (matches a file in `../queries/`). +`number` is the two-digit variation index (01–13). +`description` is a short slug. + +## Variation Types + +### Core Variations (01–10, applied to all source queries) + +| # | Name | What it tests | +|---|------|--------------| +| 01 | `single_defer` | One field deferred, rest immediate | +| 02 | `single_defer_between_regular` | Deferred fragment sandwiched between non-deferred fields | +| 03 | `multiple_fields_deferred` | Multiple fields inside a single `... @defer` | +| 04 | `all_fields_deferred` | Everything deferred; initial response is `{"data":{},"hasNext":true}` | +| 05 | `nested_defer` | Two levels of nested `... @defer { ... @defer { } }` | +| 06 | `nested_defer_variation` | Outer defer has a regular field plus an inner defer | +| 07 | `parallel_defers` | Two sibling `... @defer` fragments at the same level | +| 08 | `defer_nested_object` | An entire nested object (typically from a different subgraph) is deferred | +| 09 | `duplicated_field_across_defer` | Same field appears in both deferred and non-deferred selection | +| 10 | `extensive_parallel` | Every individual field group in its own `... @defer` inside a top-level defer | + +### Fragment Variations (11–13) + +Applied to: `employees`, `full`, `products`, `requires_mood`, `requires_different_depth`. + +For queries that have inline fragments (`... on SomeType { }`) but no named fragment +definitions, inline fragments are first promoted to named fragment definitions. + +| # | Name | What it tests | +|---|------|--------------| +| 11 | `fragment_around_and_inside` | `... @defer { ...Frag }` AND inside the fragment `... @defer { field }` | +| 12 | `fragment_body_defer` | Fragment spread used normally; fragment body contains `... @defer { fields }` | +| 13 | `fragment_spread_defer` | `...FragmentName @defer` — defer directive on the spread itself | + +## Regenerating Fixtures + +```bash +cd router-tests +go test -v -run TestDeferTestdataQueries -update ./... +``` + +Fixtures are deterministic because defer resolution is sequential in this router implementation. diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.graphql new file mode 100644 index 0000000000..9eaf7555d4 --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.graphql @@ -0,0 +1,11 @@ +query { + employees { + id + ... @defer { + hobbies { + __typename + employees { id details { forename } } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt new file mode 100644 index 0000000000..62f3114303 --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":7},{"id":8},{"id":10},{"id":11},{"id":12}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.graphql new file mode 100644 index 0000000000..15b158ad1e --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.graphql @@ -0,0 +1,12 @@ +query { + employees { + id + ... @defer { + hobbies { + __typename + employees { id details { forename } } + } + } + notes + } +} diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.txt new file mode 100644 index 0000000000..7243e06138 --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products"},{"id":2,"notes":"Dustin notes resolved by products"},{"id":3,"notes":"Stefan notes resolved by products"},{"id":4,"notes":"Björn notes resolved by products"},{"id":5,"notes":"Sergiy notes resolved by products"},{"id":7,"notes":"Suvij notes resolved by products"},{"id":8,"notes":"Nithin notes resolved by products"},{"id":10,"notes":"Eelco notes resolved by products"},{"id":11,"notes":"Alexandra notes resolved by products"},{"id":12,"notes":"David notes resolved by products"}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.graphql new file mode 100644 index 0000000000..3446320b66 --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.graphql @@ -0,0 +1,12 @@ +query { + employees { + id + ... @defer { + notes + hobbies { + __typename + employees { id details { forename } } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.txt new file mode 100644 index 0000000000..b10c5551b0 --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":7},{"id":8},{"id":10},{"id":11},{"id":12}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"notes":"Jens notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"notes":"Dustin notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"notes":"Stefan notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"notes":"Björn notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"notes":"Sergiy notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"notes":"Suvij notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"notes":"Nithin notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"notes":"Eelco notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"notes":"Alexandra notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"notes":"David notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.graphql new file mode 100644 index 0000000000..e1269e5e92 --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.graphql @@ -0,0 +1,12 @@ +query { + ... @defer { + employees { + id + notes + hobbies { + __typename + employees { id details { forename } } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.txt new file mode 100644 index 0000000000..a0745bb3af --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},{"id":2,"notes":"Dustin notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},{"id":3,"notes":"Stefan notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},{"id":4,"notes":"Björn notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},{"id":5,"notes":"Sergiy notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},{"id":7,"notes":"Suvij notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},{"id":8,"notes":"Nithin notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},{"id":10,"notes":"Eelco notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},{"id":11,"notes":"Alexandra notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},{"id":12,"notes":"David notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.graphql new file mode 100644 index 0000000000..bd3e2367e7 --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.graphql @@ -0,0 +1,14 @@ +query { + employees { + id + ... @defer { + notes + ... @defer { + hobbies { + __typename + employees { id details { forename } } + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.txt new file mode 100644 index 0000000000..b4be0e2e8a --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":7},{"id":8},{"id":10},{"id":11},{"id":12}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"notes":"Jens notes resolved by products"},"path":["employees",0]},{"data":{"notes":"Dustin notes resolved by products"},"path":["employees",1]},{"data":{"notes":"Stefan notes resolved by products"},"path":["employees",2]},{"data":{"notes":"Björn notes resolved by products"},"path":["employees",3]},{"data":{"notes":"Sergiy notes resolved by products"},"path":["employees",4]},{"data":{"notes":"Suvij notes resolved by products"},"path":["employees",5]},{"data":{"notes":"Nithin notes resolved by products"},"path":["employees",6]},{"data":{"notes":"Eelco notes resolved by products"},"path":["employees",7]},{"data":{"notes":"Alexandra notes resolved by products"},"path":["employees",8]},{"data":{"notes":"David notes resolved by products"},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.graphql new file mode 100644 index 0000000000..aa9f6969ac --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.graphql @@ -0,0 +1,14 @@ +query { + employees { + ... @defer { + id + notes + ... @defer { + hobbies { + __typename + employees { id details { forename } } + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.txt new file mode 100644 index 0000000000..d28e009294 --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{},{},{},{},{},{},{},{},{},{}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"id":1,"notes":"Jens notes resolved by products"},"path":["employees",0]},{"data":{"id":2,"notes":"Dustin notes resolved by products"},"path":["employees",1]},{"data":{"id":3,"notes":"Stefan notes resolved by products"},"path":["employees",2]},{"data":{"id":4,"notes":"Björn notes resolved by products"},"path":["employees",3]},{"data":{"id":5,"notes":"Sergiy notes resolved by products"},"path":["employees",4]},{"data":{"id":7,"notes":"Suvij notes resolved by products"},"path":["employees",5]},{"data":{"id":8,"notes":"Nithin notes resolved by products"},"path":["employees",6]},{"data":{"id":10,"notes":"Eelco notes resolved by products"},"path":["employees",7]},{"data":{"id":11,"notes":"Alexandra notes resolved by products"},"path":["employees",8]},{"data":{"id":12,"notes":"David notes resolved by products"},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.graphql new file mode 100644 index 0000000000..e6fdd2eebf --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.graphql @@ -0,0 +1,12 @@ +query { + employees { + id + ... @defer { notes } + ... @defer { + hobbies { + __typename + employees { id details { forename } } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.txt new file mode 100644 index 0000000000..b4be0e2e8a --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":7},{"id":8},{"id":10},{"id":11},{"id":12}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"notes":"Jens notes resolved by products"},"path":["employees",0]},{"data":{"notes":"Dustin notes resolved by products"},"path":["employees",1]},{"data":{"notes":"Stefan notes resolved by products"},"path":["employees",2]},{"data":{"notes":"Björn notes resolved by products"},"path":["employees",3]},{"data":{"notes":"Sergiy notes resolved by products"},"path":["employees",4]},{"data":{"notes":"Suvij notes resolved by products"},"path":["employees",5]},{"data":{"notes":"Nithin notes resolved by products"},"path":["employees",6]},{"data":{"notes":"Eelco notes resolved by products"},"path":["employees",7]},{"data":{"notes":"Alexandra notes resolved by products"},"path":["employees",8]},{"data":{"notes":"David notes resolved by products"},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.graphql new file mode 100644 index 0000000000..058557bac2 --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.graphql @@ -0,0 +1,12 @@ +query { + employees { + id + notes + ... @defer { + hobbies { + __typename + employees { id details { forename } } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.txt new file mode 100644 index 0000000000..7243e06138 --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products"},{"id":2,"notes":"Dustin notes resolved by products"},{"id":3,"notes":"Stefan notes resolved by products"},{"id":4,"notes":"Björn notes resolved by products"},{"id":5,"notes":"Sergiy notes resolved by products"},{"id":7,"notes":"Suvij notes resolved by products"},{"id":8,"notes":"Nithin notes resolved by products"},{"id":10,"notes":"Eelco notes resolved by products"},{"id":11,"notes":"Alexandra notes resolved by products"},{"id":12,"notes":"David notes resolved by products"}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.graphql new file mode 100644 index 0000000000..2e6c2a0fd0 --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.graphql @@ -0,0 +1,12 @@ +query { + employees { + id + hobbies { __typename } + ... @defer { + hobbies { + employees { id details { forename } } + } + notes + } + } +} diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.txt new file mode 100644 index 0000000000..4bcd316b7f --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"hobbies":[{"__typename":"Exercise"},{"__typename":"Gaming"},{"__typename":"Other"},{"__typename":"Programming"},{"__typename":"Travelling"}]},{"id":2,"hobbies":[{"__typename":"Exercise"},{"__typename":"Gaming"},{"__typename":"Programming"}]},{"id":3,"hobbies":[{"__typename":"Exercise"},{"__typename":"Exercise"},{"__typename":"Other"},{"__typename":"Travelling"}]},{"id":4,"hobbies":[{"__typename":"Exercise"},{"__typename":"Flying"},{"__typename":"Travelling"}]},{"id":5,"hobbies":[{"__typename":"Other"},{"__typename":"Other"},{"__typename":"Other"}]},{"id":7,"hobbies":[{"__typename":"Gaming"},{"__typename":"Other"}]},{"id":8,"hobbies":[{"__typename":"Exercise"},{"__typename":"Gaming"},{"__typename":"Other"}]},{"id":10,"hobbies":[{"__typename":"Programming"},{"__typename":"Exercise"},{"__typename":"Exercise"},{"__typename":"Exercise"},{"__typename":"Other"},{"__typename":"Travelling"}]},{"id":11,"hobbies":[{"__typename":"Other"}]},{"id":12,"hobbies":[{"__typename":"Programming"},{"__typename":"Exercise"},{"__typename":"Gaming"},{"__typename":"Travelling"}]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"notes":"Jens notes resolved by products"},"path":["employees",0]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",0,"hobbies",0]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",0,"hobbies",1]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},"path":["employees",0,"hobbies",2]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",0,"hobbies",3]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",0,"hobbies",4]},{"data":{"notes":"Dustin notes resolved by products"},"path":["employees",1]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",1,"hobbies",0]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",1,"hobbies",1]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",1,"hobbies",2]},{"data":{"notes":"Stefan notes resolved by products"},"path":["employees",2]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",2,"hobbies",0]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",2,"hobbies",1]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},"path":["employees",2,"hobbies",2]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",2,"hobbies",3]},{"data":{"notes":"Björn notes resolved by products"},"path":["employees",3]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",3,"hobbies",0]},{"data":{"employees":[{"id":4,"details":{"forename":"Björn"}}]},"path":["employees",3,"hobbies",1]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",3,"hobbies",2]},{"data":{"notes":"Sergiy notes resolved by products"},"path":["employees",4]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},"path":["employees",4,"hobbies",0]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},"path":["employees",4,"hobbies",1]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},"path":["employees",4,"hobbies",2]},{"data":{"notes":"Suvij notes resolved by products"},"path":["employees",5]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",5,"hobbies",0]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},"path":["employees",5,"hobbies",1]},{"data":{"notes":"Nithin notes resolved by products"},"path":["employees",6]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",6,"hobbies",0]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",6,"hobbies",1]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},"path":["employees",6,"hobbies",2]},{"data":{"notes":"Eelco notes resolved by products"},"path":["employees",7]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",7,"hobbies",0]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",7,"hobbies",1]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",7,"hobbies",2]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",7,"hobbies",3]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},"path":["employees",7,"hobbies",4]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",7,"hobbies",5]},{"data":{"notes":"Alexandra notes resolved by products"},"path":["employees",8]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},"path":["employees",8,"hobbies",0]},{"data":{"notes":"David notes resolved by products"},"path":["employees",9]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",9,"hobbies",0]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",9,"hobbies",1]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",9,"hobbies",2]},{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},"path":["employees",9,"hobbies",3]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.graphql new file mode 100644 index 0000000000..fa19699b97 --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.graphql @@ -0,0 +1,14 @@ +query { + ... @defer { + employees { + ... @defer { id } + ... @defer { notes } + ... @defer { + hobbies { + __typename + employees { id details { forename } } + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.txt new file mode 100644 index 0000000000..7dc26b9dba --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.txt @@ -0,0 +1,28 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"employees":[{},{},{},{},{},{},{},{},{},{}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"id":1},"path":["employees",0]},{"data":{"id":2},"path":["employees",1]},{"data":{"id":3},"path":["employees",2]},{"data":{"id":4},"path":["employees",3]},{"data":{"id":5},"path":["employees",4]},{"data":{"id":7},"path":["employees",5]},{"data":{"id":8},"path":["employees",6]},{"data":{"id":10},"path":["employees",7]},{"data":{"id":11},"path":["employees",8]},{"data":{"id":12},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"notes":"Jens notes resolved by products"},"path":["employees",0]},{"data":{"notes":"Dustin notes resolved by products"},"path":["employees",1]},{"data":{"notes":"Stefan notes resolved by products"},"path":["employees",2]},{"data":{"notes":"Björn notes resolved by products"},"path":["employees",3]},{"data":{"notes":"Sergiy notes resolved by products"},"path":["employees",4]},{"data":{"notes":"Suvij notes resolved by products"},"path":["employees",5]},{"data":{"notes":"Nithin notes resolved by products"},"path":["employees",6]},{"data":{"notes":"Eelco notes resolved by products"},"path":["employees",7]},{"data":{"notes":"Alexandra notes resolved by products"},"path":["employees",8]},{"data":{"notes":"David notes resolved by products"},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_original.json b/router-tests/testdata/queries_defer/employeeDetails_original.json new file mode 100644 index 0000000000..7f3b750761 --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_original.json @@ -0,0 +1,1724 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "hobbies": [ + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Gaming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "__typename": "Programming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Travelling", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "hobbies": [ + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Gaming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Programming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "hobbies": [ + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "__typename": "Travelling", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "hobbies": [ + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Flying", + "employees": [ + { + "id": 4, + "details": { + "forename": "Björn" + } + } + ] + }, + { + "__typename": "Travelling", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "hobbies": [ + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "hobbies": [ + { + "__typename": "Gaming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "hobbies": [ + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Gaming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "hobbies": [ + { + "__typename": "Programming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "__typename": "Travelling", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "hobbies": [ + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "hobbies": [ + { + "__typename": "Programming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Gaming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Travelling", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employee_defer_01_single_defer.graphql b/router-tests/testdata/queries_defer/employee_defer_01_single_defer.graphql new file mode 100644 index 0000000000..cf1b6ebc13 --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_01_single_defer.graphql @@ -0,0 +1,11 @@ +query { + employee(id: 1) { + id + ... @defer { details { forename location { language } } } + } + teammates(team: OPERATIONS) { + id + details { forename } + products + } +} diff --git a/router-tests/testdata/queries_defer/employee_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/employee_defer_01_single_defer.txt new file mode 100644 index 0000000000..b4748810f2 --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_01_single_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employee":{"id":1},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens","location":{"language":"German"}}},"path":["employee"]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.graphql b/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.graphql new file mode 100644 index 0000000000..adfd6bd624 --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.graphql @@ -0,0 +1,12 @@ +query { + employee(id: 1) { + id + ... @defer { details { forename location { language } } } + hobbies { __typename } + } + teammates(team: OPERATIONS) { + id + details { forename } + products + } +} diff --git a/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt new file mode 100644 index 0000000000..48e707c6ad --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employee":{"id":1,"hobbies":[{"__typename":"Exercise"},{"__typename":"Gaming"},{"__typename":"Other"},{"__typename":"Programming"},{"__typename":"Travelling"}]},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens","location":{"language":"German"}}},"path":["employee"]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.graphql b/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.graphql new file mode 100644 index 0000000000..66fba14c2e --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.graphql @@ -0,0 +1,14 @@ +query { + employee(id: 1) { + id + ... @defer { + details { forename location { language } } + hobbies { __typename } + } + } + teammates(team: OPERATIONS) { + id + details { forename } + products + } +} diff --git a/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.txt b/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.txt new file mode 100644 index 0000000000..392d63896e --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employee":{"id":1},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens","location":{"language":"German"}},"hobbies":[{},{},{},{},{}]},"path":["employee"]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.graphql b/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.graphql new file mode 100644 index 0000000000..c9a6179b6f --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.graphql @@ -0,0 +1,14 @@ +query { + ... @defer { + employee(id: 1) { + id + details { forename location { language } } + hobbies { __typename } + } + teammates(team: OPERATIONS) { + id + details { forename } + products + } + } +} diff --git a/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.txt b/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.txt new file mode 100644 index 0000000000..211feae9da --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}},"hobbies":[{},{},{},{},{}]},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_05_nested_defer.graphql b/router-tests/testdata/queries_defer/employee_defer_05_nested_defer.graphql new file mode 100644 index 0000000000..f5939bf974 --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_05_nested_defer.graphql @@ -0,0 +1,14 @@ +query { + employee(id: 1) { + id + ... @defer { + details { forename location { language } } + ... @defer { hobbies { __typename } } + } + } + teammates(team: OPERATIONS) { + id + details { forename } + products + } +} diff --git a/router-tests/testdata/queries_defer/employee_defer_05_nested_defer.txt b/router-tests/testdata/queries_defer/employee_defer_05_nested_defer.txt new file mode 100644 index 0000000000..a31007cb4c --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_05_nested_defer.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"employee":{"id":1},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens","location":{"language":"German"}}},"path":["employee"]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{},{},{},{},{}]},"path":["employee"]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.graphql b/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.graphql new file mode 100644 index 0000000000..e26f6b7c4c --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.graphql @@ -0,0 +1,14 @@ +query { + employee(id: 1) { + ... @defer { + id + details { forename location { language } } + ... @defer { hobbies { __typename } } + } + } + teammates(team: OPERATIONS) { + id + details { forename } + products + } +} diff --git a/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.txt new file mode 100644 index 0000000000..cfe7bbcf26 --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"employee":{},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"path":["employee"]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{},{},{},{},{}]},"path":["employee"]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.graphql b/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.graphql new file mode 100644 index 0000000000..0470ede1ae --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.graphql @@ -0,0 +1,12 @@ +query { + employee(id: 1) { + id + ... @defer { details { forename location { language } } } + ... @defer { hobbies { __typename } } + } + teammates(team: OPERATIONS) { + id + details { forename } + products + } +} diff --git a/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.txt new file mode 100644 index 0000000000..a31007cb4c --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"employee":{"id":1},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens","location":{"language":"German"}}},"path":["employee"]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{},{},{},{},{}]},"path":["employee"]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.graphql b/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.graphql new file mode 100644 index 0000000000..b1fe65019f --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.graphql @@ -0,0 +1,11 @@ +query { + employee(id: 1) { + id + details { forename location { language } } + ... @defer { hobbies { __typename } } + } + teammates(team: OPERATIONS) { + id + ... @defer { details { forename } products } + } +} diff --git a/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.txt b/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.txt new file mode 100644 index 0000000000..a1a1e38599 --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4},{"id":11}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{},{},{},{},{}]},"path":["employee"]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["teammates",0]},{"data":{"details":{"forename":"Alexandra"},"products":["FINANCE"]},"path":["teammates",1]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.graphql b/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.graphql new file mode 100644 index 0000000000..1898f3b769 --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.graphql @@ -0,0 +1,15 @@ +query { + employee(id: 1) { + id + details { forename } + ... @defer { + details { location { language } } + hobbies { __typename } + } + } + teammates(team: OPERATIONS) { + id + details { forename } + products + } +} diff --git a/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.txt new file mode 100644 index 0000000000..b87250863d --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employee":{"id":1,"details":{"forename":"Jens"}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{},{},{},{},{}]},"path":["employee"]},{"data":{"location":{"language":"German"}},"path":["employee","details"]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.graphql b/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.graphql new file mode 100644 index 0000000000..222bca55f9 --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.graphql @@ -0,0 +1,14 @@ +query { + ... @defer { + employee(id: 1) { + ... @defer { id } + ... @defer { details { forename location { language } } } + ... @defer { hobbies { __typename } } + } + teammates(team: OPERATIONS) { + ... @defer { id } + ... @defer { details { forename } } + ... @defer { products } + } + } +} diff --git a/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.txt new file mode 100644 index 0000000000..2a0de22f89 --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.txt @@ -0,0 +1,43 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"employee":{},"teammates":[{},{}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"id":1},"path":["employee"]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens","location":{"language":"German"}}},"path":["employee"]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{},{},{},{},{}]},"path":["employee"]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"id":4},"path":["teammates",0]},{"data":{"id":11},"path":["teammates",1]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Björn"}},"path":["teammates",0]},{"data":{"details":{"forename":"Alexandra"}},"path":["teammates",1]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["teammates",0]},{"data":{"products":["FINANCE"]},"path":["teammates",1]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employee_original.json b/router-tests/testdata/queries_defer/employee_original.json new file mode 100644 index 0000000000..0e74b492eb --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_original.json @@ -0,0 +1,52 @@ +{ + "data": { + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + }, + "hobbies": [ + { + "__typename": "Exercise" + }, + { + "__typename": "Gaming" + }, + { + "__typename": "Other" + }, + { + "__typename": "Programming" + }, + { + "__typename": "Travelling" + } + ] + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employees_defer_01_single_defer.graphql b/router-tests/testdata/queries_defer/employees_defer_01_single_defer.graphql new file mode 100644 index 0000000000..1af82d86f7 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_01_single_defer.graphql @@ -0,0 +1,15 @@ +query { + employees { + id + details { forename surname } + role { departments title } + ... @defer { + hobbies { + ... on Exercise { category } + ... on Gaming { genres name } + ... on Programming { languages } + } + } + products + } +} diff --git a/router-tests/testdata/queries_defer/employees_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/employees_defer_01_single_defer.txt new file mode 100644 index 0000000000..5991d94acf --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_01_single_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"details":{"forename":"Jens","surname":"Neuse"},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"]},"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"details":{"forename":"Dustin","surname":"Deus"},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"]},"products":["COSMO","SDK"]},{"id":3,"details":{"forename":"Stefan","surname":"Avram"},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"products":["CONSULTANCY","MARKETING"]},{"id":4,"details":{"forename":"Björn","surname":"Schwenzer"},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"]},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"details":{"forename":"Sergiy","surname":"Petrunin"},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"]},"products":["ENGINE","SDK"]},{"id":7,"details":{"forename":"Suvij","surname":"Surya"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]},"products":["COSMO","SDK"]},{"id":8,"details":{"forename":"Nithin","surname":"Kumar"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]},"products":["COSMO","SDK"]},{"id":10,"details":{"forename":"Eelco","surname":"Wiersma"},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"]},"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"details":{"forename":"Alexandra","surname":"Neuse"},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"]},"products":["FINANCE"]},{"id":12,"details":{"forename":"David","surname":"Stutt"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]},"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{},{}]},"path":["employees",3]},{"data":{"hobbies":[{},{},{}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}]},"path":["employees",7]},{"data":{"hobbies":[{}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.graphql b/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.graphql new file mode 100644 index 0000000000..7f5eac4b82 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.graphql @@ -0,0 +1,14 @@ +query { + employees { + id + details { forename surname } + ... @defer { + hobbies { + ... on Exercise { category } + ... on Gaming { genres name } + ... on Programming { languages } + } + } + products + } +} diff --git a/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.txt new file mode 100644 index 0000000000..08ee9e88bc --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"details":{"forename":"Jens","surname":"Neuse"},"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"details":{"forename":"Dustin","surname":"Deus"},"products":["COSMO","SDK"]},{"id":3,"details":{"forename":"Stefan","surname":"Avram"},"products":["CONSULTANCY","MARKETING"]},{"id":4,"details":{"forename":"Björn","surname":"Schwenzer"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"details":{"forename":"Sergiy","surname":"Petrunin"},"products":["ENGINE","SDK"]},{"id":7,"details":{"forename":"Suvij","surname":"Surya"},"products":["COSMO","SDK"]},{"id":8,"details":{"forename":"Nithin","surname":"Kumar"},"products":["COSMO","SDK"]},{"id":10,"details":{"forename":"Eelco","surname":"Wiersma"},"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"details":{"forename":"Alexandra","surname":"Neuse"},"products":["FINANCE"]},{"id":12,"details":{"forename":"David","surname":"Stutt"},"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{},{}]},"path":["employees",3]},{"data":{"hobbies":[{},{},{}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}]},"path":["employees",7]},{"data":{"hobbies":[{}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.graphql b/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.graphql new file mode 100644 index 0000000000..38df7c398b --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.graphql @@ -0,0 +1,14 @@ +query { + employees { + id + details { forename surname } + ... @defer { + hobbies { + ... on Exercise { category } + ... on Gaming { genres name } + ... on Programming { languages } + } + products + } + } +} diff --git a/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.txt b/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.txt new file mode 100644 index 0000000000..69144eac6a --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"details":{"forename":"Jens","surname":"Neuse"}},{"id":2,"details":{"forename":"Dustin","surname":"Deus"}},{"id":3,"details":{"forename":"Stefan","surname":"Avram"}},{"id":4,"details":{"forename":"Björn","surname":"Schwenzer"}},{"id":5,"details":{"forename":"Sergiy","surname":"Petrunin"}},{"id":7,"details":{"forename":"Suvij","surname":"Surya"}},{"id":8,"details":{"forename":"Nithin","surname":"Kumar"}},{"id":10,"details":{"forename":"Eelco","surname":"Wiersma"}},{"id":11,"details":{"forename":"Alexandra","surname":"Neuse"}},{"id":12,"details":{"forename":"David","surname":"Stutt"}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}],"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{},{}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"hobbies":[{},{},{}],"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}],"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}],"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}],"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"hobbies":[{}],"products":["FINANCE"]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.graphql b/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.graphql new file mode 100644 index 0000000000..cb3680835f --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.graphql @@ -0,0 +1,16 @@ +query { + ... @defer { + employees { + id + notes + details { forename surname location { language } hasChildren maritalStatus nationality } + role { departments title ... on Engineer { engineerType } ... on Operator { operatorType } } + hobbies { + ... on Exercise { category } + ... on Gaming { genres name } + ... on Programming { languages } + } + products + } + } +} diff --git a/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.txt b/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.txt new file mode 100644 index 0000000000..2dc884d4a3 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN"},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN"},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}],"products":["CONSULTANCY","MARKETING"]},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"hobbies":[{"category":"HIKING"},{},{}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN"},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"hobbies":[{},{},{}],"products":["ENGINE","SDK"]},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}],"products":["COSMO","SDK"]},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}],"products":["COSMO","SDK"]},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH"},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}],"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"hobbies":[{}],"products":["FINANCE"]},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_05_nested_defer.graphql b/router-tests/testdata/queries_defer/employees_defer_05_nested_defer.graphql new file mode 100644 index 0000000000..0c84a112e8 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_05_nested_defer.graphql @@ -0,0 +1,16 @@ +query { + employees { + id + details { forename surname } + ... @defer { + role { departments title } + ... @defer { + hobbies { + ... on Exercise { category } + ... on Gaming { genres name } + ... on Programming { languages } + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/employees_defer_05_nested_defer.txt b/router-tests/testdata/queries_defer/employees_defer_05_nested_defer.txt new file mode 100644 index 0000000000..9c50a46ff7 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_05_nested_defer.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"details":{"forename":"Jens","surname":"Neuse"}},{"id":2,"details":{"forename":"Dustin","surname":"Deus"}},{"id":3,"details":{"forename":"Stefan","surname":"Avram"}},{"id":4,"details":{"forename":"Björn","surname":"Schwenzer"}},{"id":5,"details":{"forename":"Sergiy","surname":"Petrunin"}},{"id":7,"details":{"forename":"Suvij","surname":"Surya"}},{"id":8,"details":{"forename":"Nithin","surname":"Kumar"}},{"id":10,"details":{"forename":"Eelco","surname":"Wiersma"}},{"id":11,"details":{"forename":"Alexandra","surname":"Neuse"}},{"id":12,"details":{"forename":"David","surname":"Stutt"}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"]}},"path":["employees",0]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"]}},"path":["employees",1]},{"data":{"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]}},"path":["employees",2]},{"data":{"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"]}},"path":["employees",3]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"]}},"path":["employees",4]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},"path":["employees",5]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},"path":["employees",6]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"]}},"path":["employees",7]},{"data":{"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"]}},"path":["employees",8]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{},{}]},"path":["employees",3]},{"data":{"hobbies":[{},{},{}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}]},"path":["employees",7]},{"data":{"hobbies":[{}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.graphql b/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.graphql new file mode 100644 index 0000000000..8c3335b8b3 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.graphql @@ -0,0 +1,16 @@ +query { + employees { + id + ... @defer { + details { forename surname } + role { departments title } + ... @defer { + hobbies { + ... on Exercise { category } + ... on Gaming { genres name } + ... on Programming { languages } + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.txt new file mode 100644 index 0000000000..34f816d66b --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":7},{"id":8},{"id":10},{"id":11},{"id":12}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens","surname":"Neuse"},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"]}},"path":["employees",0]},{"data":{"details":{"forename":"Dustin","surname":"Deus"},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"]}},"path":["employees",1]},{"data":{"details":{"forename":"Stefan","surname":"Avram"},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]}},"path":["employees",2]},{"data":{"details":{"forename":"Björn","surname":"Schwenzer"},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"]}},"path":["employees",3]},{"data":{"details":{"forename":"Sergiy","surname":"Petrunin"},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"]}},"path":["employees",4]},{"data":{"details":{"forename":"Suvij","surname":"Surya"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},"path":["employees",5]},{"data":{"details":{"forename":"Nithin","surname":"Kumar"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},"path":["employees",6]},{"data":{"details":{"forename":"Eelco","surname":"Wiersma"},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"]}},"path":["employees",7]},{"data":{"details":{"forename":"Alexandra","surname":"Neuse"},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"]}},"path":["employees",8]},{"data":{"details":{"forename":"David","surname":"Stutt"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{},{}]},"path":["employees",3]},{"data":{"hobbies":[{},{},{}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}]},"path":["employees",7]},{"data":{"hobbies":[{}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.graphql b/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.graphql new file mode 100644 index 0000000000..89184eed30 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.graphql @@ -0,0 +1,14 @@ +query { + employees { + id + details { forename surname } + ... @defer { + hobbies { + ... on Exercise { category } + ... on Gaming { genres name } + ... on Programming { languages } + } + } + ... @defer { products } + } +} diff --git a/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.txt new file mode 100644 index 0000000000..a45f59c7cd --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"details":{"forename":"Jens","surname":"Neuse"}},{"id":2,"details":{"forename":"Dustin","surname":"Deus"}},{"id":3,"details":{"forename":"Stefan","surname":"Avram"}},{"id":4,"details":{"forename":"Björn","surname":"Schwenzer"}},{"id":5,"details":{"forename":"Sergiy","surname":"Petrunin"}},{"id":7,"details":{"forename":"Suvij","surname":"Surya"}},{"id":8,"details":{"forename":"Nithin","surname":"Kumar"}},{"id":10,"details":{"forename":"Eelco","surname":"Wiersma"}},{"id":11,"details":{"forename":"Alexandra","surname":"Neuse"}},{"id":12,"details":{"forename":"David","surname":"Stutt"}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{},{}]},"path":["employees",3]},{"data":{"hobbies":[{},{},{}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}]},"path":["employees",7]},{"data":{"hobbies":[{}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"products":["FINANCE"]},"path":["employees",8]},{"data":{"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.graphql b/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.graphql new file mode 100644 index 0000000000..cd9062677c --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.graphql @@ -0,0 +1,16 @@ +query { + employees { + id + role { departments title } + ... @defer { + details { + forename + surname + location { language } + hasChildren + maritalStatus + nationality + } + } + } +} diff --git a/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.txt b/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.txt new file mode 100644 index 0000000000..339f94ca9a --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"]}},{"id":2,"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"]}},{"id":3,"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]}},{"id":4,"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"]}},{"id":5,"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"]}},{"id":7,"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},{"id":8,"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},{"id":10,"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"]}},{"id":11,"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"]}},{"id":12,"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"}},"path":["employees",0]},{"data":{"details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN"}},"path":["employees",1]},{"data":{"details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN"}},"path":["employees",2]},{"data":{"details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"}},"path":["employees",3]},{"data":{"details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN"}},"path":["employees",4]},{"data":{"details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN"}},"path":["employees",5]},{"data":{"details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN"}},"path":["employees",6]},{"data":{"details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH"}},"path":["employees",7]},{"data":{"details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"}},"path":["employees",8]},{"data":{"details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH"}},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.graphql b/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.graphql new file mode 100644 index 0000000000..a32c4dd2fa --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.graphql @@ -0,0 +1,14 @@ +query { + employees { + id + details { forename } + ... @defer { + details { surname location { language } } + hobbies { + ... on Exercise { category } + ... on Gaming { genres name } + ... on Programming { languages } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.txt new file mode 100644 index 0000000000..2c9c69fe06 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}]},"path":["employees",0]},{"data":{"surname":"Neuse","location":{"language":"German"}},"path":["employees",0,"details"]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"surname":"Deus","location":{"language":"German"}},"path":["employees",1,"details"]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}]},"path":["employees",2]},{"data":{"surname":"Avram","location":{"language":"English"}},"path":["employees",2,"details"]},{"data":{"hobbies":[{"category":"HIKING"},{},{}]},"path":["employees",3]},{"data":{"surname":"Schwenzer","location":{"language":"German"}},"path":["employees",3,"details"]},{"data":{"hobbies":[{},{},{}]},"path":["employees",4]},{"data":{"surname":"Petrunin","location":{"language":"Ukrainian"}},"path":["employees",4,"details"]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}]},"path":["employees",5]},{"data":{"surname":"Surya","location":{"language":"Hindi"}},"path":["employees",5,"details"]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",6]},{"data":{"surname":"Kumar","location":{"language":"Hindi"}},"path":["employees",6,"details"]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}]},"path":["employees",7]},{"data":{"surname":"Wiersma","location":{"language":"Dutch"}},"path":["employees",7,"details"]},{"data":{"hobbies":[{}]},"path":["employees",8]},{"data":{"surname":"Neuse","location":{"language":"German"}},"path":["employees",8,"details"]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",9]},{"data":{"surname":"Stutt","location":{"language":"English"}},"path":["employees",9,"details"]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.graphql b/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.graphql new file mode 100644 index 0000000000..363843f5b5 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.graphql @@ -0,0 +1,18 @@ +query { + ... @defer { + employees { + ... @defer { id } + ... @defer { notes } + ... @defer { details { forename surname location { language } hasChildren maritalStatus nationality } } + ... @defer { role { departments title ... on Engineer { engineerType } ... on Operator { operatorType } } } + ... @defer { + hobbies { + ... on Exercise { category } + ... on Gaming { genres name } + ... on Programming { languages } + } + } + ... @defer { products } + } + } +} diff --git a/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.txt new file mode 100644 index 0000000000..f012ebf598 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.txt @@ -0,0 +1,43 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"employees":[{},{},{},{},{},{},{},{},{},{}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"id":1},"path":["employees",0]},{"data":{"id":2},"path":["employees",1]},{"data":{"id":3},"path":["employees",2]},{"data":{"id":4},"path":["employees",3]},{"data":{"id":5},"path":["employees",4]},{"data":{"id":7},"path":["employees",5]},{"data":{"id":8},"path":["employees",6]},{"data":{"id":10},"path":["employees",7]},{"data":{"id":11},"path":["employees",8]},{"data":{"id":12},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"notes":"Jens notes resolved by products"},"path":["employees",0]},{"data":{"notes":"Dustin notes resolved by products"},"path":["employees",1]},{"data":{"notes":"Stefan notes resolved by products"},"path":["employees",2]},{"data":{"notes":"Björn notes resolved by products"},"path":["employees",3]},{"data":{"notes":"Sergiy notes resolved by products"},"path":["employees",4]},{"data":{"notes":"Suvij notes resolved by products"},"path":["employees",5]},{"data":{"notes":"Nithin notes resolved by products"},"path":["employees",6]},{"data":{"notes":"Eelco notes resolved by products"},"path":["employees",7]},{"data":{"notes":"Alexandra notes resolved by products"},"path":["employees",8]},{"data":{"notes":"David notes resolved by products"},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"}},"path":["employees",0]},{"data":{"details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN"}},"path":["employees",1]},{"data":{"details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN"}},"path":["employees",2]},{"data":{"details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"}},"path":["employees",3]},{"data":{"details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN"}},"path":["employees",4]},{"data":{"details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN"}},"path":["employees",5]},{"data":{"details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN"}},"path":["employees",6]},{"data":{"details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH"}},"path":["employees",7]},{"data":{"details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"}},"path":["employees",8]},{"data":{"details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH"}},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"}},"path":["employees",0]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"}},"path":["employees",1]},{"data":{"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]}},"path":["employees",2]},{"data":{"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]}},"path":["employees",3]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"}},"path":["employees",4]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}},"path":["employees",5]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}},"path":["employees",6]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"}},"path":["employees",7]},{"data":{"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]}},"path":["employees",8]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{},{}]},"path":["employees",3]},{"data":{"hobbies":[{},{},{}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}]},"path":["employees",7]},{"data":{"hobbies":[{}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"products":["FINANCE"]},"path":["employees",8]},{"data":{"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.graphql b/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.graphql new file mode 100644 index 0000000000..66d959e9b9 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.graphql @@ -0,0 +1,15 @@ +fragment EngineerRole on Engineer { + departments + title + ... @defer { engineerType } +} + +query { + employees { + id + details { forename } + role { + ...EngineerRole @defer + } + } +} diff --git a/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.txt b/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.txt new file mode 100644 index 0000000000..cc8f565326 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"details":{"forename":"Jens"},"role":{}},{"id":2,"details":{"forename":"Dustin"},"role":{}},{"id":3,"details":{"forename":"Stefan"},"role":{}},{"id":4,"details":{"forename":"Björn"},"role":{}},{"id":5,"details":{"forename":"Sergiy"},"role":{}},{"id":7,"details":{"forename":"Suvij"},"role":{}},{"id":8,"details":{"forename":"Nithin"},"role":{}},{"id":10,"details":{"forename":"Eelco"},"role":{}},{"id":11,"details":{"forename":"Alexandra"},"role":{}},{"id":12,"details":{"forename":"David"},"role":{}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"]},"path":["employees",0,"role"]},{"data":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"]},"path":["employees",1,"role"]},{"data":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"]},"path":["employees",4,"role"]},{"data":{"departments":["ENGINEERING"],"title":["Software Engineer"]},"path":["employees",5,"role"]},{"data":{"departments":["ENGINEERING"],"title":["Software Engineer"]},"path":["employees",6,"role"]},{"data":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"]},"path":["employees",7,"role"]},{"data":{"departments":["ENGINEERING"],"title":["Software Engineer"]},"path":["employees",9,"role"]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"engineerType":"BACKEND"},"path":["employees",0,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",1,"role"]},{"data":{"engineerType":"BACKEND"},"path":["employees",4,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",5,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",6,"role"]},{"data":{"engineerType":"FRONTEND"},"path":["employees",7,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",9,"role"]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.graphql b/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.graphql new file mode 100644 index 0000000000..d4da4d756b --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.graphql @@ -0,0 +1,15 @@ +fragment EngineerRole on Engineer { + departments + title + ... @defer { engineerType } +} + +query { + employees { + id + details { forename } + role { + ...EngineerRole + } + } +} diff --git a/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.txt b/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.txt new file mode 100644 index 0000000000..7e028fcefb --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"details":{"forename":"Jens"},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"]}},{"id":2,"details":{"forename":"Dustin"},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"]}},{"id":3,"details":{"forename":"Stefan"},"role":{}},{"id":4,"details":{"forename":"Björn"},"role":{}},{"id":5,"details":{"forename":"Sergiy"},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"]}},{"id":7,"details":{"forename":"Suvij"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},{"id":8,"details":{"forename":"Nithin"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},{"id":10,"details":{"forename":"Eelco"},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"]}},{"id":11,"details":{"forename":"Alexandra"},"role":{}},{"id":12,"details":{"forename":"David"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"engineerType":"BACKEND"},"path":["employees",0,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",1,"role"]},{"data":{"engineerType":"BACKEND"},"path":["employees",4,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",5,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",6,"role"]},{"data":{"engineerType":"FRONTEND"},"path":["employees",7,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",9,"role"]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.graphql b/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.graphql new file mode 100644 index 0000000000..f647b1a983 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.graphql @@ -0,0 +1,17 @@ +fragment EngineerRole on Engineer { + departments + title + engineerType +} + +query { + employees { + id + details { forename } + role { + departments + title + ...EngineerRole @defer + } + } +} diff --git a/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.txt b/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.txt new file mode 100644 index 0000000000..351f05c0e4 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"details":{"forename":"Jens"},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"]}},{"id":2,"details":{"forename":"Dustin"},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"]}},{"id":3,"details":{"forename":"Stefan"},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]}},{"id":4,"details":{"forename":"Björn"},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"]}},{"id":5,"details":{"forename":"Sergiy"},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"]}},{"id":7,"details":{"forename":"Suvij"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},{"id":8,"details":{"forename":"Nithin"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},{"id":10,"details":{"forename":"Eelco"},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"]}},{"id":11,"details":{"forename":"Alexandra"},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"]}},{"id":12,"details":{"forename":"David"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"engineerType":"BACKEND"},"path":["employees",0,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",1,"role"]},{"data":{"engineerType":"BACKEND"},"path":["employees",4,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",5,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",6,"role"]},{"data":{"engineerType":"FRONTEND"},"path":["employees",7,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",9,"role"]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/employees_original.json b/router-tests/testdata/queries_defer/employees_original.json new file mode 100644 index 0000000000..301f6214ff --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_original.json @@ -0,0 +1,652 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "key": { + "name": "America" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Serbian" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "key": { + "name": "Ukraine" + }, + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "key": { + "name": "Netherlands" + }, + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German" + }, + { + "language": "Indonesian" + }, + { + "language": "Dutch" + }, + { + "language": "Portuguese" + }, + { + "language": "Spanish" + }, + { + "language": "Thai" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "key": { + "name": "England" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Korean" + }, + { + "language": "Taiwanese" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.graphql b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.graphql new file mode 100644 index 0000000000..5eff16120f --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.graphql @@ -0,0 +1,5 @@ +query { + findEmployees { + ... @defer { details { forename } } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.txt new file mode 100644 index 0000000000..33085fd218 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"findEmployees":[{},{},{},{},{},{},{},{},{},{}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens"}},"path":["findEmployees",0]},{"data":{"details":{"forename":"Dustin"}},"path":["findEmployees",1]},{"data":{"details":{"forename":"Stefan"}},"path":["findEmployees",2]},{"data":{"details":{"forename":"Björn"}},"path":["findEmployees",3]},{"data":{"details":{"forename":"Sergiy"}},"path":["findEmployees",4]},{"data":{"details":{"forename":"Suvij"}},"path":["findEmployees",5]},{"data":{"details":{"forename":"Nithin"}},"path":["findEmployees",6]},{"data":{"details":{"forename":"Eelco"}},"path":["findEmployees",7]},{"data":{"details":{"forename":"Alexandra"}},"path":["findEmployees",8]},{"data":{"details":{"forename":"David"}},"path":["findEmployees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.graphql b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.graphql new file mode 100644 index 0000000000..0694c0e251 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.graphql @@ -0,0 +1,7 @@ +query { + ... @defer { + findEmployees { + details { forename } + } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.txt new file mode 100644 index 0000000000..8e9a2cf9df --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"findEmployees":[{"details":{"forename":"Jens"}},{"details":{"forename":"Dustin"}},{"details":{"forename":"Stefan"}},{"details":{"forename":"Björn"}},{"details":{"forename":"Sergiy"}},{"details":{"forename":"Suvij"}},{"details":{"forename":"Nithin"}},{"details":{"forename":"Eelco"}},{"details":{"forename":"Alexandra"}},{"details":{"forename":"David"}}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.graphql b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.graphql new file mode 100644 index 0000000000..0694c0e251 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.graphql @@ -0,0 +1,7 @@ +query { + ... @defer { + findEmployees { + details { forename } + } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.txt b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.txt new file mode 100644 index 0000000000..8e9a2cf9df --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"findEmployees":[{"details":{"forename":"Jens"}},{"details":{"forename":"Dustin"}},{"details":{"forename":"Stefan"}},{"details":{"forename":"Björn"}},{"details":{"forename":"Sergiy"}},{"details":{"forename":"Suvij"}},{"details":{"forename":"Nithin"}},{"details":{"forename":"Eelco"}},{"details":{"forename":"Alexandra"}},{"details":{"forename":"David"}}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.graphql b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.graphql new file mode 100644 index 0000000000..0694c0e251 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.graphql @@ -0,0 +1,7 @@ +query { + ... @defer { + findEmployees { + details { forename } + } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.txt b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.txt new file mode 100644 index 0000000000..8e9a2cf9df --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"findEmployees":[{"details":{"forename":"Jens"}},{"details":{"forename":"Dustin"}},{"details":{"forename":"Stefan"}},{"details":{"forename":"Björn"}},{"details":{"forename":"Sergiy"}},{"details":{"forename":"Suvij"}},{"details":{"forename":"Nithin"}},{"details":{"forename":"Eelco"}},{"details":{"forename":"Alexandra"}},{"details":{"forename":"David"}}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.graphql b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.graphql new file mode 100644 index 0000000000..4206bba75b --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.graphql @@ -0,0 +1,7 @@ +query { + ... @defer { + findEmployees { + ... @defer { details { forename } } + } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.txt b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.txt new file mode 100644 index 0000000000..e304f87a99 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"findEmployees":[{},{},{},{},{},{},{},{},{},{}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens"}},"path":["findEmployees",0]},{"data":{"details":{"forename":"Dustin"}},"path":["findEmployees",1]},{"data":{"details":{"forename":"Stefan"}},"path":["findEmployees",2]},{"data":{"details":{"forename":"Björn"}},"path":["findEmployees",3]},{"data":{"details":{"forename":"Sergiy"}},"path":["findEmployees",4]},{"data":{"details":{"forename":"Suvij"}},"path":["findEmployees",5]},{"data":{"details":{"forename":"Nithin"}},"path":["findEmployees",6]},{"data":{"details":{"forename":"Eelco"}},"path":["findEmployees",7]},{"data":{"details":{"forename":"Alexandra"}},"path":["findEmployees",8]},{"data":{"details":{"forename":"David"}},"path":["findEmployees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.graphql b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.graphql new file mode 100644 index 0000000000..4206bba75b --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.graphql @@ -0,0 +1,7 @@ +query { + ... @defer { + findEmployees { + ... @defer { details { forename } } + } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.txt new file mode 100644 index 0000000000..e304f87a99 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"findEmployees":[{},{},{},{},{},{},{},{},{},{}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens"}},"path":["findEmployees",0]},{"data":{"details":{"forename":"Dustin"}},"path":["findEmployees",1]},{"data":{"details":{"forename":"Stefan"}},"path":["findEmployees",2]},{"data":{"details":{"forename":"Björn"}},"path":["findEmployees",3]},{"data":{"details":{"forename":"Sergiy"}},"path":["findEmployees",4]},{"data":{"details":{"forename":"Suvij"}},"path":["findEmployees",5]},{"data":{"details":{"forename":"Nithin"}},"path":["findEmployees",6]},{"data":{"details":{"forename":"Eelco"}},"path":["findEmployees",7]},{"data":{"details":{"forename":"Alexandra"}},"path":["findEmployees",8]},{"data":{"details":{"forename":"David"}},"path":["findEmployees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.graphql b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.graphql new file mode 100644 index 0000000000..5eff16120f --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.graphql @@ -0,0 +1,5 @@ +query { + findEmployees { + ... @defer { details { forename } } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.txt new file mode 100644 index 0000000000..33085fd218 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"findEmployees":[{},{},{},{},{},{},{},{},{},{}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens"}},"path":["findEmployees",0]},{"data":{"details":{"forename":"Dustin"}},"path":["findEmployees",1]},{"data":{"details":{"forename":"Stefan"}},"path":["findEmployees",2]},{"data":{"details":{"forename":"Björn"}},"path":["findEmployees",3]},{"data":{"details":{"forename":"Sergiy"}},"path":["findEmployees",4]},{"data":{"details":{"forename":"Suvij"}},"path":["findEmployees",5]},{"data":{"details":{"forename":"Nithin"}},"path":["findEmployees",6]},{"data":{"details":{"forename":"Eelco"}},"path":["findEmployees",7]},{"data":{"details":{"forename":"Alexandra"}},"path":["findEmployees",8]},{"data":{"details":{"forename":"David"}},"path":["findEmployees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.graphql b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.graphql new file mode 100644 index 0000000000..5eff16120f --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.graphql @@ -0,0 +1,5 @@ +query { + findEmployees { + ... @defer { details { forename } } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.txt b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.txt new file mode 100644 index 0000000000..33085fd218 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"findEmployees":[{},{},{},{},{},{},{},{},{},{}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens"}},"path":["findEmployees",0]},{"data":{"details":{"forename":"Dustin"}},"path":["findEmployees",1]},{"data":{"details":{"forename":"Stefan"}},"path":["findEmployees",2]},{"data":{"details":{"forename":"Björn"}},"path":["findEmployees",3]},{"data":{"details":{"forename":"Sergiy"}},"path":["findEmployees",4]},{"data":{"details":{"forename":"Suvij"}},"path":["findEmployees",5]},{"data":{"details":{"forename":"Nithin"}},"path":["findEmployees",6]},{"data":{"details":{"forename":"Eelco"}},"path":["findEmployees",7]},{"data":{"details":{"forename":"Alexandra"}},"path":["findEmployees",8]},{"data":{"details":{"forename":"David"}},"path":["findEmployees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.graphql b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.graphql new file mode 100644 index 0000000000..bec2083f5d --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.graphql @@ -0,0 +1,6 @@ +query { + findEmployees { + details { forename } + ... @defer { details { location { language } } } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.txt new file mode 100644 index 0000000000..ae3a1fd702 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"findEmployees":[{"details":{"forename":"Jens"}},{"details":{"forename":"Dustin"}},{"details":{"forename":"Stefan"}},{"details":{"forename":"Björn"}},{"details":{"forename":"Sergiy"}},{"details":{"forename":"Suvij"}},{"details":{"forename":"Nithin"}},{"details":{"forename":"Eelco"}},{"details":{"forename":"Alexandra"}},{"details":{"forename":"David"}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"location":{"language":"German"}},"path":["findEmployees",0,"details"]},{"data":{"location":{"language":"German"}},"path":["findEmployees",1,"details"]},{"data":{"location":{"language":"English"}},"path":["findEmployees",2,"details"]},{"data":{"location":{"language":"German"}},"path":["findEmployees",3,"details"]},{"data":{"location":{"language":"Ukrainian"}},"path":["findEmployees",4,"details"]},{"data":{"location":{"language":"Hindi"}},"path":["findEmployees",5,"details"]},{"data":{"location":{"language":"Hindi"}},"path":["findEmployees",6,"details"]},{"data":{"location":{"language":"Dutch"}},"path":["findEmployees",7,"details"]},{"data":{"location":{"language":"German"}},"path":["findEmployees",8,"details"]},{"data":{"location":{"language":"English"}},"path":["findEmployees",9,"details"]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.graphql b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.graphql new file mode 100644 index 0000000000..4206bba75b --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.graphql @@ -0,0 +1,7 @@ +query { + ... @defer { + findEmployees { + ... @defer { details { forename } } + } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.txt new file mode 100644 index 0000000000..e304f87a99 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"findEmployees":[{},{},{},{},{},{},{},{},{},{}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens"}},"path":["findEmployees",0]},{"data":{"details":{"forename":"Dustin"}},"path":["findEmployees",1]},{"data":{"details":{"forename":"Stefan"}},"path":["findEmployees",2]},{"data":{"details":{"forename":"Björn"}},"path":["findEmployees",3]},{"data":{"details":{"forename":"Sergiy"}},"path":["findEmployees",4]},{"data":{"details":{"forename":"Suvij"}},"path":["findEmployees",5]},{"data":{"details":{"forename":"Nithin"}},"path":["findEmployees",6]},{"data":{"details":{"forename":"Eelco"}},"path":["findEmployees",7]},{"data":{"details":{"forename":"Alexandra"}},"path":["findEmployees",8]},{"data":{"details":{"forename":"David"}},"path":["findEmployees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_original.json b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_original.json new file mode 100644 index 0000000000..5483c6e2a1 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_original.json @@ -0,0 +1,56 @@ +{ + "data": { + "findEmployees": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Dustin" + } + }, + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Suvij" + } + }, + { + "details": { + "forename": "Nithin" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "Alexandra" + } + }, + { + "details": { + "forename": "David" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer.graphql b/router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer.graphql new file mode 100644 index 0000000000..c11e07354d --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer.graphql @@ -0,0 +1,16 @@ +query { + a: findEmployees(criteria: { hasPets: true }) { + details { forename } + } + ... @defer { + b: findEmployees(criteria: { hasPets: false, nationality: GERMAN, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + } + c: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + d: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer.txt new file mode 100644 index 0000000000..b4089e2f54 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"a":[{"details":{"forename":"Stefan"}},{"details":{"forename":"Björn"}},{"details":{"forename":"Sergiy"}},{"details":{"forename":"Eelco"}},{"details":{"forename":"David"}}],"c":[{"details":{"forename":"David"}}],"d":[]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"b":[{"details":{"forename":"Jens"}},{"details":{"forename":"Alexandra"}}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.graphql b/router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.graphql new file mode 100644 index 0000000000..c11e07354d --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.graphql @@ -0,0 +1,16 @@ +query { + a: findEmployees(criteria: { hasPets: true }) { + details { forename } + } + ... @defer { + b: findEmployees(criteria: { hasPets: false, nationality: GERMAN, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + } + c: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + d: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.txt new file mode 100644 index 0000000000..b4089e2f54 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"a":[{"details":{"forename":"Stefan"}},{"details":{"forename":"Björn"}},{"details":{"forename":"Sergiy"}},{"details":{"forename":"Eelco"}},{"details":{"forename":"David"}}],"c":[{"details":{"forename":"David"}}],"d":[]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"b":[{"details":{"forename":"Jens"}},{"details":{"forename":"Alexandra"}}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.graphql b/router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.graphql new file mode 100644 index 0000000000..89a9628310 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.graphql @@ -0,0 +1,16 @@ +query { + a: findEmployees(criteria: { hasPets: true }) { + details { forename } + } + ... @defer { + b: findEmployees(criteria: { hasPets: false, nationality: GERMAN, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + c: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + } + d: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.txt b/router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.txt new file mode 100644 index 0000000000..87536489ad --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"a":[{"details":{"forename":"Stefan"}},{"details":{"forename":"Björn"}},{"details":{"forename":"Sergiy"}},{"details":{"forename":"Eelco"}},{"details":{"forename":"David"}}],"d":[]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"b":[{"details":{"forename":"Jens"}},{"details":{"forename":"Alexandra"}}],"c":[{"details":{"forename":"David"}}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.graphql b/router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.graphql new file mode 100644 index 0000000000..ce33bfc0f5 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.graphql @@ -0,0 +1,16 @@ +query { + ... @defer { + a: findEmployees(criteria: { hasPets: true }) { + details { forename } + } + b: findEmployees(criteria: { hasPets: false, nationality: GERMAN, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + c: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + d: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.txt b/router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.txt new file mode 100644 index 0000000000..bd10b3ceba --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"a":[{"details":{"forename":"Stefan"}},{"details":{"forename":"Björn"}},{"details":{"forename":"Sergiy"}},{"details":{"forename":"Eelco"}},{"details":{"forename":"David"}}],"b":[{"details":{"forename":"Jens"}},{"details":{"forename":"Alexandra"}}],"c":[{"details":{"forename":"David"}}],"d":[]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer.graphql b/router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer.graphql new file mode 100644 index 0000000000..db86f5f284 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer.graphql @@ -0,0 +1,18 @@ +query { + a: findEmployees(criteria: { hasPets: true }) { + details { forename } + } + ... @defer { + b: findEmployees(criteria: { hasPets: false, nationality: GERMAN, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + ... @defer { + c: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + } + } + d: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer.txt b/router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer.txt new file mode 100644 index 0000000000..b1ba78b462 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"a":[{"details":{"forename":"Stefan"}},{"details":{"forename":"Björn"}},{"details":{"forename":"Sergiy"}},{"details":{"forename":"Eelco"}},{"details":{"forename":"David"}}],"d":[]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"b":[{"details":{"forename":"Jens"}},{"details":{"forename":"Alexandra"}}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"c":[{"details":{"forename":"David"}}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.graphql b/router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.graphql new file mode 100644 index 0000000000..41c9c88d54 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.graphql @@ -0,0 +1,18 @@ +query { + ... @defer { + a: findEmployees(criteria: { hasPets: true }) { + details { forename } + } + b: findEmployees(criteria: { hasPets: false, nationality: GERMAN, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + ... @defer { + c: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + } + } + d: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.txt new file mode 100644 index 0000000000..b79079ef3a --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"d":[]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"a":[{"details":{"forename":"Stefan"}},{"details":{"forename":"Björn"}},{"details":{"forename":"Sergiy"}},{"details":{"forename":"Eelco"}},{"details":{"forename":"David"}}],"b":[{"details":{"forename":"Jens"}},{"details":{"forename":"Alexandra"}}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"c":[{"details":{"forename":"David"}}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers.graphql b/router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers.graphql new file mode 100644 index 0000000000..9a510df243 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers.graphql @@ -0,0 +1,18 @@ +query { + a: findEmployees(criteria: { hasPets: true }) { + details { forename } + } + ... @defer { + b: findEmployees(criteria: { hasPets: false, nationality: GERMAN, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + } + ... @defer { + c: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + } + d: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers.txt new file mode 100644 index 0000000000..b1ba78b462 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"a":[{"details":{"forename":"Stefan"}},{"details":{"forename":"Björn"}},{"details":{"forename":"Sergiy"}},{"details":{"forename":"Eelco"}},{"details":{"forename":"David"}}],"d":[]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"b":[{"details":{"forename":"Jens"}},{"details":{"forename":"Alexandra"}}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"c":[{"details":{"forename":"David"}}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.graphql b/router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.graphql new file mode 100644 index 0000000000..420f57b4b7 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.graphql @@ -0,0 +1,14 @@ +query { + a: findEmployees(criteria: { hasPets: true }) { + ... @defer { details { forename } } + } + b: findEmployees(criteria: { hasPets: false, nationality: GERMAN, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + c: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + d: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.txt b/router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.txt new file mode 100644 index 0000000000..4ea1ed1cd0 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"a":[{},{},{},{},{}],"b":[{"details":{"forename":"Jens"}},{"details":{"forename":"Alexandra"}}],"c":[{"details":{"forename":"David"}}],"d":[]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Stefan"}},"path":["a",0]},{"data":{"details":{"forename":"Björn"}},"path":["a",1]},{"data":{"details":{"forename":"Sergiy"}},"path":["a",2]},{"data":{"details":{"forename":"Eelco"}},"path":["a",3]},{"data":{"details":{"forename":"David"}},"path":["a",4]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.graphql b/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.graphql new file mode 100644 index 0000000000..ccefb87771 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.graphql @@ -0,0 +1,15 @@ +query { + a: findEmployees(criteria: { hasPets: true }) { + details { forename } + ... @defer { details { location { language } } } + } + b: findEmployees(criteria: { hasPets: false, nationality: GERMAN, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + c: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + d: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.txt new file mode 100644 index 0000000000..3f46f0d651 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"a":[{"details":{"forename":"Stefan"}},{"details":{"forename":"Björn"}},{"details":{"forename":"Sergiy"}},{"details":{"forename":"Eelco"}},{"details":{"forename":"David"}}],"b":[{"details":{"forename":"Jens"}},{"details":{"forename":"Alexandra"}}],"c":[{"details":{"forename":"David"}}],"d":[]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"location":{"language":"English"}},"path":["a",0,"details"]},{"data":{"location":{"language":"German"}},"path":["a",1,"details"]},{"data":{"location":{"language":"Ukrainian"}},"path":["a",2,"details"]},{"data":{"location":{"language":"Dutch"}},"path":["a",3,"details"]},{"data":{"location":{"language":"English"}},"path":["a",4,"details"]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.graphql b/router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.graphql new file mode 100644 index 0000000000..2739ee57e6 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.graphql @@ -0,0 +1,22 @@ +query { + ... @defer { + a: findEmployees(criteria: { hasPets: true }) { + details { forename } + } + } + ... @defer { + b: findEmployees(criteria: { hasPets: false, nationality: GERMAN, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + } + ... @defer { + c: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED } }) { + details { forename } + } + } + ... @defer { + d: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } + } +} diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.txt new file mode 100644 index 0000000000..c7b1492a48 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.txt @@ -0,0 +1,28 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"a":[{"details":{"forename":"Stefan"}},{"details":{"forename":"Björn"}},{"details":{"forename":"Sergiy"}},{"details":{"forename":"Eelco"}},{"details":{"forename":"David"}}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"b":[{"details":{"forename":"Jens"}},{"details":{"forename":"Alexandra"}}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"c":[{"details":{"forename":"David"}}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"d":[]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployees_original.json b/router-tests/testdata/queries_defer/findEmployees_original.json new file mode 100644 index 0000000000..82cdcebcfc --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_original.json @@ -0,0 +1,51 @@ +{ + "data": { + "a": [ + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "David" + } + } + ], + "b": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Alexandra" + } + } + ], + "c": [ + { + "details": { + "forename": "David" + } + } + ], + "d": [] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_01_single_defer.graphql b/router-tests/testdata/queries_defer/full_defer_01_single_defer.graphql new file mode 100644 index 0000000000..18563d5463 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_01_single_defer.graphql @@ -0,0 +1,17 @@ +query { + employees { id details { forename } } + employee(id: 1) { id details { forename location { language } } } + teammates(team: OPERATIONS) { id details { forename } products } + ... @defer { + productTypes { + ... on Documentation { url(product: SDK) } + ... on Consultancy { name lead { details { forename } } } + } + } + a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { + details { forename } + } + b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } +} diff --git a/router-tests/testdata/queries_defer/full_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/full_defer_01_single_defer.txt new file mode 100644 index 0000000000..266e459a45 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_01_single_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"productTypes":[{},{"name":"CONSULTANCY","lead":{"details":{"forename":"Jens"}}},{"url":"https://docs.wundergraph.com/"}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.graphql b/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.graphql new file mode 100644 index 0000000000..1823baafbb --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.graphql @@ -0,0 +1,17 @@ +query { + employees { id details { forename } } + ... @defer { + productTypes { + ... on Documentation { url(product: SDK) } + ... on Consultancy { name lead { details { forename } } } + } + } + employee(id: 1) { id details { forename location { language } } } + teammates(team: OPERATIONS) { id details { forename } products } + a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { + details { forename } + } + b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } +} diff --git a/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.txt new file mode 100644 index 0000000000..266e459a45 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"productTypes":[{},{"name":"CONSULTANCY","lead":{"details":{"forename":"Jens"}}},{"url":"https://docs.wundergraph.com/"}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.graphql b/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.graphql new file mode 100644 index 0000000000..25659f104d --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.graphql @@ -0,0 +1,17 @@ +query { + employees { id details { forename } } + employee(id: 1) { id details { forename location { language } } } + ... @defer { + teammates(team: OPERATIONS) { id details { forename } products } + productTypes { + ... on Documentation { url(product: SDK) } + ... on Consultancy { name lead { details { forename } } } + } + } + a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { + details { forename } + } + b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } +} diff --git a/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.txt b/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.txt new file mode 100644 index 0000000000..4886a5f13b --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"productTypes":[{},{"name":"CONSULTANCY","lead":{"details":{"forename":"Jens"}}},{"url":"https://docs.wundergraph.com/"}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.graphql b/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.graphql new file mode 100644 index 0000000000..4640d6a35c --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.graphql @@ -0,0 +1,17 @@ +query { + ... @defer { + employees { id details { forename } } + employee(id: 1) { id details { forename location { language } } } + teammates(team: OPERATIONS) { id details { forename } products } + productTypes { + ... on Documentation { url(product: SDK) } + ... on Consultancy { name lead { details { forename } } } + } + a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { + details { forename } + } + b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } + } +} diff --git a/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.txt b/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.txt new file mode 100644 index 0000000000..af15dab45c --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"productTypes":[{},{"name":"CONSULTANCY","lead":{"details":{"forename":"Jens"}}},{"url":"https://docs.wundergraph.com/"}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_05_nested_defer.graphql b/router-tests/testdata/queries_defer/full_defer_05_nested_defer.graphql new file mode 100644 index 0000000000..6025cb8e30 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_05_nested_defer.graphql @@ -0,0 +1,15 @@ +query { + employees { id details { forename } } + ... @defer { + employee(id: 1) { id details { forename location { language } } } + ... @defer { + teammates(team: OPERATIONS) { id details { forename } products } + } + } + a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { + details { forename } + } + b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } +} diff --git a/router-tests/testdata/queries_defer/full_defer_05_nested_defer.txt b/router-tests/testdata/queries_defer/full_defer_05_nested_defer.txt new file mode 100644 index 0000000000..743db1957d --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_05_nested_defer.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}}},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.graphql b/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.graphql new file mode 100644 index 0000000000..9a75d0c7ef --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.graphql @@ -0,0 +1,19 @@ +query { + ... @defer { + employees { id details { forename } } + employee(id: 1) { id details { forename location { language } } } + ... @defer { + teammates(team: OPERATIONS) { id details { forename } products } + productTypes { + ... on Documentation { url(product: SDK) } + ... on Consultancy { name lead { details { forename } } } + } + } + } + a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { + details { forename } + } + b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } +} diff --git a/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.txt new file mode 100644 index 0000000000..7bc5b9b5f4 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}}},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"productTypes":[{},{"name":"CONSULTANCY","lead":{"details":{"forename":"Jens"}}},{"url":"https://docs.wundergraph.com/"}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_07_parallel_defers.graphql b/router-tests/testdata/queries_defer/full_defer_07_parallel_defers.graphql new file mode 100644 index 0000000000..56bcdcc26e --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_07_parallel_defers.graphql @@ -0,0 +1,17 @@ +query { + employees { id details { forename } } + employee(id: 1) { id details { forename location { language } } } + ... @defer { teammates(team: OPERATIONS) { id details { forename } products } } + ... @defer { + productTypes { + ... on Documentation { url(product: SDK) } + ... on Consultancy { name lead { details { forename } } } + } + } + a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { + details { forename } + } + b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } +} diff --git a/router-tests/testdata/queries_defer/full_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/full_defer_07_parallel_defers.txt new file mode 100644 index 0000000000..6618ea407f --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_07_parallel_defers.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"productTypes":[{},{"name":"CONSULTANCY","lead":{"details":{"forename":"Jens"}}},{"url":"https://docs.wundergraph.com/"}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.graphql b/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.graphql new file mode 100644 index 0000000000..11b9ca344c --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.graphql @@ -0,0 +1,21 @@ +query { + employees { id details { forename } } + employee(id: 1) { + id + ... @defer { details { forename location { language } } } + } + teammates(team: OPERATIONS) { id details { forename } products } + productTypes { + ... on Documentation { url(product: SDK) } + ... on Consultancy { + name + ... @defer { lead { details { forename } } } + } + } + a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { + details { forename } + } + b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } +} diff --git a/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.txt b/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.txt new file mode 100644 index 0000000000..368f75257f --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"employee":{"id":1},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"productTypes":[{},{"name":"CONSULTANCY"},{"url":"https://docs.wundergraph.com/"}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens","location":{"language":"German"}}},"path":["employee"]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"details":{"forename":"Jens"}}},"path":["productTypes",1]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.graphql b/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.graphql new file mode 100644 index 0000000000..7607c33b7e --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.graphql @@ -0,0 +1,19 @@ +query { + employees { id details { forename } } + employee(id: 1) { + id + details { forename } + ... @defer { details { location { language } } } + } + teammates(team: OPERATIONS) { id details { forename } products } + productTypes { + ... on Documentation { url(product: SDK) } + ... on Consultancy { name lead { details { forename } } } + } + a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { + details { forename } + } + b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } +} diff --git a/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.txt new file mode 100644 index 0000000000..b45ab90249 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"employee":{"id":1,"details":{"forename":"Jens"}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"productTypes":[{},{"name":"CONSULTANCY","lead":{"details":{"forename":"Jens"}}},{"url":"https://docs.wundergraph.com/"}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"location":{"language":"German"}},"path":["employee","details"]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.graphql b/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.graphql new file mode 100644 index 0000000000..362913fea2 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.graphql @@ -0,0 +1,21 @@ +query { + ... @defer { employees { id details { forename } } } + ... @defer { employee(id: 1) { id details { forename location { language } } } } + ... @defer { teammates(team: OPERATIONS) { id details { forename } products } } + ... @defer { + productTypes { + ... on Documentation { url(product: SDK) } + ... on Consultancy { name lead { details { forename } } } + } + } + ... @defer { + a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { + details { forename } + } + } + ... @defer { + b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } + } +} diff --git a/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.txt new file mode 100644 index 0000000000..d3c620d53b --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.txt @@ -0,0 +1,38 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}}},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"productTypes":[{},{"name":"CONSULTANCY","lead":{"details":{"forename":"Jens"}}},{"url":"https://docs.wundergraph.com/"}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"a":[{"details":{"forename":"Sergiy"}}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"b":[{"details":{"forename":"Björn"}}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql b/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql new file mode 100644 index 0000000000..e98381861a --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql @@ -0,0 +1,18 @@ +fragment EmployeeDetailsFragment on Employee { + details { + forename + location { language } + } + ... @defer { notes } +} + +query { + employees { + id + ...EmployeeDetailsFragment @defer + } + teammates(team: OPERATIONS) { + id + products + } +} diff --git a/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt b/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt new file mode 100644 index 0000000000..f4b4e59f92 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":7},{"id":8},{"id":10},{"id":11},{"id":12}],"teammates":[{"id":4,"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"products":["FINANCE"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens","location":{"language":"German"}}},"path":["employees",0]},{"data":{"details":{"forename":"Dustin","location":{"language":"German"}}},"path":["employees",1]},{"data":{"details":{"forename":"Stefan","location":{"language":"English"}}},"path":["employees",2]},{"data":{"details":{"forename":"Björn","location":{"language":"German"}}},"path":["employees",3]},{"data":{"details":{"forename":"Sergiy","location":{"language":"Ukrainian"}}},"path":["employees",4]},{"data":{"details":{"forename":"Suvij","location":{"language":"Hindi"}}},"path":["employees",5]},{"data":{"details":{"forename":"Nithin","location":{"language":"Hindi"}}},"path":["employees",6]},{"data":{"details":{"forename":"Eelco","location":{"language":"Dutch"}}},"path":["employees",7]},{"data":{"details":{"forename":"Alexandra","location":{"language":"German"}}},"path":["employees",8]},{"data":{"details":{"forename":"David","location":{"language":"English"}}},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"notes":"Jens notes resolved by products"},"path":["employees",0]},{"data":{"notes":"Dustin notes resolved by products"},"path":["employees",1]},{"data":{"notes":"Stefan notes resolved by products"},"path":["employees",2]},{"data":{"notes":"Björn notes resolved by products"},"path":["employees",3]},{"data":{"notes":"Sergiy notes resolved by products"},"path":["employees",4]},{"data":{"notes":"Suvij notes resolved by products"},"path":["employees",5]},{"data":{"notes":"Nithin notes resolved by products"},"path":["employees",6]},{"data":{"notes":"Eelco notes resolved by products"},"path":["employees",7]},{"data":{"notes":"Alexandra notes resolved by products"},"path":["employees",8]},{"data":{"notes":"David notes resolved by products"},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql b/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql new file mode 100644 index 0000000000..e3122d71ea --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql @@ -0,0 +1,18 @@ +fragment EmployeeDetailsFragment on Employee { + details { + forename + location { language } + } + ... @defer { notes } +} + +query { + employees { + id + ...EmployeeDetailsFragment + } + teammates(team: OPERATIONS) { + id + products + } +} diff --git a/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.txt b/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.txt new file mode 100644 index 0000000000..a4b1f25077 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},{"id":2,"details":{"forename":"Dustin","location":{"language":"German"}}},{"id":3,"details":{"forename":"Stefan","location":{"language":"English"}}},{"id":4,"details":{"forename":"Björn","location":{"language":"German"}}},{"id":5,"details":{"forename":"Sergiy","location":{"language":"Ukrainian"}}},{"id":7,"details":{"forename":"Suvij","location":{"language":"Hindi"}}},{"id":8,"details":{"forename":"Nithin","location":{"language":"Hindi"}}},{"id":10,"details":{"forename":"Eelco","location":{"language":"Dutch"}}},{"id":11,"details":{"forename":"Alexandra","location":{"language":"German"}}},{"id":12,"details":{"forename":"David","location":{"language":"English"}}}],"teammates":[{"id":4,"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"products":["FINANCE"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"notes":"Jens notes resolved by products"},"path":["employees",0]},{"data":{"notes":"Dustin notes resolved by products"},"path":["employees",1]},{"data":{"notes":"Stefan notes resolved by products"},"path":["employees",2]},{"data":{"notes":"Björn notes resolved by products"},"path":["employees",3]},{"data":{"notes":"Sergiy notes resolved by products"},"path":["employees",4]},{"data":{"notes":"Suvij notes resolved by products"},"path":["employees",5]},{"data":{"notes":"Nithin notes resolved by products"},"path":["employees",6]},{"data":{"notes":"Eelco notes resolved by products"},"path":["employees",7]},{"data":{"notes":"Alexandra notes resolved by products"},"path":["employees",8]},{"data":{"notes":"David notes resolved by products"},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql b/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql new file mode 100644 index 0000000000..c1404e6435 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql @@ -0,0 +1,18 @@ +fragment EmployeeDetailsFragment on Employee { + details { + forename + location { language } + } + notes +} + +query { + employees { + id + ...EmployeeDetailsFragment @defer + } + teammates(team: OPERATIONS) { + id + products + } +} diff --git a/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt b/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt new file mode 100644 index 0000000000..601298d192 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"employees":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":7},{"id":8},{"id":10},{"id":11},{"id":12}],"teammates":[{"id":4,"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"products":["FINANCE"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens","location":{"language":"German"}},"notes":"Jens notes resolved by products"},"path":["employees",0]},{"data":{"details":{"forename":"Dustin","location":{"language":"German"}},"notes":"Dustin notes resolved by products"},"path":["employees",1]},{"data":{"details":{"forename":"Stefan","location":{"language":"English"}},"notes":"Stefan notes resolved by products"},"path":["employees",2]},{"data":{"details":{"forename":"Björn","location":{"language":"German"}},"notes":"Björn notes resolved by products"},"path":["employees",3]},{"data":{"details":{"forename":"Sergiy","location":{"language":"Ukrainian"}},"notes":"Sergiy notes resolved by products"},"path":["employees",4]},{"data":{"details":{"forename":"Suvij","location":{"language":"Hindi"}},"notes":"Suvij notes resolved by products"},"path":["employees",5]},{"data":{"details":{"forename":"Nithin","location":{"language":"Hindi"}},"notes":"Nithin notes resolved by products"},"path":["employees",6]},{"data":{"details":{"forename":"Eelco","location":{"language":"Dutch"}},"notes":"Eelco notes resolved by products"},"path":["employees",7]},{"data":{"details":{"forename":"Alexandra","location":{"language":"German"}},"notes":"Alexandra notes resolved by products"},"path":["employees",8]},{"data":{"details":{"forename":"David","location":{"language":"English"}},"notes":"David notes resolved by products"},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/full_original.json b/router-tests/testdata/queries_defer/full_original.json new file mode 100644 index 0000000000..2198cb4313 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_original.json @@ -0,0 +1,730 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "Serbian", + "key": { + "name": "Serbia" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German", + "key": { + "name": "Germany" + } + }, + { + "language": "Indonesian", + "key": { + "name": "Indonesia" + } + }, + { + "language": "Dutch", + "key": { + "name": "Netherlands" + } + }, + { + "language": "Portuguese", + "key": { + "name": "Portugal" + } + }, + { + "language": "Spanish", + "key": { + "name": "Spain" + } + }, + { + "language": "Thai", + "key": { + "name": "Thailand" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "Korean", + "key": { + "name": "Korea" + } + }, + { + "language": "Taiwanese", + "key": { + "name": "Taiwan" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ], + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + } + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ], + "productTypes": [ + {}, + { + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "url": "https://docs.wundergraph.com/", + "urls": [ + "https://cosmo-docs.wundergraph.com/", + "https://wundergraph.com/pricing" + ] + } + ], + "a": [ + { + "details": { + "forename": "Sergiy" + } + } + ], + "b": [ + { + "details": { + "forename": "Björn" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_01_single_defer.graphql b/router-tests/testdata/queries_defer/products_defer_01_single_defer.graphql new file mode 100644 index 0000000000..e49e304fca --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_01_single_defer.graphql @@ -0,0 +1,14 @@ +query { + products { + upc + ... on Cosmo { name repositoryURL lead { details { forename } } } + ... on SDK { clientLanguages unicode owner { details { forename } } } + } + ... @defer { + productTypes { + __typename + ... on Documentation { url(product: COSMO) } + ... on Consultancy { name lead { details { forename } } } + } + } +} diff --git a/router-tests/testdata/queries_defer/products_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/products_defer_01_single_defer.txt new file mode 100644 index 0000000000..dbb83bd530 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_01_single_defer.txt @@ -0,0 +1,6 @@ + +--graphql +Content-Type: application/json + +{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} +--graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql b/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql new file mode 100644 index 0000000000..21d83cb0cb --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql @@ -0,0 +1,13 @@ +query { + products { + upc + ... on Cosmo { name repositoryURL } + } + ... @defer { + productTypes { + __typename + ... on Documentation { url(product: COSMO) } + ... on Consultancy { name lead { details { forename } } } + } + } +} diff --git a/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt new file mode 100644 index 0000000000..dbb83bd530 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt @@ -0,0 +1,6 @@ + +--graphql +Content-Type: application/json + +{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} +--graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql b/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql new file mode 100644 index 0000000000..2d154b3404 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql @@ -0,0 +1,15 @@ +query { + products { + upc + ... on Cosmo { + name + ... @defer { repositoryURL lead { details { forename } } } + } + ... on SDK { clientLanguages unicode owner { details { forename } } } + } + productTypes { + __typename + ... on Documentation { url(product: COSMO) } + ... on Consultancy { name lead { details { forename } } } + } +} diff --git a/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.txt b/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.txt new file mode 100644 index 0000000000..dbb83bd530 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.txt @@ -0,0 +1,6 @@ + +--graphql +Content-Type: application/json + +{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} +--graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql b/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql new file mode 100644 index 0000000000..d0c91a5dcd --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql @@ -0,0 +1,14 @@ +query { + ... @defer { + products { + upc + ... on Cosmo { name repositoryURL lead { details { forename } } } + ... on SDK { clientLanguages unicode owner { details { forename } } } + } + productTypes { + __typename + ... on Documentation { url(product: COSMO) } + ... on Consultancy { name lead { details { forename } } } + } + } +} diff --git a/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.txt b/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.txt new file mode 100644 index 0000000000..dbb83bd530 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.txt @@ -0,0 +1,6 @@ + +--graphql +Content-Type: application/json + +{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} +--graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_05_nested_defer.graphql b/router-tests/testdata/queries_defer/products_defer_05_nested_defer.graphql new file mode 100644 index 0000000000..809bbfc571 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_05_nested_defer.graphql @@ -0,0 +1,17 @@ +query { + products { + upc + ... on Cosmo { + name + ... @defer { + repositoryURL + ... @defer { lead { details { forename } } } + } + } + } + productTypes { + __typename + ... on Documentation { url(product: COSMO) } + ... on Consultancy { name lead { details { forename } } } + } +} diff --git a/router-tests/testdata/queries_defer/products_defer_05_nested_defer.txt b/router-tests/testdata/queries_defer/products_defer_05_nested_defer.txt new file mode 100644 index 0000000000..dbb83bd530 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_05_nested_defer.txt @@ -0,0 +1,6 @@ + +--graphql +Content-Type: application/json + +{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} +--graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql b/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql new file mode 100644 index 0000000000..73f317c3b4 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql @@ -0,0 +1,16 @@ +query { + ... @defer { + products { + upc + ... on Cosmo { + name + ... @defer { repositoryURL lead { details { forename } } } + } + } + } + productTypes { + __typename + ... on Documentation { url(product: COSMO) } + ... on Consultancy { name lead { details { forename } } } + } +} diff --git a/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.txt new file mode 100644 index 0000000000..dbb83bd530 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.txt @@ -0,0 +1,6 @@ + +--graphql +Content-Type: application/json + +{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} +--graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.graphql b/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.graphql new file mode 100644 index 0000000000..56b54e6506 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.graphql @@ -0,0 +1,15 @@ +query { + products { + upc + ... on Cosmo { + name + ... @defer { repositoryURL } + ... @defer { lead { details { forename } } } + } + } + productTypes { + __typename + ... on Documentation { url(product: COSMO) } + ... on Consultancy { name lead { details { forename } } } + } +} diff --git a/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.txt new file mode 100644 index 0000000000..dbb83bd530 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.txt @@ -0,0 +1,6 @@ + +--graphql +Content-Type: application/json + +{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} +--graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.graphql b/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.graphql new file mode 100644 index 0000000000..c329a53f6c --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.graphql @@ -0,0 +1,18 @@ +query { + products { + upc + ... on Cosmo { + name + repositoryURL + ... @defer { lead { details { forename } } } + } + } + productTypes { + __typename + ... on Documentation { url(product: COSMO) } + ... on Consultancy { + name + ... @defer { lead { details { forename } } } + } + } +} diff --git a/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.txt b/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.txt new file mode 100644 index 0000000000..dbb83bd530 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.txt @@ -0,0 +1,6 @@ + +--graphql +Content-Type: application/json + +{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} +--graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql b/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql new file mode 100644 index 0000000000..2857e1efda --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql @@ -0,0 +1,15 @@ +query { + products { + upc + ... on Cosmo { + name + lead { details { forename } } + ... @defer { lead { details { forename } } repositoryURL } + } + } + productTypes { + __typename + ... on Documentation { url(product: COSMO) } + ... on Consultancy { name lead { details { forename } } } + } +} diff --git a/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.txt new file mode 100644 index 0000000000..dbb83bd530 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.txt @@ -0,0 +1,6 @@ + +--graphql +Content-Type: application/json + +{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} +--graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.graphql b/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.graphql new file mode 100644 index 0000000000..35f484bb1d --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.graphql @@ -0,0 +1,26 @@ +query { + ... @defer { + products { + ... @defer { upc } + ... on Cosmo { + ... @defer { name } + ... @defer { repositoryURL } + ... @defer { lead { details { forename } } } + } + ... on SDK { + ... @defer { clientLanguages } + ... @defer { unicode } + ... @defer { owner { details { forename } } } + } + } + } + ... @defer { + productTypes { + ... on Documentation { ... @defer { url(product: COSMO) } } + ... on Consultancy { + ... @defer { name } + ... @defer { lead { details { forename } } } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.txt new file mode 100644 index 0000000000..dbb83bd530 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.txt @@ -0,0 +1,6 @@ + +--graphql +Content-Type: application/json + +{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} +--graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql new file mode 100644 index 0000000000..09a3d074db --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql @@ -0,0 +1,18 @@ +fragment CosmoDetails on Cosmo { + name + repositoryURL + ... @defer { lead { details { forename } } } +} + +query { + products { + upc + ...CosmoDetails @defer + } + productTypes { + ... on Consultancy { + name + lead { details { forename } } + } + } +} diff --git a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt new file mode 100644 index 0000000000..dbb83bd530 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt @@ -0,0 +1,6 @@ + +--graphql +Content-Type: application/json + +{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} +--graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql b/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql new file mode 100644 index 0000000000..415227e6ca --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql @@ -0,0 +1,18 @@ +fragment CosmoDetails on Cosmo { + name + ... @defer { repositoryURL } + ... @defer { lead { details { forename } } } +} + +query { + products { + upc + ...CosmoDetails + } + productTypes { + ... on Consultancy { + name + lead { details { forename } } + } + } +} diff --git a/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.txt b/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.txt new file mode 100644 index 0000000000..dbb83bd530 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.txt @@ -0,0 +1,6 @@ + +--graphql +Content-Type: application/json + +{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} +--graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql b/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql new file mode 100644 index 0000000000..9d1a1bcb4f --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql @@ -0,0 +1,25 @@ +fragment CosmoDetails on Cosmo { + name + repositoryURL + lead { details { forename } } +} + +fragment SDKDetails on SDK { + clientLanguages + unicode + owner { details { forename } } +} + +query { + products { + upc + ...CosmoDetails @defer + ...SDKDetails @defer + } + productTypes { + ... on Consultancy { + name + lead { details { forename } } + } + } +} diff --git a/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt b/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt new file mode 100644 index 0000000000..dbb83bd530 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt @@ -0,0 +1,6 @@ + +--graphql +Content-Type: application/json + +{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} +--graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_original.json b/router-tests/testdata/queries_defer/products_original.json new file mode 100644 index 0000000000..cb006baa1f --- /dev/null +++ b/router-tests/testdata/queries_defer/products_original.json @@ -0,0 +1,55 @@ +{ + "data": { + "products": [ + {}, + { + "name": "COSMO", + "lead": { + "details": { + "forename": "Dustin" + } + }, + "repositoryURL": "https://github.com/wundergraph/cosmo", + "upc": "cosmo" + }, + { + "owner": { + "details": { + "forename": "Jens" + } + }, + "clientLanguages": [ + "RUST", + "TYPESCRIPT" + ], + "unicode": "😀♥!\u0015\u0010🝥", + "upc": "sdk" + } + ], + "productTypes": [ + { + "__typename": "Cosmo", + "upc": "cosmo" + }, + { + "__typename": "Consultancy", + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "__typename": "Documentation", + "url": "https://cosmo-docs.wundergraph.com/", + "urls": [ + "https://cal.com/stefan-avram-wundergraph/wundergraph-introduction", + "https://github.com/wundergraph/graphql-go-tools/blob/master/README.md", + "N/A", + "https://docs.wundergraph.com/" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/queries_with_errors.txt b/router-tests/testdata/queries_defer/queries_with_errors.txt new file mode 100644 index 0000000000..72a4a601c6 --- /dev/null +++ b/router-tests/testdata/queries_defer/queries_with_errors.txt @@ -0,0 +1,23 @@ +products_01_single_defer +products_02_single_defer_between_regular +products_03_multiple_fields_deferred +products_04_all_fields_deferred +products_05_nested_defer +products_06_nested_defer_variation +products_07_parallel_defers +products_08_defer_nested_object +products_09_duplicated_field_across_defer +products_10_extensive_parallel +products_11_fragment_around_and_inside +products_12_fragment_body_defer +products_13_fragment_spread_defer +requires_different_depth_08_defer_nested_object +requires_different_depth_09_duplicated_field_across_defer +requires_different_depth_10_extensive_parallel +requires_different_depth_11_fragment_around_and_inside +requires_different_depth_12_fragment_body_defer +requires_mood_08_defer_nested_object +requires_mood_09_duplicated_field_across_defer +requires_mood_10_extensive_parallel +requires_mood_11_fragment_around_and_inside +requires_mood_12_fragment_body_defer \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.graphql b/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.graphql new file mode 100644 index 0000000000..2601c955c8 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.graphql @@ -0,0 +1,15 @@ +query Requires { + products { + __typename + ... on Consultancy { + ... @defer { + lead { + __typename + id + derivedMood + } + isLeadAvailable + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.txt new file mode 100644 index 0000000000..c88212cae5 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"products":[{"__typename":"Consultancy"},{"__typename":"Cosmo"},{"__typename":"SDK"}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"},"isLeadAvailable":false},"path":["products",0]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.graphql b/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.graphql new file mode 100644 index 0000000000..66526603a7 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.graphql @@ -0,0 +1,15 @@ +query Requires { + products { + __typename + ... on Consultancy { + isLeadAvailable + ... @defer { + lead { + __typename + id + derivedMood + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.txt new file mode 100644 index 0000000000..568357bf74 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"products":[{"__typename":"Consultancy","isLeadAvailable":false},{"__typename":"Cosmo"},{"__typename":"SDK"}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.graphql b/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.graphql new file mode 100644 index 0000000000..18d83bf7a2 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.graphql @@ -0,0 +1,15 @@ +query Requires { + products { + __typename + ... on Consultancy { + ... @defer { isLeadAvailable } + ... @defer { + lead { + __typename + id + derivedMood + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.txt new file mode 100644 index 0000000000..8cc4e14159 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"products":[{"__typename":"Consultancy"},{"__typename":"Cosmo"},{"__typename":"SDK"}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"isLeadAvailable":false},"path":["products",0]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.graphql b/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.graphql new file mode 100644 index 0000000000..a95176e816 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.graphql @@ -0,0 +1,15 @@ +query Requires { + ... @defer { + products { + __typename + ... on Consultancy { + lead { + __typename + id + derivedMood + } + isLeadAvailable + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.txt new file mode 100644 index 0000000000..d2012bcc03 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"products":[{"lead":{"id":1,"derivedMood":"HAPPY"},"isLeadAvailable":false},{},{}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.graphql b/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.graphql new file mode 100644 index 0000000000..d9a261fa0e --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.graphql @@ -0,0 +1,17 @@ +query Requires { + ... @defer { + products { + __typename + ... on Consultancy { + ... @defer { + lead { + __typename + id + derivedMood + } + isLeadAvailable + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.txt new file mode 100644 index 0000000000..a8cf2f2d2f --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"products":[{},{},{}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"},"isLeadAvailable":false},"path":["products",0]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.graphql b/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.graphql new file mode 100644 index 0000000000..56b45c742a --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.graphql @@ -0,0 +1,15 @@ +query Requires { + ... @defer { + products { + __typename + ... on Consultancy { + isLeadAvailable + lead { + __typename + id + derivedMood + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt new file mode 100644 index 0000000000..c25a34435f --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"products":[{"isLeadAvailable":false,"lead":{"id":1,"derivedMood":"HAPPY"}},{},{}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.graphql b/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.graphql new file mode 100644 index 0000000000..bcfc0271b4 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.graphql @@ -0,0 +1,16 @@ +query Requires { + products { + __typename + ... on Consultancy { + ... @defer { name } + ... @defer { isLeadAvailable } + ... @defer { + lead { + __typename + id + derivedMood + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt new file mode 100644 index 0000000000..7281fe57e9 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt @@ -0,0 +1,23 @@ + +--graphql +Content-Type: application/json + +{"data":{"products":[{"__typename":"Consultancy"},{"__typename":"Cosmo"},{"__typename":"SDK"}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"name":"CONSULTANCY"},"path":["products",0]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"isLeadAvailable":false},"path":["products",0]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.graphql b/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.graphql new file mode 100644 index 0000000000..ba5d41e5dd --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.graphql @@ -0,0 +1,13 @@ +query Requires { + products { + __typename + ... on Consultancy { + isLeadAvailable + lead { + __typename + id + ... @defer { derivedMood } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.txt new file mode 100644 index 0000000000..c70b157c4c --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.txt @@ -0,0 +1,12 @@ + +--graphql +Content-Type: application/json + +{"data":{"products":[{"__typename":"Consultancy","isLeadAvailable":false,"lead":{"__typename":"Employee","id":1}},{"__typename":"Cosmo"},{"__typename":"SDK"}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} + +--graphql \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.graphql b/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.graphql new file mode 100644 index 0000000000..9cf3c1facb --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.graphql @@ -0,0 +1,12 @@ +query Requires { + products { + __typename + ... on Consultancy { + lead { __typename id } + ... @defer { + lead { derivedMood } + isLeadAvailable + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.txt new file mode 100644 index 0000000000..95b12f2de7 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.txt @@ -0,0 +1,12 @@ + +--graphql +Content-Type: application/json + +{"data":{"products":[{"__typename":"Consultancy","lead":{"__typename":"Employee","id":1}},{"__typename":"Cosmo"},{"__typename":"SDK"}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":null,"path":["products",0],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} + +--graphql \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.graphql b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.graphql new file mode 100644 index 0000000000..11c5eb2a4c --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.graphql @@ -0,0 +1,18 @@ +query Requires { + ... @defer { + products { + __typename + ... on Consultancy { + ... @defer { name } + ... @defer { isLeadAvailable } + ... @defer { + lead { + __typename + ... @defer { id } + ... @defer { derivedMood } + } + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt new file mode 100644 index 0000000000..1177d54847 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt @@ -0,0 +1,37 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"products":[{},{},{}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"name":"CONSULTANCY"},"path":["products",0]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"isLeadAvailable":false},"path":["products",0]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{}},"path":["products",0]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"id":1},"path":["products",0,"lead"]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} + +--graphql \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.graphql b/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.graphql new file mode 100644 index 0000000000..bdd080a8fd --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.graphql @@ -0,0 +1,15 @@ +fragment ConsultancyDetails on Consultancy { + isLeadAvailable + lead { + __typename + id + ... @defer { derivedMood } + } +} + +query Requires { + products { + __typename + ...ConsultancyDetails @defer + } +} diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt new file mode 100644 index 0000000000..54bb3f4f3d --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt @@ -0,0 +1,17 @@ + +--graphql +Content-Type: application/json + +{"data":{"products":[{"__typename":"Consultancy"},{"__typename":"Cosmo"},{"__typename":"SDK"}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"isLeadAvailable":false,"lead":{"id":1}},"path":["products",0]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} + +--graphql \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.graphql b/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.graphql new file mode 100644 index 0000000000..0119bac569 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.graphql @@ -0,0 +1,15 @@ +fragment ConsultancyDetails on Consultancy { + isLeadAvailable + lead { + __typename + id + ... @defer { derivedMood } + } +} + +query Requires { + products { + __typename + ...ConsultancyDetails + } +} diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.txt new file mode 100644 index 0000000000..c70b157c4c --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.txt @@ -0,0 +1,12 @@ + +--graphql +Content-Type: application/json + +{"data":{"products":[{"__typename":"Consultancy","isLeadAvailable":false,"lead":{"__typename":"Employee","id":1}},{"__typename":"Cosmo"},{"__typename":"SDK"}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} + +--graphql \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.graphql b/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.graphql new file mode 100644 index 0000000000..8250ac9d1b --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.graphql @@ -0,0 +1,15 @@ +fragment ConsultancyDetails on Consultancy { + isLeadAvailable + lead { + __typename + id + derivedMood + } +} + +query Requires { + products { + __typename + ...ConsultancyDetails @defer + } +} diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.txt new file mode 100644 index 0000000000..beb0af0d86 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"products":[{"__typename":"Consultancy"},{"__typename":"Cosmo"},{"__typename":"SDK"}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"isLeadAvailable":false,"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_original.json b/router-tests/testdata/queries_defer/requires_different_depth_original.json new file mode 100644 index 0000000000..e984c43f01 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_original.json @@ -0,0 +1,21 @@ +{ + "data": { + "products": [ + { + "__typename": "Consultancy", + "lead": { + "__typename": "Employee", + "id": 1, + "derivedMood": "HAPPY" + }, + "isLeadAvailable": false + }, + { + "__typename": "Cosmo" + }, + { + "__typename": "SDK" + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.graphql new file mode 100644 index 0000000000..92eae02426 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.graphql @@ -0,0 +1,13 @@ +query RequiresMood { + products { + ... on Consultancy { + ... @defer { + lead { + __typename + id + derivedMood + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.txt new file mode 100644 index 0000000000..4e12ff81e1 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"products":[{},{},{}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.graphql new file mode 100644 index 0000000000..b7ae8a780e --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.graphql @@ -0,0 +1,14 @@ +query RequiresMood { + products { + ... on Consultancy { + name + ... @defer { + lead { + __typename + id + derivedMood + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.txt new file mode 100644 index 0000000000..3a1bc5fc71 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"products":[{"name":"CONSULTANCY"},{},{}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.graphql new file mode 100644 index 0000000000..56a1ef94a8 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.graphql @@ -0,0 +1,14 @@ +query RequiresMood { + products { + ... on Consultancy { + ... @defer { name } + ... @defer { + lead { + __typename + id + derivedMood + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.txt b/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.txt new file mode 100644 index 0000000000..82d5010729 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{"products":[{},{},{}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"name":"CONSULTANCY"},"path":["products",0]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.graphql new file mode 100644 index 0000000000..cbff26083c --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.graphql @@ -0,0 +1,13 @@ +query RequiresMood { + ... @defer { + products { + ... on Consultancy { + lead { + __typename + id + derivedMood + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.txt b/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.txt new file mode 100644 index 0000000000..3322d49030 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"products":[{"lead":{"id":1,"derivedMood":"HAPPY"}},{},{}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer.graphql new file mode 100644 index 0000000000..35c652381a --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer.graphql @@ -0,0 +1,15 @@ +query RequiresMood { + ... @defer { + products { + ... on Consultancy { + ... @defer { + lead { + __typename + id + derivedMood + } + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer.txt b/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer.txt new file mode 100644 index 0000000000..6a5e2a52cc --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"products":[{},{},{}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.graphql new file mode 100644 index 0000000000..1b91f97a3c --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.graphql @@ -0,0 +1,14 @@ +query RequiresMood { + ... @defer { + products { + ... on Consultancy { + name + lead { + __typename + id + derivedMood + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.txt new file mode 100644 index 0000000000..7b374861e3 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"products":[{"name":"CONSULTANCY","lead":{"id":1,"derivedMood":"HAPPY"}},{},{}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.graphql new file mode 100644 index 0000000000..9336f2f375 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.graphql @@ -0,0 +1,20 @@ +query RequiresMood { + ... @defer { + products { + ... on Consultancy { + name + } + } + } + ... @defer { + products { + ... on Consultancy { + lead { + __typename + id + derivedMood + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.txt new file mode 100644 index 0000000000..04363821ba --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.txt @@ -0,0 +1,18 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"products":[{"name":"CONSULTANCY"},{},{}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.graphql new file mode 100644 index 0000000000..ece75c91af --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.graphql @@ -0,0 +1,12 @@ +query RequiresMood { + products { + ... on Consultancy { + name + lead { + __typename + id + ... @defer { derivedMood } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.txt b/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.txt new file mode 100644 index 0000000000..d8e5a749f3 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.txt @@ -0,0 +1,12 @@ + +--graphql +Content-Type: application/json + +{"data":{"products":[{"name":"CONSULTANCY","lead":{"__typename":"Employee","id":1}},{},{}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} + +--graphql \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.graphql new file mode 100644 index 0000000000..0d94d5e759 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.graphql @@ -0,0 +1,11 @@ +query RequiresMood { + products { + ... on Consultancy { + lead { __typename id } + ... @defer { + lead { derivedMood } + name + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.txt new file mode 100644 index 0000000000..4c9b9a75ea --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.txt @@ -0,0 +1,12 @@ + +--graphql +Content-Type: application/json + +{"data":{"products":[{"lead":{"__typename":"Employee","id":1}},{},{}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":null,"path":["products",0],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} + +--graphql \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.graphql new file mode 100644 index 0000000000..0c219afc18 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.graphql @@ -0,0 +1,16 @@ +query RequiresMood { + ... @defer { + products { + ... on Consultancy { + ... @defer { name } + ... @defer { + lead { + __typename + ... @defer { id } + ... @defer { derivedMood } + } + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt new file mode 100644 index 0000000000..2a2c0a9288 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt @@ -0,0 +1,32 @@ + +--graphql +Content-Type: application/json + +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"products":[{},{},{}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"name":"CONSULTANCY"},"path":["products",0]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{}},"path":["products",0]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"id":1},"path":["products",0,"lead"]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} + +--graphql \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.graphql new file mode 100644 index 0000000000..04528c5812 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.graphql @@ -0,0 +1,14 @@ +fragment ConsultancyLead on Consultancy { + name + lead { + __typename + id + ... @defer { derivedMood } + } +} + +query RequiresMood { + products { + ...ConsultancyLead @defer + } +} diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.txt b/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.txt new file mode 100644 index 0000000000..51b827412d --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.txt @@ -0,0 +1,17 @@ + +--graphql +Content-Type: application/json + +{"data":{"products":[{},{},{}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"name":"CONSULTANCY","lead":{"id":1}},"path":["products",0]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} + +--graphql \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.graphql new file mode 100644 index 0000000000..acd30344b5 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.graphql @@ -0,0 +1,14 @@ +fragment ConsultancyLead on Consultancy { + name + lead { + __typename + id + ... @defer { derivedMood } + } +} + +query RequiresMood { + products { + ...ConsultancyLead + } +} diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.txt b/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.txt new file mode 100644 index 0000000000..d8e5a749f3 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.txt @@ -0,0 +1,12 @@ + +--graphql +Content-Type: application/json + +{"data":{"products":[{"name":"CONSULTANCY","lead":{"__typename":"Employee","id":1}},{},{}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} + +--graphql \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.graphql new file mode 100644 index 0000000000..4775ee10ba --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.graphql @@ -0,0 +1,13 @@ +fragment ConsultancyLead on Consultancy { + lead { + __typename + id + derivedMood + } +} + +query RequiresMood { + products { + ...ConsultancyLead @defer + } +} diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.txt b/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.txt new file mode 100644 index 0000000000..4e12ff81e1 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.txt @@ -0,0 +1,13 @@ + +--graphql +Content-Type: application/json + +{"data":{"products":[{},{},{}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_original.json b/router-tests/testdata/queries_defer/requires_mood_original.json new file mode 100644 index 0000000000..cf34d4bd9c --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_original.json @@ -0,0 +1,15 @@ +{ + "data": { + "products": [ + { + "lead": { + "__typename": "Employee", + "id": 1, + "derivedMood": "HAPPY" + } + }, + {}, + {} + ] + } +} \ No newline at end of file From 4c696ade2d9d4112911472ad832a19df1d754b3c Mon Sep 17 00:00:00 2001 From: spetrunin Date: Thu, 26 Mar 2026 19:11:17 +0200 Subject: [PATCH 04/23] fix queries field count, update fixtures --- ...loyeeDetails_defer_01_single_defer.graphql | 6 +- .../employeeDetails_defer_01_single_defer.txt | 2 +- ...er_02_single_defer_between_regular.graphql | 5 +- ..._defer_03_multiple_fields_deferred.graphql | 5 +- ...tails_defer_04_all_fields_deferred.graphql | 5 +- ...loyeeDetails_defer_05_nested_defer.graphql | 5 +- ...ls_defer_06_nested_defer_variation.graphql | 5 +- ...eeDetails_defer_07_parallel_defers.graphql | 5 +- ...tails_defer_08_defer_nested_object.graphql | 5 +- ...r_09_duplicated_field_across_defer.graphql | 5 +- ...etails_defer_10_extensive_parallel.graphql | 5 +- .../employee_defer_01_single_defer.graphql | 8 +- .../employee_defer_01_single_defer.txt | 4 +- ...er_02_single_defer_between_regular.graphql | 9 ++- ..._defer_02_single_defer_between_regular.txt | 4 +- ..._defer_03_multiple_fields_deferred.graphql | 5 +- ...loyee_defer_04_all_fields_deferred.graphql | 5 +- .../employee_defer_05_nested_defer.graphql | 9 ++- ...ee_defer_06_nested_defer_variation.graphql | 9 ++- ...loyee_defer_08_defer_nested_object.graphql | 9 ++- .../employees_defer_01_single_defer.graphql | 30 +++++++- .../employees_defer_01_single_defer.txt | 4 +- ...er_02_single_defer_between_regular.graphql | 29 +++++++- ..._defer_02_single_defer_between_regular.txt | 4 +- ..._defer_03_multiple_fields_deferred.graphql | 29 +++++++- ...yees_defer_03_multiple_fields_deferred.txt | 4 +- ...oyees_defer_04_all_fields_deferred.graphql | 29 +++++++- ...employees_defer_04_all_fields_deferred.txt | 2 +- .../employees_defer_05_nested_defer.graphql | 31 +++++++- .../employees_defer_05_nested_defer.txt | 6 +- ...es_defer_06_nested_defer_variation.graphql | 31 +++++++- ...loyees_defer_06_nested_defer_variation.txt | 6 +- ...employees_defer_07_parallel_defers.graphql | 33 ++++++++- .../employees_defer_07_parallel_defers.txt | 6 +- ...oyees_defer_08_defer_nested_object.graphql | 27 ++++++- ...employees_defer_08_defer_nested_object.txt | 4 +- ...r_09_duplicated_field_across_defer.graphql | 29 +++++++- ...defer_09_duplicated_field_across_defer.txt | 4 +- ...loyees_defer_10_extensive_parallel.graphql | 33 ++++++++- .../employees_defer_10_extensive_parallel.txt | 4 +- ...efer_11_fragment_around_and_inside.graphql | 48 ++++++++++-- ...es_defer_11_fragment_around_and_inside.txt | 9 +-- ...oyees_defer_12_fragment_body_defer.graphql | 44 +++++++++-- ...employees_defer_12_fragment_body_defer.txt | 4 +- ...ees_defer_13_fragment_spread_defer.graphql | 44 ++++++++--- ...ployees_defer_13_fragment_spread_defer.txt | 4 +- ...r_09_duplicated_field_across_defer.graphql | 2 +- ...er_02_single_defer_between_regular.graphql | 6 +- ...r_09_duplicated_field_across_defer.graphql | 2 +- .../full_defer_01_single_defer.graphql | 60 +++++++++++++-- .../full_defer_01_single_defer.txt | 4 +- ...er_02_single_defer_between_regular.graphql | 60 +++++++++++++-- ..._defer_02_single_defer_between_regular.txt | 4 +- ..._defer_03_multiple_fields_deferred.graphql | 60 +++++++++++++-- ...full_defer_03_multiple_fields_deferred.txt | 4 +- .../full_defer_04_all_fields_deferred.graphql | 60 +++++++++++++-- .../full_defer_04_all_fields_deferred.txt | 2 +- .../full_defer_05_nested_defer.graphql | 70 ++++++++++++++++-- .../full_defer_05_nested_defer.txt | 6 +- ...ll_defer_06_nested_defer_variation.graphql | 74 ++++++++++++++++--- .../full_defer_06_nested_defer_variation.txt | 6 +- .../full_defer_07_parallel_defers.graphql | 72 +++++++++++++++--- .../full_defer_07_parallel_defers.txt | 6 +- .../full_defer_08_defer_nested_object.graphql | 56 ++++++++++++-- .../full_defer_08_defer_nested_object.txt | 9 +-- ...r_09_duplicated_field_across_defer.graphql | 57 ++++++++++++-- ...defer_09_duplicated_field_across_defer.txt | 7 +- .../full_defer_10_extensive_parallel.graphql | 73 +++++++++++++++--- .../full_defer_10_extensive_parallel.txt | 27 +------ ...efer_11_fragment_around_and_inside.graphql | 65 +++++++++++++++- ...ll_defer_11_fragment_around_and_inside.txt | 16 +--- .../full_defer_12_fragment_body_defer.graphql | 63 +++++++++++++++- .../full_defer_12_fragment_body_defer.txt | 11 +-- ...ull_defer_13_fragment_spread_defer.graphql | 61 ++++++++++++++- .../full_defer_13_fragment_spread_defer.txt | 11 +-- .../products_defer_01_single_defer.graphql | 23 +++++- ...er_02_single_defer_between_regular.graphql | 22 +++++- ..._defer_03_multiple_fields_deferred.graphql | 22 +++++- ...ducts_defer_04_all_fields_deferred.graphql | 23 +++++- .../products_defer_05_nested_defer.graphql | 16 +++- ...ts_defer_06_nested_defer_variation.graphql | 21 +++++- .../products_defer_07_parallel_defers.graphql | 16 +++- ...ducts_defer_08_defer_nested_object.graphql | 11 ++- ...r_09_duplicated_field_across_defer.graphql | 21 +++++- ...oducts_defer_10_extensive_parallel.graphql | 9 ++- ...efer_11_fragment_around_and_inside.graphql | 27 +++++-- ...ts_defer_11_fragment_around_and_inside.txt | 2 +- ...ducts_defer_12_fragment_body_defer.graphql | 33 +++++++-- .../products_defer_12_fragment_body_defer.txt | 2 +- ...cts_defer_13_fragment_spread_defer.graphql | 20 +++-- ...roducts_defer_13_fragment_spread_defer.txt | 2 +- .../queries_defer/queries_with_errors.txt | 23 ------ ...th_defer_06_nested_defer_variation.graphql | 10 ++- ..._depth_defer_06_nested_defer_variation.txt | 7 +- ...ent_depth_defer_07_parallel_defers.graphql | 1 - ...fferent_depth_defer_07_parallel_defers.txt | 5 -- ..._depth_defer_10_extensive_parallel.graphql | 1 - ...rent_depth_defer_10_extensive_parallel.txt | 5 -- ...efer_11_fragment_around_and_inside.graphql | 2 +- ...th_defer_11_fragment_around_and_inside.txt | 7 +- ...er_02_single_defer_between_regular.graphql | 11 +-- ..._defer_02_single_defer_between_regular.txt | 7 +- ..._defer_03_multiple_fields_deferred.graphql | 1 - ...mood_defer_03_multiple_fields_deferred.txt | 5 -- ...od_defer_06_nested_defer_variation.graphql | 1 - ...s_mood_defer_06_nested_defer_variation.txt | 2 +- ...ires_mood_defer_07_parallel_defers.graphql | 13 +--- ...requires_mood_defer_07_parallel_defers.txt | 7 +- ..._mood_defer_08_defer_nested_object.graphql | 1 - ...ires_mood_defer_08_defer_nested_object.txt | 2 +- ...r_09_duplicated_field_across_defer.graphql | 1 - ...defer_09_duplicated_field_across_defer.txt | 2 +- ...s_mood_defer_10_extensive_parallel.graphql | 1 - ...uires_mood_defer_10_extensive_parallel.txt | 5 -- ...efer_11_fragment_around_and_inside.graphql | 3 +- ...od_defer_11_fragment_around_and_inside.txt | 7 +- ..._mood_defer_12_fragment_body_defer.graphql | 1 - ...ires_mood_defer_12_fragment_body_defer.txt | 2 +- 118 files changed, 1546 insertions(+), 424 deletions(-) delete mode 100644 router-tests/testdata/queries_defer/queries_with_errors.txt diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.graphql index 9eaf7555d4..396e97a884 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.graphql +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.graphql @@ -1,10 +1,14 @@ query { employees { id + notes ... @defer { hobbies { __typename - employees { id details { forename } } + employees { + id + details { forename } + } } } } diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt index 62f3114303..7243e06138 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt @@ -2,7 +2,7 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":7},{"id":8},{"id":10},{"id":11},{"id":12}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products"},{"id":2,"notes":"Dustin notes resolved by products"},{"id":3,"notes":"Stefan notes resolved by products"},{"id":4,"notes":"Björn notes resolved by products"},{"id":5,"notes":"Sergiy notes resolved by products"},{"id":7,"notes":"Suvij notes resolved by products"},{"id":8,"notes":"Nithin notes resolved by products"},{"id":10,"notes":"Eelco notes resolved by products"},{"id":11,"notes":"Alexandra notes resolved by products"},{"id":12,"notes":"David notes resolved by products"}]},"hasNext":true} --graphql Content-Type: application/json diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.graphql index 15b158ad1e..f1cd53c260 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.graphql +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.graphql @@ -4,7 +4,10 @@ query { ... @defer { hobbies { __typename - employees { id details { forename } } + employees { + id + details { forename } + } } } notes diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.graphql index 3446320b66..3da2b9c4d0 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.graphql +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.graphql @@ -5,7 +5,10 @@ query { notes hobbies { __typename - employees { id details { forename } } + employees { + id + details { forename } + } } } } diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.graphql index e1269e5e92..691ee06d0a 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.graphql +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.graphql @@ -5,7 +5,10 @@ query { notes hobbies { __typename - employees { id details { forename } } + employees { + id + details { forename } + } } } } diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.graphql index bd3e2367e7..82a799829b 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.graphql +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.graphql @@ -6,7 +6,10 @@ query { ... @defer { hobbies { __typename - employees { id details { forename } } + employees { + id + details { forename } + } } } } diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.graphql index aa9f6969ac..8c49ff12b8 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.graphql +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.graphql @@ -6,7 +6,10 @@ query { ... @defer { hobbies { __typename - employees { id details { forename } } + employees { + id + details { forename } + } } } } diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.graphql index e6fdd2eebf..b41df3bfcf 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.graphql +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.graphql @@ -5,7 +5,10 @@ query { ... @defer { hobbies { __typename - employees { id details { forename } } + employees { + id + details { forename } + } } } } diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.graphql index 058557bac2..396e97a884 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.graphql +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.graphql @@ -5,7 +5,10 @@ query { ... @defer { hobbies { __typename - employees { id details { forename } } + employees { + id + details { forename } + } } } } diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.graphql index 2e6c2a0fd0..820d297c0d 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.graphql +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.graphql @@ -4,7 +4,10 @@ query { hobbies { __typename } ... @defer { hobbies { - employees { id details { forename } } + employees { + id + details { forename } + } } notes } diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.graphql b/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.graphql index fa19699b97..de51477e16 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.graphql +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.graphql @@ -6,7 +6,10 @@ query { ... @defer { hobbies { __typename - employees { id details { forename } } + employees { + id + details { forename } + } } } } diff --git a/router-tests/testdata/queries_defer/employee_defer_01_single_defer.graphql b/router-tests/testdata/queries_defer/employee_defer_01_single_defer.graphql index cf1b6ebc13..36d1279326 100644 --- a/router-tests/testdata/queries_defer/employee_defer_01_single_defer.graphql +++ b/router-tests/testdata/queries_defer/employee_defer_01_single_defer.graphql @@ -1,7 +1,13 @@ query { employee(id: 1) { id - ... @defer { details { forename location { language } } } + details { + forename + location { language } + } + ... @defer { + hobbies { __typename } + } } teammates(team: OPERATIONS) { id diff --git a/router-tests/testdata/queries_defer/employee_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/employee_defer_01_single_defer.txt index b4748810f2..a12ff922bf 100644 --- a/router-tests/testdata/queries_defer/employee_defer_01_single_defer.txt +++ b/router-tests/testdata/queries_defer/employee_defer_01_single_defer.txt @@ -2,12 +2,12 @@ --graphql Content-Type: application/json -{"data":{"employee":{"id":1},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"hasNext":true} +{"data":{"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"details":{"forename":"Jens","location":{"language":"German"}}},"path":["employee"]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{},{},{},{},{}]},"path":["employee"]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.graphql b/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.graphql index adfd6bd624..c0da0ad4fb 100644 --- a/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.graphql +++ b/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.graphql @@ -1,8 +1,13 @@ query { employee(id: 1) { id - ... @defer { details { forename location { language } } } - hobbies { __typename } + ... @defer { + hobbies { __typename } + } + details { + forename + location { language } + } } teammates(team: OPERATIONS) { id diff --git a/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt index 48e707c6ad..a12ff922bf 100644 --- a/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt +++ b/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt @@ -2,12 +2,12 @@ --graphql Content-Type: application/json -{"data":{"employee":{"id":1,"hobbies":[{"__typename":"Exercise"},{"__typename":"Gaming"},{"__typename":"Other"},{"__typename":"Programming"},{"__typename":"Travelling"}]},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"hasNext":true} +{"data":{"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"details":{"forename":"Jens","location":{"language":"German"}}},"path":["employee"]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{},{},{},{},{}]},"path":["employee"]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.graphql b/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.graphql index 66fba14c2e..c2e1849801 100644 --- a/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.graphql +++ b/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.graphql @@ -2,7 +2,10 @@ query { employee(id: 1) { id ... @defer { - details { forename location { language } } + details { + forename + location { language } + } hobbies { __typename } } } diff --git a/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.graphql b/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.graphql index c9a6179b6f..8e2844d2c3 100644 --- a/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.graphql +++ b/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.graphql @@ -2,7 +2,10 @@ query { ... @defer { employee(id: 1) { id - details { forename location { language } } + details { + forename + location { language } + } hobbies { __typename } } teammates(team: OPERATIONS) { diff --git a/router-tests/testdata/queries_defer/employee_defer_05_nested_defer.graphql b/router-tests/testdata/queries_defer/employee_defer_05_nested_defer.graphql index f5939bf974..9798a15637 100644 --- a/router-tests/testdata/queries_defer/employee_defer_05_nested_defer.graphql +++ b/router-tests/testdata/queries_defer/employee_defer_05_nested_defer.graphql @@ -2,8 +2,13 @@ query { employee(id: 1) { id ... @defer { - details { forename location { language } } - ... @defer { hobbies { __typename } } + details { + forename + location { language } + } + ... @defer { + hobbies { __typename } + } } } teammates(team: OPERATIONS) { diff --git a/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.graphql b/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.graphql index e26f6b7c4c..9807e7f466 100644 --- a/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.graphql +++ b/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.graphql @@ -2,8 +2,13 @@ query { employee(id: 1) { ... @defer { id - details { forename location { language } } - ... @defer { hobbies { __typename } } + details { + forename + location { language } + } + ... @defer { + hobbies { __typename } + } } } teammates(team: OPERATIONS) { diff --git a/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.graphql b/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.graphql index b1fe65019f..ec123a47c4 100644 --- a/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.graphql +++ b/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.graphql @@ -2,10 +2,15 @@ query { employee(id: 1) { id details { forename location { language } } - ... @defer { hobbies { __typename } } + ... @defer { + hobbies { __typename } + } } teammates(team: OPERATIONS) { id - ... @defer { details { forename } products } + ... @defer { + details { forename } + products + } } } diff --git a/router-tests/testdata/queries_defer/employees_defer_01_single_defer.graphql b/router-tests/testdata/queries_defer/employees_defer_01_single_defer.graphql index 1af82d86f7..ec10823ba6 100644 --- a/router-tests/testdata/queries_defer/employees_defer_01_single_defer.graphql +++ b/router-tests/testdata/queries_defer/employees_defer_01_single_defer.graphql @@ -1,13 +1,37 @@ query { employees { id - details { forename surname } - role { departments title } + notes + details { + forename + surname + location { key { name } language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } ... @defer { hobbies { ... on Exercise { category } - ... on Gaming { genres name } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } ... on Programming { languages } + ... on Travelling { countriesLived { language } } } } products diff --git a/router-tests/testdata/queries_defer/employees_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/employees_defer_01_single_defer.txt index 5991d94acf..307d797454 100644 --- a/router-tests/testdata/queries_defer/employees_defer_01_single_defer.txt +++ b/router-tests/testdata/queries_defer/employees_defer_01_single_defer.txt @@ -2,12 +2,12 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"details":{"forename":"Jens","surname":"Neuse"},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"]},"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"details":{"forename":"Dustin","surname":"Deus"},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"]},"products":["COSMO","SDK"]},{"id":3,"details":{"forename":"Stefan","surname":"Avram"},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"products":["CONSULTANCY","MARKETING"]},{"id":4,"details":{"forename":"Björn","surname":"Schwenzer"},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"]},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"details":{"forename":"Sergiy","surname":"Petrunin"},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"]},"products":["ENGINE","SDK"]},{"id":7,"details":{"forename":"Suvij","surname":"Surya"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]},"products":["COSMO","SDK"]},{"id":8,"details":{"forename":"Nithin","surname":"Kumar"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]},"products":["COSMO","SDK"]},{"id":10,"details":{"forename":"Eelco","surname":"Wiersma"},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"]},"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"details":{"forename":"Alexandra","surname":"Neuse"},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"]},"products":["FINANCE"]},{"id":12,"details":{"forename":"David","surname":"Stutt"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]},"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"products":["COSMO","SDK"]},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"key":{"name":"America"},"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"products":["CONSULTANCY","MARKETING"]},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"key":{"name":"Ukraine"},"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"products":["ENGINE","SDK"]},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"products":["COSMO","SDK"]},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"products":["COSMO","SDK"]},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"key":{"name":"Netherlands"},"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"products":["FINANCE"]},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"key":{"name":"England"},"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{},{}]},"path":["employees",3]},{"data":{"hobbies":[{},{},{}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}]},"path":["employees",7]},{"data":{"hobbies":[{}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",9]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English"},{"language":"German"}]}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English"},{"language":"Serbian"}]}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English"},{"language":"German"}]}]},"path":["employees",3]},{"data":{"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German"},{"language":"Indonesian"},{"language":"Dutch"},{"language":"Portuguese"},{"language":"Spanish"},{"language":"Thai"}]}]},"path":["employees",7]},{"data":{"hobbies":[{"name":"Spending time with the family"}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English"},{"language":"Korean"},{"language":"Taiwanese"}]}]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.graphql b/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.graphql index 7f5eac4b82..57b8a1cd75 100644 --- a/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.graphql +++ b/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.graphql @@ -1,14 +1,39 @@ query { employees { id - details { forename surname } + notes + details { + forename + surname + location { key { name } language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } ... @defer { hobbies { ... on Exercise { category } - ... on Gaming { genres name } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } ... on Programming { languages } + ... on Travelling { countriesLived { language } } } } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } products } } diff --git a/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.txt index 08ee9e88bc..307d797454 100644 --- a/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.txt +++ b/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.txt @@ -2,12 +2,12 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"details":{"forename":"Jens","surname":"Neuse"},"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"details":{"forename":"Dustin","surname":"Deus"},"products":["COSMO","SDK"]},{"id":3,"details":{"forename":"Stefan","surname":"Avram"},"products":["CONSULTANCY","MARKETING"]},{"id":4,"details":{"forename":"Björn","surname":"Schwenzer"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"details":{"forename":"Sergiy","surname":"Petrunin"},"products":["ENGINE","SDK"]},{"id":7,"details":{"forename":"Suvij","surname":"Surya"},"products":["COSMO","SDK"]},{"id":8,"details":{"forename":"Nithin","surname":"Kumar"},"products":["COSMO","SDK"]},{"id":10,"details":{"forename":"Eelco","surname":"Wiersma"},"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"details":{"forename":"Alexandra","surname":"Neuse"},"products":["FINANCE"]},{"id":12,"details":{"forename":"David","surname":"Stutt"},"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"products":["COSMO","SDK"]},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"key":{"name":"America"},"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"products":["CONSULTANCY","MARKETING"]},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"key":{"name":"Ukraine"},"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"products":["ENGINE","SDK"]},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"products":["COSMO","SDK"]},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"products":["COSMO","SDK"]},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"key":{"name":"Netherlands"},"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"products":["FINANCE"]},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"key":{"name":"England"},"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{},{}]},"path":["employees",3]},{"data":{"hobbies":[{},{},{}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}]},"path":["employees",7]},{"data":{"hobbies":[{}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",9]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English"},{"language":"German"}]}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English"},{"language":"Serbian"}]}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English"},{"language":"German"}]}]},"path":["employees",3]},{"data":{"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German"},{"language":"Indonesian"},{"language":"Dutch"},{"language":"Portuguese"},{"language":"Spanish"},{"language":"Thai"}]}]},"path":["employees",7]},{"data":{"hobbies":[{"name":"Spending time with the family"}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English"},{"language":"Korean"},{"language":"Taiwanese"}]}]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.graphql b/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.graphql index 38df7c398b..f2a9bc3224 100644 --- a/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.graphql +++ b/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.graphql @@ -1,12 +1,37 @@ query { employees { id - details { forename surname } + notes + details { + forename + surname + location { key { name } language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } ... @defer { + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } hobbies { ... on Exercise { category } - ... on Gaming { genres name } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } ... on Programming { languages } + ... on Travelling { countriesLived { language } } } products } diff --git a/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.txt b/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.txt index 69144eac6a..2a6eff6f5e 100644 --- a/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.txt +++ b/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.txt @@ -2,12 +2,12 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"details":{"forename":"Jens","surname":"Neuse"}},{"id":2,"details":{"forename":"Dustin","surname":"Deus"}},{"id":3,"details":{"forename":"Stefan","surname":"Avram"}},{"id":4,"details":{"forename":"Björn","surname":"Schwenzer"}},{"id":5,"details":{"forename":"Sergiy","surname":"Petrunin"}},{"id":7,"details":{"forename":"Suvij","surname":"Surya"}},{"id":8,"details":{"forename":"Nithin","surname":"Kumar"}},{"id":10,"details":{"forename":"Eelco","surname":"Wiersma"}},{"id":11,"details":{"forename":"Alexandra","surname":"Neuse"}},{"id":12,"details":{"forename":"David","surname":"Stutt"}}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null}},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null}},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"key":{"name":"America"},"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]}},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]}},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"key":{"name":"Ukraine"},"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]}},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null}},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null}},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"key":{"name":"Netherlands"},"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]}},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null}},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"key":{"name":"England"},"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]}}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}],"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{},{}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"hobbies":[{},{},{}],"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}],"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}],"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}],"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"hobbies":[{}],"products":["FINANCE"]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]}],"hasNext":false} +{"incremental":[{"data":{"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English"},{"language":"German"}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English"},{"language":"Serbian"}]}],"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English"},{"language":"German"}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German"},{"language":"Indonesian"},{"language":"Dutch"},{"language":"Portuguese"},{"language":"Spanish"},{"language":"Thai"}]}],"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},"path":["employees",8]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English"},{"language":"Korean"},{"language":"Taiwanese"}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.graphql b/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.graphql index cb3680835f..faca5a476f 100644 --- a/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.graphql +++ b/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.graphql @@ -3,12 +3,35 @@ query { employees { id notes - details { forename surname location { language } hasChildren maritalStatus nationality } - role { departments title ... on Engineer { engineerType } ... on Operator { operatorType } } + details { + forename + surname + location { key { name } language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } hobbies { ... on Exercise { category } - ... on Gaming { genres name } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } ... on Programming { languages } + ... on Travelling { countriesLived { language } } } products } diff --git a/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.txt b/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.txt index 2dc884d4a3..d524cd39f2 100644 --- a/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.txt +++ b/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN"},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN"},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}],"products":["CONSULTANCY","MARKETING"]},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"hobbies":[{"category":"HIKING"},{},{}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN"},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"hobbies":[{},{},{}],"products":["ENGINE","SDK"]},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}],"products":["COSMO","SDK"]},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}],"products":["COSMO","SDK"]},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH"},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}],"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"hobbies":[{}],"products":["FINANCE"]},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English"},{"language":"German"}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"key":{"name":"America"},"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English"},{"language":"Serbian"}]}],"products":["CONSULTANCY","MARKETING"]},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English"},{"language":"German"}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"key":{"name":"Ukraine"},"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"key":{"name":"Netherlands"},"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German"},{"language":"Indonesian"},{"language":"Dutch"},{"language":"Portuguese"},{"language":"Spanish"},{"language":"Thai"}]}],"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"key":{"name":"England"},"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English"},{"language":"Korean"},{"language":"Taiwanese"}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}]},"path":[]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_05_nested_defer.graphql b/router-tests/testdata/queries_defer/employees_defer_05_nested_defer.graphql index 0c84a112e8..3ddebb3068 100644 --- a/router-tests/testdata/queries_defer/employees_defer_05_nested_defer.graphql +++ b/router-tests/testdata/queries_defer/employees_defer_05_nested_defer.graphql @@ -1,16 +1,41 @@ query { employees { id - details { forename surname } + notes + details { + forename + surname + location { key { name } language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } ... @defer { - role { departments title } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } ... @defer { hobbies { ... on Exercise { category } - ... on Gaming { genres name } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } ... on Programming { languages } + ... on Travelling { countriesLived { language } } } } + products } } } diff --git a/router-tests/testdata/queries_defer/employees_defer_05_nested_defer.txt b/router-tests/testdata/queries_defer/employees_defer_05_nested_defer.txt index 9c50a46ff7..99d49754ce 100644 --- a/router-tests/testdata/queries_defer/employees_defer_05_nested_defer.txt +++ b/router-tests/testdata/queries_defer/employees_defer_05_nested_defer.txt @@ -2,17 +2,17 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"details":{"forename":"Jens","surname":"Neuse"}},{"id":2,"details":{"forename":"Dustin","surname":"Deus"}},{"id":3,"details":{"forename":"Stefan","surname":"Avram"}},{"id":4,"details":{"forename":"Björn","surname":"Schwenzer"}},{"id":5,"details":{"forename":"Sergiy","surname":"Petrunin"}},{"id":7,"details":{"forename":"Suvij","surname":"Surya"}},{"id":8,"details":{"forename":"Nithin","surname":"Kumar"}},{"id":10,"details":{"forename":"Eelco","surname":"Wiersma"}},{"id":11,"details":{"forename":"Alexandra","surname":"Neuse"}},{"id":12,"details":{"forename":"David","surname":"Stutt"}}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null}},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null}},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"key":{"name":"America"},"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]}},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]}},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"key":{"name":"Ukraine"},"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]}},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null}},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null}},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"key":{"name":"Netherlands"},"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]}},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null}},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"key":{"name":"England"},"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]}}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"]}},"path":["employees",0]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"]}},"path":["employees",1]},{"data":{"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]}},"path":["employees",2]},{"data":{"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"]}},"path":["employees",3]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"]}},"path":["employees",4]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},"path":["employees",5]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},"path":["employees",6]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"]}},"path":["employees",7]},{"data":{"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"]}},"path":["employees",8]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},"path":["employees",9]}],"hasNext":true} +{"incremental":[{"data":{"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"products":["FINANCE"]},"path":["employees",8]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]}],"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{},{}]},"path":["employees",3]},{"data":{"hobbies":[{},{},{}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}]},"path":["employees",7]},{"data":{"hobbies":[{}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",9]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English"},{"language":"German"}]}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English"},{"language":"Serbian"}]}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English"},{"language":"German"}]}]},"path":["employees",3]},{"data":{"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German"},{"language":"Indonesian"},{"language":"Dutch"},{"language":"Portuguese"},{"language":"Spanish"},{"language":"Thai"}]}]},"path":["employees",7]},{"data":{"hobbies":[{"name":"Spending time with the family"}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English"},{"language":"Korean"},{"language":"Taiwanese"}]}]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.graphql b/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.graphql index 8c3335b8b3..2f56993f2b 100644 --- a/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.graphql +++ b/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.graphql @@ -1,16 +1,41 @@ query { employees { id + notes ... @defer { - details { forename surname } - role { departments title } + details { + forename + surname + location { key { name } language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } ... @defer { hobbies { ... on Exercise { category } - ... on Gaming { genres name } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } ... on Programming { languages } + ... on Travelling { countriesLived { language } } } } + products } } } diff --git a/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.txt index 34f816d66b..c7a6eaa0d1 100644 --- a/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.txt +++ b/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.txt @@ -2,17 +2,17 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":7},{"id":8},{"id":10},{"id":11},{"id":12}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products"},{"id":2,"notes":"Dustin notes resolved by products"},{"id":3,"notes":"Stefan notes resolved by products"},{"id":4,"notes":"Björn notes resolved by products"},{"id":5,"notes":"Sergiy notes resolved by products"},{"id":7,"notes":"Suvij notes resolved by products"},{"id":8,"notes":"Nithin notes resolved by products"},{"id":10,"notes":"Eelco notes resolved by products"},{"id":11,"notes":"Alexandra notes resolved by products"},{"id":12,"notes":"David notes resolved by products"}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"details":{"forename":"Jens","surname":"Neuse"},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"]}},"path":["employees",0]},{"data":{"details":{"forename":"Dustin","surname":"Deus"},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"]}},"path":["employees",1]},{"data":{"details":{"forename":"Stefan","surname":"Avram"},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]}},"path":["employees",2]},{"data":{"details":{"forename":"Björn","surname":"Schwenzer"},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"]}},"path":["employees",3]},{"data":{"details":{"forename":"Sergiy","surname":"Petrunin"},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"]}},"path":["employees",4]},{"data":{"details":{"forename":"Suvij","surname":"Surya"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},"path":["employees",5]},{"data":{"details":{"forename":"Nithin","surname":"Kumar"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},"path":["employees",6]},{"data":{"details":{"forename":"Eelco","surname":"Wiersma"},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"]}},"path":["employees",7]},{"data":{"details":{"forename":"Alexandra","surname":"Neuse"},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"]}},"path":["employees",8]},{"data":{"details":{"forename":"David","surname":"Stutt"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},"path":["employees",9]}],"hasNext":true} +{"incremental":[{"data":{"details":{"forename":"Jens","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"details":{"forename":"Dustin","surname":"Deus","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"details":{"forename":"Stefan","surname":"Avram","location":{"key":{"name":"America"},"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"details":{"forename":"Björn","surname":"Schwenzer","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"details":{"forename":"Sergiy","surname":"Petrunin","location":{"key":{"name":"Ukraine"},"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"details":{"forename":"Suvij","surname":"Surya","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"details":{"forename":"Nithin","surname":"Kumar","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"details":{"forename":"Eelco","surname":"Wiersma","location":{"key":{"name":"Netherlands"},"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"details":{"forename":"Alexandra","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"products":["FINANCE"]},"path":["employees",8]},{"data":{"details":{"forename":"David","surname":"Stutt","location":{"key":{"name":"England"},"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]}],"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{},{}]},"path":["employees",3]},{"data":{"hobbies":[{},{},{}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}]},"path":["employees",7]},{"data":{"hobbies":[{}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",9]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English"},{"language":"German"}]}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English"},{"language":"Serbian"}]}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English"},{"language":"German"}]}]},"path":["employees",3]},{"data":{"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German"},{"language":"Indonesian"},{"language":"Dutch"},{"language":"Portuguese"},{"language":"Spanish"},{"language":"Thai"}]}]},"path":["employees",7]},{"data":{"hobbies":[{"name":"Spending time with the family"}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English"},{"language":"Korean"},{"language":"Taiwanese"}]}]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.graphql b/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.graphql index 89184eed30..07ba6a0756 100644 --- a/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.graphql +++ b/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.graphql @@ -1,14 +1,41 @@ query { employees { id - details { forename surname } + notes + details { + forename + surname + location { key { name } language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } ... @defer { hobbies { ... on Exercise { category } - ... on Gaming { genres name } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } ... on Programming { languages } + ... on Travelling { countriesLived { language } } + } + } + ... @defer { + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } } + products } - ... @defer { products } } } diff --git a/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.txt index a45f59c7cd..a5366612fa 100644 --- a/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.txt +++ b/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.txt @@ -2,17 +2,17 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"details":{"forename":"Jens","surname":"Neuse"}},{"id":2,"details":{"forename":"Dustin","surname":"Deus"}},{"id":3,"details":{"forename":"Stefan","surname":"Avram"}},{"id":4,"details":{"forename":"Björn","surname":"Schwenzer"}},{"id":5,"details":{"forename":"Sergiy","surname":"Petrunin"}},{"id":7,"details":{"forename":"Suvij","surname":"Surya"}},{"id":8,"details":{"forename":"Nithin","surname":"Kumar"}},{"id":10,"details":{"forename":"Eelco","surname":"Wiersma"}},{"id":11,"details":{"forename":"Alexandra","surname":"Neuse"}},{"id":12,"details":{"forename":"David","surname":"Stutt"}}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null}},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null}},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"key":{"name":"America"},"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]}},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]}},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"key":{"name":"Ukraine"},"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]}},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null}},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null}},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"key":{"name":"Netherlands"},"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]}},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null}},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"key":{"name":"England"},"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]}}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{},{}]},"path":["employees",3]},{"data":{"hobbies":[{},{},{}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}]},"path":["employees",7]},{"data":{"hobbies":[{}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",9]}],"hasNext":true} +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English"},{"language":"German"}]}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English"},{"language":"Serbian"}]}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English"},{"language":"German"}]}]},"path":["employees",3]},{"data":{"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German"},{"language":"Indonesian"},{"language":"Dutch"},{"language":"Portuguese"},{"language":"Spanish"},{"language":"Thai"}]}]},"path":["employees",7]},{"data":{"hobbies":[{"name":"Spending time with the family"}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English"},{"language":"Korean"},{"language":"Taiwanese"}]}]},"path":["employees",9]}],"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"products":["FINANCE"]},"path":["employees",8]},{"data":{"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]}],"hasNext":false} +{"incremental":[{"data":{"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"products":["FINANCE"]},"path":["employees",8]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.graphql b/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.graphql index cd9062677c..540d39830c 100644 --- a/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.graphql +++ b/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.graphql @@ -1,16 +1,39 @@ query { employees { id - role { departments title } + notes + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } ... @defer { details { forename surname - location { language } + location { key { name } language } hasChildren maritalStatus nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + hobbies { + ... on Exercise { category } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } + ... on Programming { languages } + ... on Travelling { countriesLived { language } } } + products } } } diff --git a/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.txt b/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.txt index 339f94ca9a..a08f9944c4 100644 --- a/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.txt +++ b/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.txt @@ -2,12 +2,12 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"]}},{"id":2,"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"]}},{"id":3,"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]}},{"id":4,"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"]}},{"id":5,"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"]}},{"id":7,"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},{"id":8,"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},{"id":10,"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"]}},{"id":11,"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"]}},{"id":12,"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"}},{"id":2,"notes":"Dustin notes resolved by products","role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"}},{"id":3,"notes":"Stefan notes resolved by products","role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]}},{"id":4,"notes":"Björn notes resolved by products","role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]}},{"id":5,"notes":"Sergiy notes resolved by products","role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"}},{"id":7,"notes":"Suvij notes resolved by products","role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}},{"id":8,"notes":"Nithin notes resolved by products","role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}},{"id":10,"notes":"Eelco notes resolved by products","role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"}},{"id":11,"notes":"Alexandra notes resolved by products","role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]}},{"id":12,"notes":"David notes resolved by products","role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"}},"path":["employees",0]},{"data":{"details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN"}},"path":["employees",1]},{"data":{"details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN"}},"path":["employees",2]},{"data":{"details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"}},"path":["employees",3]},{"data":{"details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN"}},"path":["employees",4]},{"data":{"details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN"}},"path":["employees",5]},{"data":{"details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN"}},"path":["employees",6]},{"data":{"details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH"}},"path":["employees",7]},{"data":{"details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"}},"path":["employees",8]},{"data":{"details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH"}},"path":["employees",9]}],"hasNext":false} +{"incremental":[{"data":{"details":{"forename":"Jens","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English"},{"language":"German"}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"details":{"forename":"Dustin","surname":"Deus","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"details":{"forename":"Stefan","surname":"Avram","location":{"key":{"name":"America"},"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English"},{"language":"Serbian"}]}],"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"details":{"forename":"Björn","surname":"Schwenzer","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English"},{"language":"German"}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"details":{"forename":"Sergiy","surname":"Petrunin","location":{"key":{"name":"Ukraine"},"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"details":{"forename":"Suvij","surname":"Surya","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"details":{"forename":"Nithin","surname":"Kumar","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"details":{"forename":"Eelco","surname":"Wiersma","location":{"key":{"name":"Netherlands"},"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German"},{"language":"Indonesian"},{"language":"Dutch"},{"language":"Portuguese"},{"language":"Spanish"},{"language":"Thai"}]}],"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"details":{"forename":"Alexandra","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},"path":["employees",8]},{"data":{"details":{"forename":"David","surname":"Stutt","location":{"key":{"name":"England"},"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English"},{"language":"Korean"},{"language":"Taiwanese"}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.graphql b/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.graphql index a32c4dd2fa..a649f2ecd1 100644 --- a/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.graphql +++ b/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.graphql @@ -1,14 +1,39 @@ query { employees { id + notes details { forename } ... @defer { - details { surname location { language } } + details { + surname + location { key { name } language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } hobbies { ... on Exercise { category } - ... on Gaming { genres name } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } ... on Programming { languages } + ... on Travelling { countriesLived { language } } } + products } } } diff --git a/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.txt index 2c9c69fe06..1532d86e94 100644 --- a/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.txt +++ b/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.txt @@ -2,12 +2,12 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens"}},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin"}},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan"}},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn"}},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy"}},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij"}},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin"}},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco"}},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra"}},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David"}}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}]},"path":["employees",0]},{"data":{"surname":"Neuse","location":{"language":"German"}},"path":["employees",0,"details"]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"surname":"Deus","location":{"language":"German"}},"path":["employees",1,"details"]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}]},"path":["employees",2]},{"data":{"surname":"Avram","location":{"language":"English"}},"path":["employees",2,"details"]},{"data":{"hobbies":[{"category":"HIKING"},{},{}]},"path":["employees",3]},{"data":{"surname":"Schwenzer","location":{"language":"German"}},"path":["employees",3,"details"]},{"data":{"hobbies":[{},{},{}]},"path":["employees",4]},{"data":{"surname":"Petrunin","location":{"language":"Ukrainian"}},"path":["employees",4,"details"]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}]},"path":["employees",5]},{"data":{"surname":"Surya","location":{"language":"Hindi"}},"path":["employees",5,"details"]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",6]},{"data":{"surname":"Kumar","location":{"language":"Hindi"}},"path":["employees",6,"details"]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}]},"path":["employees",7]},{"data":{"surname":"Wiersma","location":{"language":"Dutch"}},"path":["employees",7,"details"]},{"data":{"hobbies":[{}]},"path":["employees",8]},{"data":{"surname":"Neuse","location":{"language":"German"}},"path":["employees",8,"details"]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",9]},{"data":{"surname":"Stutt","location":{"language":"English"}},"path":["employees",9,"details"]}],"hasNext":false} +{"incremental":[{"data":{"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English"},{"language":"German"}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"path":["employees",0,"details"]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"surname":"Deus","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"path":["employees",1,"details"]},{"data":{"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English"},{"language":"Serbian"}]}],"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"surname":"Avram","location":{"key":{"name":"America"},"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"path":["employees",2,"details"]},{"data":{"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English"},{"language":"German"}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"surname":"Schwenzer","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"path":["employees",3,"details"]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"surname":"Petrunin","location":{"key":{"name":"Ukraine"},"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"path":["employees",4,"details"]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"surname":"Surya","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"path":["employees",5,"details"]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"surname":"Kumar","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"path":["employees",6,"details"]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German"},{"language":"Indonesian"},{"language":"Dutch"},{"language":"Portuguese"},{"language":"Spanish"},{"language":"Thai"}]}],"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"surname":"Wiersma","location":{"key":{"name":"Netherlands"},"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"path":["employees",7,"details"]},{"data":{"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},"path":["employees",8]},{"data":{"surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"path":["employees",8,"details"]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English"},{"language":"Korean"},{"language":"Taiwanese"}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]},{"data":{"surname":"Stutt","location":{"key":{"name":"England"},"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"path":["employees",9,"details"]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.graphql b/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.graphql index 363843f5b5..df05f3c5e0 100644 --- a/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.graphql +++ b/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.graphql @@ -3,13 +3,40 @@ query { employees { ... @defer { id } ... @defer { notes } - ... @defer { details { forename surname location { language } hasChildren maritalStatus nationality } } - ... @defer { role { departments title ... on Engineer { engineerType } ... on Operator { operatorType } } } + ... @defer { + details { + forename + surname + location { key { name } language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + } + ... @defer { + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } + } ... @defer { hobbies { ... on Exercise { category } - ... on Gaming { genres name } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } ... on Programming { languages } + ... on Travelling { countriesLived { language } } } } ... @defer { products } diff --git a/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.txt index f012ebf598..f15c8accf2 100644 --- a/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.txt +++ b/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.txt @@ -22,7 +22,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"}},"path":["employees",0]},{"data":{"details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN"}},"path":["employees",1]},{"data":{"details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN"}},"path":["employees",2]},{"data":{"details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"}},"path":["employees",3]},{"data":{"details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN"}},"path":["employees",4]},{"data":{"details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN"}},"path":["employees",5]},{"data":{"details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN"}},"path":["employees",6]},{"data":{"details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH"}},"path":["employees",7]},{"data":{"details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN"}},"path":["employees",8]},{"data":{"details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH"}},"path":["employees",9]}],"hasNext":true} +{"incremental":[{"data":{"details":{"forename":"Jens","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null}},"path":["employees",0]},{"data":{"details":{"forename":"Dustin","surname":"Deus","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null}},"path":["employees",1]},{"data":{"details":{"forename":"Stefan","surname":"Avram","location":{"key":{"name":"America"},"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]}},"path":["employees",2]},{"data":{"details":{"forename":"Björn","surname":"Schwenzer","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]}},"path":["employees",3]},{"data":{"details":{"forename":"Sergiy","surname":"Petrunin","location":{"key":{"name":"Ukraine"},"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]}},"path":["employees",4]},{"data":{"details":{"forename":"Suvij","surname":"Surya","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null}},"path":["employees",5]},{"data":{"details":{"forename":"Nithin","surname":"Kumar","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null}},"path":["employees",6]},{"data":{"details":{"forename":"Eelco","surname":"Wiersma","location":{"key":{"name":"Netherlands"},"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]}},"path":["employees",7]},{"data":{"details":{"forename":"Alexandra","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null}},"path":["employees",8]},{"data":{"details":{"forename":"David","surname":"Stutt","location":{"key":{"name":"England"},"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]}},"path":["employees",9]}],"hasNext":true} --graphql Content-Type: application/json @@ -32,7 +32,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike"},{},{"languages":["GO","TYPESCRIPT"]},{}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike"},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{},{}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{},{}]},"path":["employees",3]},{"data":{"hobbies":[{},{},{}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess"},{}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{},{}]},"path":["employees",7]},{"data":{"hobbies":[{}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous"},{}]},"path":["employees",9]}],"hasNext":true} +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English"},{"language":"German"}]}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English"},{"language":"Serbian"}]}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English"},{"language":"German"}]}]},"path":["employees",3]},{"data":{"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German"},{"language":"Indonesian"},{"language":"Dutch"},{"language":"Portuguese"},{"language":"Spanish"},{"language":"Thai"}]}]},"path":["employees",7]},{"data":{"hobbies":[{"name":"Spending time with the family"}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English"},{"language":"Korean"},{"language":"Taiwanese"}]}]},"path":["employees",9]}],"hasNext":true} --graphql Content-Type: application/json diff --git a/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.graphql b/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.graphql index 66d959e9b9..05c4a859ba 100644 --- a/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.graphql +++ b/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.graphql @@ -1,15 +1,47 @@ -fragment EngineerRole on Engineer { - departments - title - ... @defer { engineerType } +fragment EmployeeDetails on Employee { + details { + forename + surname + location { key { name } language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + ... @defer { + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } + } +} + +fragment EmployeeHobbies on Employee { + hobbies { + ... on Exercise { category } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } + ... on Programming { languages } + ... on Travelling { countriesLived { language } } + } } query { employees { id - details { forename } - role { - ...EngineerRole @defer - } + notes + ... @defer { ...EmployeeDetails } + ... @defer { ...EmployeeHobbies } + products } } diff --git a/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.txt b/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.txt index cc8f565326..51eef2a4f1 100644 --- a/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.txt +++ b/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.txt @@ -2,17 +2,12 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"details":{"forename":"Jens"},"role":{}},{"id":2,"details":{"forename":"Dustin"},"role":{}},{"id":3,"details":{"forename":"Stefan"},"role":{}},{"id":4,"details":{"forename":"Björn"},"role":{}},{"id":5,"details":{"forename":"Sergiy"},"role":{}},{"id":7,"details":{"forename":"Suvij"},"role":{}},{"id":8,"details":{"forename":"Nithin"},"role":{}},{"id":10,"details":{"forename":"Eelco"},"role":{}},{"id":11,"details":{"forename":"Alexandra"},"role":{}},{"id":12,"details":{"forename":"David"},"role":{}}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English"},{"language":"German"}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"key":{"name":"America"},"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English"},{"language":"Serbian"}]}],"products":["CONSULTANCY","MARKETING"]},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English"},{"language":"German"}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"key":{"name":"Ukraine"},"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"key":{"name":"Netherlands"},"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German"},{"language":"Indonesian"},{"language":"Dutch"},{"language":"Portuguese"},{"language":"Spanish"},{"language":"Thai"}]}],"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"key":{"name":"England"},"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English"},{"language":"Korean"},{"language":"Taiwanese"}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"]},"path":["employees",0,"role"]},{"data":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"]},"path":["employees",1,"role"]},{"data":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"]},"path":["employees",4,"role"]},{"data":{"departments":["ENGINEERING"],"title":["Software Engineer"]},"path":["employees",5,"role"]},{"data":{"departments":["ENGINEERING"],"title":["Software Engineer"]},"path":["employees",6,"role"]},{"data":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"]},"path":["employees",7,"role"]},{"data":{"departments":["ENGINEERING"],"title":["Software Engineer"]},"path":["employees",9,"role"]}],"hasNext":true} - ---graphql -Content-Type: application/json - -{"incremental":[{"data":{"engineerType":"BACKEND"},"path":["employees",0,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",1,"role"]},{"data":{"engineerType":"BACKEND"},"path":["employees",4,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",5,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",6,"role"]},{"data":{"engineerType":"FRONTEND"},"path":["employees",7,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",9,"role"]}],"hasNext":false} +{"incremental":[{"data":{"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"}},"path":["employees",0]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"}},"path":["employees",1]},{"data":{"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]}},"path":["employees",2]},{"data":{"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]}},"path":["employees",3]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"}},"path":["employees",4]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}},"path":["employees",5]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}},"path":["employees",6]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"}},"path":["employees",7]},{"data":{"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]}},"path":["employees",8]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.graphql b/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.graphql index d4da4d756b..972c1d5548 100644 --- a/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.graphql +++ b/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.graphql @@ -1,15 +1,43 @@ -fragment EngineerRole on Engineer { - departments - title - ... @defer { engineerType } +fragment EmployeeDetails on Employee { + details { + forename + surname + location { key { name } language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + ... @defer { + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } + hobbies { + ... on Exercise { category } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } + ... on Programming { languages } + ... on Travelling { countriesLived { language } } + } + } } query { employees { id - details { forename } - role { - ...EngineerRole - } + notes + ...EmployeeDetails + products } } diff --git a/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.txt b/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.txt index 7e028fcefb..10211760e2 100644 --- a/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.txt +++ b/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.txt @@ -2,12 +2,12 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"details":{"forename":"Jens"},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"]}},{"id":2,"details":{"forename":"Dustin"},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"]}},{"id":3,"details":{"forename":"Stefan"},"role":{}},{"id":4,"details":{"forename":"Björn"},"role":{}},{"id":5,"details":{"forename":"Sergiy"},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"]}},{"id":7,"details":{"forename":"Suvij"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},{"id":8,"details":{"forename":"Nithin"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},{"id":10,"details":{"forename":"Eelco"},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"]}},{"id":11,"details":{"forename":"Alexandra"},"role":{}},{"id":12,"details":{"forename":"David"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"products":["COSMO","SDK"]},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"key":{"name":"America"},"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"products":["CONSULTANCY","MARKETING"]},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"key":{"name":"Ukraine"},"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"products":["ENGINE","SDK"]},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"products":["COSMO","SDK"]},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"products":["COSMO","SDK"]},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"key":{"name":"Netherlands"},"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"products":["FINANCE"]},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"key":{"name":"England"},"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"engineerType":"BACKEND"},"path":["employees",0,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",1,"role"]},{"data":{"engineerType":"BACKEND"},"path":["employees",4,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",5,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",6,"role"]},{"data":{"engineerType":"FRONTEND"},"path":["employees",7,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",9,"role"]}],"hasNext":false} +{"incremental":[{"data":{"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English"},{"language":"German"}]}]},"path":["employees",0]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English"},{"language":"Serbian"}]}]},"path":["employees",2]},{"data":{"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English"},{"language":"German"}]}]},"path":["employees",3]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}]},"path":["employees",4]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}]},"path":["employees",5]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}]},"path":["employees",6]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German"},{"language":"Indonesian"},{"language":"Dutch"},{"language":"Portuguese"},{"language":"Spanish"},{"language":"Thai"}]}]},"path":["employees",7]},{"data":{"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"hobbies":[{"name":"Spending time with the family"}]},"path":["employees",8]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English"},{"language":"Korean"},{"language":"Taiwanese"}]}]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.graphql b/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.graphql index f647b1a983..76b9b3853f 100644 --- a/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.graphql +++ b/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.graphql @@ -1,17 +1,41 @@ -fragment EngineerRole on Engineer { - departments - title - engineerType +fragment EmployeeDetails on Employee { + details { + forename + surname + location { key { name } language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } + hobbies { + ... on Exercise { category } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } + ... on Programming { languages } + ... on Travelling { countriesLived { language } } + } + products } query { employees { id - details { forename } - role { - departments - title - ...EngineerRole @defer - } + notes + ...EmployeeDetails @defer } } diff --git a/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.txt b/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.txt index 351f05c0e4..a4a1234bfa 100644 --- a/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.txt +++ b/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.txt @@ -2,12 +2,12 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"details":{"forename":"Jens"},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"]}},{"id":2,"details":{"forename":"Dustin"},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"]}},{"id":3,"details":{"forename":"Stefan"},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]}},{"id":4,"details":{"forename":"Björn"},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"]}},{"id":5,"details":{"forename":"Sergiy"},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"]}},{"id":7,"details":{"forename":"Suvij"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},{"id":8,"details":{"forename":"Nithin"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}},{"id":10,"details":{"forename":"Eelco"},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"]}},{"id":11,"details":{"forename":"Alexandra"},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"]}},{"id":12,"details":{"forename":"David"},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"]}}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products"},{"id":2,"notes":"Dustin notes resolved by products"},{"id":3,"notes":"Stefan notes resolved by products"},{"id":4,"notes":"Björn notes resolved by products"},{"id":5,"notes":"Sergiy notes resolved by products"},{"id":7,"notes":"Suvij notes resolved by products"},{"id":8,"notes":"Nithin notes resolved by products"},{"id":10,"notes":"Eelco notes resolved by products"},{"id":11,"notes":"Alexandra notes resolved by products"},{"id":12,"notes":"David notes resolved by products"}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"engineerType":"BACKEND"},"path":["employees",0,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",1,"role"]},{"data":{"engineerType":"BACKEND"},"path":["employees",4,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",5,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",6,"role"]},{"data":{"engineerType":"FRONTEND"},"path":["employees",7,"role"]},{"data":{"engineerType":"FULLSTACK"},"path":["employees",9,"role"]}],"hasNext":false} +{"incremental":[{"data":{"details":{"forename":"Jens","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English"},{"language":"German"}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"details":{"forename":"Dustin","surname":"Deus","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"details":{"forename":"Stefan","surname":"Avram","location":{"key":{"name":"America"},"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English"},{"language":"Serbian"}]}],"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"details":{"forename":"Björn","surname":"Schwenzer","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English"},{"language":"German"}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"details":{"forename":"Sergiy","surname":"Petrunin","location":{"key":{"name":"Ukraine"},"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"details":{"forename":"Suvij","surname":"Surya","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"details":{"forename":"Nithin","surname":"Kumar","location":{"key":{"name":"India"},"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"details":{"forename":"Eelco","surname":"Wiersma","location":{"key":{"name":"Netherlands"},"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German"},{"language":"Indonesian"},{"language":"Dutch"},{"language":"Portuguese"},{"language":"Spanish"},{"language":"Thai"}]}],"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"details":{"forename":"Alexandra","surname":"Neuse","location":{"key":{"name":"Germany"},"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},"path":["employees",8]},{"data":{"details":{"forename":"David","surname":"Stutt","location":{"key":{"name":"England"},"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English"},{"language":"Korean"},{"language":"Taiwanese"}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.graphql b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.graphql index bec2083f5d..ed0cf83ebf 100644 --- a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.graphql +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.graphql @@ -1,6 +1,6 @@ query { findEmployees { details { forename } - ... @defer { details { location { language } } } + ... @defer { details { forename } } } } diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.graphql b/router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.graphql index c11e07354d..123873016a 100644 --- a/router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.graphql +++ b/router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.graphql @@ -2,14 +2,14 @@ query { a: findEmployees(criteria: { hasPets: true }) { details { forename } } + c: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED } }) { + details { forename } + } ... @defer { b: findEmployees(criteria: { hasPets: false, nationality: GERMAN, nested: { maritalStatus: MARRIED } }) { details { forename } } } - c: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED } }) { - details { forename } - } d: findEmployees(criteria: { hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED, hasChildren: true } }) { details { forename } } diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.graphql b/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.graphql index ccefb87771..94d101411e 100644 --- a/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.graphql +++ b/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.graphql @@ -1,7 +1,7 @@ query { a: findEmployees(criteria: { hasPets: true }) { details { forename } - ... @defer { details { location { language } } } + ... @defer { details { forename } } } b: findEmployees(criteria: { hasPets: false, nationality: GERMAN, nested: { maritalStatus: MARRIED } }) { details { forename } diff --git a/router-tests/testdata/queries_defer/full_defer_01_single_defer.graphql b/router-tests/testdata/queries_defer/full_defer_01_single_defer.graphql index 18563d5463..5f16d8b8e3 100644 --- a/router-tests/testdata/queries_defer/full_defer_01_single_defer.graphql +++ b/router-tests/testdata/queries_defer/full_defer_01_single_defer.graphql @@ -1,11 +1,61 @@ query { - employees { id details { forename } } - employee(id: 1) { id details { forename location { language } } } - teammates(team: OPERATIONS) { id details { forename } products } + employees { + id + notes + details { + forename + surname + location { language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } + hobbies { + ... on Exercise { category } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } + ... on Programming { languages } + ... on Travelling { countriesLived { language key { name } } } + } + products + } + employee(id: 1) { + id + details { + forename + location { language } + } + } + teammates(team: OPERATIONS) { + id + details { forename } + products + } ... @defer { productTypes { - ... on Documentation { url(product: SDK) } - ... on Consultancy { name lead { details { forename } } } + ... on Documentation { + url(product: SDK) + urls(products: [COSMO, MARKETING]) + } + ... on Consultancy { + lead { details { forename } } + name + } } } a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { diff --git a/router-tests/testdata/queries_defer/full_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/full_defer_01_single_defer.txt index 266e459a45..40fccb4ac4 100644 --- a/router-tests/testdata/queries_defer/full_defer_01_single_defer.txt +++ b/router-tests/testdata/queries_defer/full_defer_01_single_defer.txt @@ -2,12 +2,12 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"Serbian","key":{"name":"Serbia"}}]}],"products":["CONSULTANCY","MARKETING"]},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German","key":{"name":"Germany"}},{"language":"Indonesian","key":{"name":"Indonesia"}},{"language":"Dutch","key":{"name":"Netherlands"}},{"language":"Portuguese","key":{"name":"Portugal"}},{"language":"Spanish","key":{"name":"Spain"}},{"language":"Thai","key":{"name":"Thailand"}}]}],"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"Korean","key":{"name":"Korea"}},{"language":"Taiwanese","key":{"name":"Taiwan"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"productTypes":[{},{"name":"CONSULTANCY","lead":{"details":{"forename":"Jens"}}},{"url":"https://docs.wundergraph.com/"}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"productTypes":[{},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://docs.wundergraph.com/","urls":["https://cosmo-docs.wundergraph.com/","https://wundergraph.com/pricing"]}]},"path":[]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.graphql b/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.graphql index 1823baafbb..cfda2c40fe 100644 --- a/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.graphql +++ b/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.graphql @@ -1,13 +1,63 @@ query { - employees { id details { forename } } + employees { + id + notes + details { + forename + surname + location { language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } + hobbies { + ... on Exercise { category } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } + ... on Programming { languages } + ... on Travelling { countriesLived { language key { name } } } + } + products + } ... @defer { productTypes { - ... on Documentation { url(product: SDK) } - ... on Consultancy { name lead { details { forename } } } + ... on Documentation { + url(product: SDK) + urls(products: [COSMO, MARKETING]) + } + ... on Consultancy { + lead { details { forename } } + name + } } } - employee(id: 1) { id details { forename location { language } } } - teammates(team: OPERATIONS) { id details { forename } products } + employee(id: 1) { + id + details { + forename + location { language } + } + } + teammates(team: OPERATIONS) { + id + details { forename } + products + } a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { details { forename } } diff --git a/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.txt index 266e459a45..40fccb4ac4 100644 --- a/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.txt +++ b/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.txt @@ -2,12 +2,12 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"Serbian","key":{"name":"Serbia"}}]}],"products":["CONSULTANCY","MARKETING"]},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German","key":{"name":"Germany"}},{"language":"Indonesian","key":{"name":"Indonesia"}},{"language":"Dutch","key":{"name":"Netherlands"}},{"language":"Portuguese","key":{"name":"Portugal"}},{"language":"Spanish","key":{"name":"Spain"}},{"language":"Thai","key":{"name":"Thailand"}}]}],"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"Korean","key":{"name":"Korea"}},{"language":"Taiwanese","key":{"name":"Taiwan"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"productTypes":[{},{"name":"CONSULTANCY","lead":{"details":{"forename":"Jens"}}},{"url":"https://docs.wundergraph.com/"}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"productTypes":[{},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://docs.wundergraph.com/","urls":["https://cosmo-docs.wundergraph.com/","https://wundergraph.com/pricing"]}]},"path":[]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.graphql b/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.graphql index 25659f104d..350c99e0f1 100644 --- a/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.graphql +++ b/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.graphql @@ -1,11 +1,61 @@ query { - employees { id details { forename } } - employee(id: 1) { id details { forename location { language } } } + employees { + id + notes + details { + forename + surname + location { language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } + hobbies { + ... on Exercise { category } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } + ... on Programming { languages } + ... on Travelling { countriesLived { language key { name } } } + } + products + } + employee(id: 1) { + id + details { + forename + location { language } + } + } ... @defer { - teammates(team: OPERATIONS) { id details { forename } products } + teammates(team: OPERATIONS) { + id + details { forename } + products + } productTypes { - ... on Documentation { url(product: SDK) } - ... on Consultancy { name lead { details { forename } } } + ... on Documentation { + url(product: SDK) + urls(products: [COSMO, MARKETING]) + } + ... on Consultancy { + lead { details { forename } } + name + } } } a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { diff --git a/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.txt b/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.txt index 4886a5f13b..4b98fa5366 100644 --- a/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.txt +++ b/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.txt @@ -2,12 +2,12 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"Serbian","key":{"name":"Serbia"}}]}],"products":["CONSULTANCY","MARKETING"]},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German","key":{"name":"Germany"}},{"language":"Indonesian","key":{"name":"Indonesia"}},{"language":"Dutch","key":{"name":"Netherlands"}},{"language":"Portuguese","key":{"name":"Portugal"}},{"language":"Spanish","key":{"name":"Spain"}},{"language":"Thai","key":{"name":"Thailand"}}]}],"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"Korean","key":{"name":"Korea"}},{"language":"Taiwanese","key":{"name":"Taiwan"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"productTypes":[{},{"name":"CONSULTANCY","lead":{"details":{"forename":"Jens"}}},{"url":"https://docs.wundergraph.com/"}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"productTypes":[{},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://docs.wundergraph.com/","urls":["https://cosmo-docs.wundergraph.com/","https://wundergraph.com/pricing"]}]},"path":[]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.graphql b/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.graphql index 4640d6a35c..f1c58371bb 100644 --- a/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.graphql +++ b/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.graphql @@ -1,11 +1,61 @@ query { ... @defer { - employees { id details { forename } } - employee(id: 1) { id details { forename location { language } } } - teammates(team: OPERATIONS) { id details { forename } products } + employees { + id + notes + details { + forename + surname + location { language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } + hobbies { + ... on Exercise { category } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } + ... on Programming { languages } + ... on Travelling { countriesLived { language key { name } } } + } + products + } + employee(id: 1) { + id + details { + forename + location { language } + } + } + teammates(team: OPERATIONS) { + id + details { forename } + products + } productTypes { - ... on Documentation { url(product: SDK) } - ... on Consultancy { name lead { details { forename } } } + ... on Documentation { + url(product: SDK) + urls(products: [COSMO, MARKETING]) + } + ... on Consultancy { + lead { details { forename } } + name + } } a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { details { forename } diff --git a/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.txt b/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.txt index af15dab45c..eefd2120f3 100644 --- a/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.txt +++ b/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"productTypes":[{},{"name":"CONSULTANCY","lead":{"details":{"forename":"Jens"}}},{"url":"https://docs.wundergraph.com/"}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"Serbian","key":{"name":"Serbia"}}]}],"products":["CONSULTANCY","MARKETING"]},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German","key":{"name":"Germany"}},{"language":"Indonesian","key":{"name":"Indonesia"}},{"language":"Dutch","key":{"name":"Netherlands"}},{"language":"Portuguese","key":{"name":"Portugal"}},{"language":"Spanish","key":{"name":"Spain"}},{"language":"Thai","key":{"name":"Thailand"}}]}],"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"Korean","key":{"name":"Korea"}},{"language":"Taiwanese","key":{"name":"Taiwan"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"productTypes":[{},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://docs.wundergraph.com/","urls":["https://cosmo-docs.wundergraph.com/","https://wundergraph.com/pricing"]}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"path":[]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_05_nested_defer.graphql b/router-tests/testdata/queries_defer/full_defer_05_nested_defer.graphql index 6025cb8e30..383238b6dc 100644 --- a/router-tests/testdata/queries_defer/full_defer_05_nested_defer.graphql +++ b/router-tests/testdata/queries_defer/full_defer_05_nested_defer.graphql @@ -1,15 +1,69 @@ query { - employees { id details { forename } } - ... @defer { - employee(id: 1) { id details { forename location { language } } } - ... @defer { - teammates(team: OPERATIONS) { id details { forename } products } + employees { + id + notes + details { + forename + surname + location { language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } } + hobbies { + ... on Exercise { category } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } + ... on Programming { languages } + ... on Travelling { countriesLived { language key { name } } } + } + products } - a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { - details { forename } + employee(id: 1) { + id + details { + forename + location { language } + } } - b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + teammates(team: OPERATIONS) { + id details { forename } + products + } + ... @defer { + productTypes { + ... on Documentation { + url(product: SDK) + urls(products: [COSMO, MARKETING]) + } + ... on Consultancy { + lead { details { forename } } + name + } + } + ... @defer { + a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { + details { forename } + } + b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } + } } } diff --git a/router-tests/testdata/queries_defer/full_defer_05_nested_defer.txt b/router-tests/testdata/queries_defer/full_defer_05_nested_defer.txt index 743db1957d..007aba17ce 100644 --- a/router-tests/testdata/queries_defer/full_defer_05_nested_defer.txt +++ b/router-tests/testdata/queries_defer/full_defer_05_nested_defer.txt @@ -2,17 +2,17 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"Serbian","key":{"name":"Serbia"}}]}],"products":["CONSULTANCY","MARKETING"]},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German","key":{"name":"Germany"}},{"language":"Indonesian","key":{"name":"Indonesia"}},{"language":"Dutch","key":{"name":"Netherlands"}},{"language":"Portuguese","key":{"name":"Portugal"}},{"language":"Spanish","key":{"name":"Spain"}},{"language":"Thai","key":{"name":"Thailand"}}]}],"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"Korean","key":{"name":"Korea"}},{"language":"Taiwanese","key":{"name":"Taiwan"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}}},"path":[]}],"hasNext":true} +{"incremental":[{"data":{"productTypes":[{},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://docs.wundergraph.com/","urls":["https://cosmo-docs.wundergraph.com/","https://wundergraph.com/pricing"]}]},"path":[]}],"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"path":[]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.graphql b/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.graphql index 9a75d0c7ef..bc1a1ecc7a 100644 --- a/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.graphql +++ b/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.graphql @@ -1,19 +1,69 @@ query { + employees { + id + notes + details { + forename + surname + location { language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } + hobbies { + ... on Exercise { category } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } + ... on Programming { languages } + ... on Travelling { countriesLived { language key { name } } } + } + products + } ... @defer { - employees { id details { forename } } - employee(id: 1) { id details { forename location { language } } } + employee(id: 1) { + id + details { + forename + location { language } + } + } + teammates(team: OPERATIONS) { + id + details { forename } + products + } + productTypes { + ... on Documentation { + url(product: SDK) + urls(products: [COSMO, MARKETING]) + } + ... on Consultancy { + lead { details { forename } } + name + } + } ... @defer { - teammates(team: OPERATIONS) { id details { forename } products } - productTypes { - ... on Documentation { url(product: SDK) } - ... on Consultancy { name lead { details { forename } } } + a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { + details { forename } + } + b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } } } } - a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { - details { forename } - } - b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { - details { forename } - } } diff --git a/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.txt index 7bc5b9b5f4..a21c57db82 100644 --- a/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.txt +++ b/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.txt @@ -2,17 +2,17 @@ --graphql Content-Type: application/json -{"data":{"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"Serbian","key":{"name":"Serbia"}}]}],"products":["CONSULTANCY","MARKETING"]},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German","key":{"name":"Germany"}},{"language":"Indonesian","key":{"name":"Indonesia"}},{"language":"Dutch","key":{"name":"Netherlands"}},{"language":"Portuguese","key":{"name":"Portugal"}},{"language":"Spanish","key":{"name":"Spain"}},{"language":"Thai","key":{"name":"Thailand"}}]}],"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"Korean","key":{"name":"Korea"}},{"language":"Taiwanese","key":{"name":"Taiwan"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}}},"path":[]}],"hasNext":true} +{"incremental":[{"data":{"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"productTypes":[{},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://docs.wundergraph.com/","urls":["https://cosmo-docs.wundergraph.com/","https://wundergraph.com/pricing"]}]},"path":[]}],"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"productTypes":[{},{"name":"CONSULTANCY","lead":{"details":{"forename":"Jens"}}},{"url":"https://docs.wundergraph.com/"}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"path":[]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_07_parallel_defers.graphql b/router-tests/testdata/queries_defer/full_defer_07_parallel_defers.graphql index 56bcdcc26e..91a0e7ac4b 100644 --- a/router-tests/testdata/queries_defer/full_defer_07_parallel_defers.graphql +++ b/router-tests/testdata/queries_defer/full_defer_07_parallel_defers.graphql @@ -1,17 +1,69 @@ query { - employees { id details { forename } } - employee(id: 1) { id details { forename location { language } } } - ... @defer { teammates(team: OPERATIONS) { id details { forename } products } } - ... @defer { - productTypes { - ... on Documentation { url(product: SDK) } - ... on Consultancy { name lead { details { forename } } } + employees { + id + notes + details { + forename + surname + location { language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } + hobbies { + ... on Exercise { category } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } + ... on Programming { languages } + ... on Travelling { countriesLived { language key { name } } } } + products } - a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { - details { forename } + employee(id: 1) { + id + details { + forename + location { language } + } } - b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + teammates(team: OPERATIONS) { + id details { forename } + products + } + ... @defer { + productTypes { + ... on Documentation { + url(product: SDK) + urls(products: [COSMO, MARKETING]) + } + ... on Consultancy { + lead { details { forename } } + name + } + } + } + ... @defer { + a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { + details { forename } + } + b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } } } diff --git a/router-tests/testdata/queries_defer/full_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/full_defer_07_parallel_defers.txt index 6618ea407f..007aba17ce 100644 --- a/router-tests/testdata/queries_defer/full_defer_07_parallel_defers.txt +++ b/router-tests/testdata/queries_defer/full_defer_07_parallel_defers.txt @@ -2,17 +2,17 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"Serbian","key":{"name":"Serbia"}}]}],"products":["CONSULTANCY","MARKETING"]},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German","key":{"name":"Germany"}},{"language":"Indonesian","key":{"name":"Indonesia"}},{"language":"Dutch","key":{"name":"Netherlands"}},{"language":"Portuguese","key":{"name":"Portugal"}},{"language":"Spanish","key":{"name":"Spain"}},{"language":"Thai","key":{"name":"Thailand"}}]}],"products":["CONSULTANCY","COSMO","SDK"]},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"Korean","key":{"name":"Korea"}},{"language":"Taiwanese","key":{"name":"Taiwan"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"path":[]}],"hasNext":true} +{"incremental":[{"data":{"productTypes":[{},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://docs.wundergraph.com/","urls":["https://cosmo-docs.wundergraph.com/","https://wundergraph.com/pricing"]}]},"path":[]}],"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"productTypes":[{},{"name":"CONSULTANCY","lead":{"details":{"forename":"Jens"}}},{"url":"https://docs.wundergraph.com/"}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"path":[]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.graphql b/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.graphql index 11b9ca344c..e34011a831 100644 --- a/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.graphql +++ b/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.graphql @@ -1,15 +1,61 @@ query { - employees { id details { forename } } + employees { + id + notes + details { + forename + surname + location { language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } + ... @defer { + hobbies { + ... on Exercise { category } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } + ... on Programming { languages } + ... on Travelling { countriesLived { language key { name } } } + } + products + } + } employee(id: 1) { id - ... @defer { details { forename location { language } } } + details { + forename + location { language } + } + } + teammates(team: OPERATIONS) { + id + details { forename } + products } - teammates(team: OPERATIONS) { id details { forename } products } productTypes { - ... on Documentation { url(product: SDK) } + ... on Documentation { + url(product: SDK) + urls(products: [COSMO, MARKETING]) + } ... on Consultancy { + lead { details { forename } } name - ... @defer { lead { details { forename } } } } } a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { diff --git a/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.txt b/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.txt index 368f75257f..48ce25d494 100644 --- a/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.txt +++ b/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.txt @@ -2,17 +2,12 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"employee":{"id":1},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"productTypes":[{},{"name":"CONSULTANCY"},{"url":"https://docs.wundergraph.com/"}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"}},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"}},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]}},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]}},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"}},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"}},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]}},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"productTypes":[{},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://docs.wundergraph.com/","urls":["https://cosmo-docs.wundergraph.com/","https://wundergraph.com/pricing"]}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"details":{"forename":"Jens","location":{"language":"German"}}},"path":["employee"]}],"hasNext":true} - ---graphql -Content-Type: application/json - -{"incremental":[{"data":{"lead":{"details":{"forename":"Jens"}}},"path":["productTypes",1]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"Serbian","key":{"name":"Serbia"}}]}],"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German","key":{"name":"Germany"}},{"language":"Indonesian","key":{"name":"Indonesia"}},{"language":"Dutch","key":{"name":"Netherlands"}},{"language":"Portuguese","key":{"name":"Portugal"}},{"language":"Spanish","key":{"name":"Spain"}},{"language":"Thai","key":{"name":"Thailand"}}]}],"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"Korean","key":{"name":"Korea"}},{"language":"Taiwanese","key":{"name":"Taiwan"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.graphql b/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.graphql index 7607c33b7e..e5d8f27c90 100644 --- a/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.graphql +++ b/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.graphql @@ -1,14 +1,61 @@ query { - employees { id details { forename } } + employees { + id + notes + details { forename surname } + ... @defer { + details { + location { language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } + hobbies { + ... on Exercise { category } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } + ... on Programming { languages } + ... on Travelling { countriesLived { language key { name } } } + } + products + } + } employee(id: 1) { id details { forename } - ... @defer { details { location { language } } } + ... @defer { + details { location { language } } + } + } + teammates(team: OPERATIONS) { + id + details { forename } + products } - teammates(team: OPERATIONS) { id details { forename } products } productTypes { - ... on Documentation { url(product: SDK) } - ... on Consultancy { name lead { details { forename } } } + ... on Documentation { + url(product: SDK) + urls(products: [COSMO, MARKETING]) + } + ... on Consultancy { + lead { details { forename } } + name + } } a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { details { forename } diff --git a/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.txt index b45ab90249..e38aeb197f 100644 --- a/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.txt +++ b/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.txt @@ -2,7 +2,12 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}],"employee":{"id":1,"details":{"forename":"Jens"}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"productTypes":[{},{"name":"CONSULTANCY","lead":{"details":{"forename":"Jens"}}},{"url":"https://docs.wundergraph.com/"}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse"}},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus"}},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram"}},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer"}},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin"}},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya"}},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar"}},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma"}},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse"}},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt"}}],"employee":{"id":1,"details":{"forename":"Jens"}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"productTypes":[{},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://docs.wundergraph.com/","urls":["https://cosmo-docs.wundergraph.com/","https://wundergraph.com/pricing"]}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"path":["employees",0,"details"]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"path":["employees",1,"details"]},{"data":{"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"Serbian","key":{"name":"Serbia"}}]}],"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"path":["employees",2,"details"]},{"data":{"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"path":["employees",3,"details"]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"path":["employees",4,"details"]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"path":["employees",5,"details"]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"path":["employees",6,"details"]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German","key":{"name":"Germany"}},{"language":"Indonesian","key":{"name":"Indonesia"}},{"language":"Dutch","key":{"name":"Netherlands"}},{"language":"Portuguese","key":{"name":"Portugal"}},{"language":"Spanish","key":{"name":"Spain"}},{"language":"Thai","key":{"name":"Thailand"}}]}],"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"path":["employees",7,"details"]},{"data":{"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},"path":["employees",8]},{"data":{"location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"path":["employees",8,"details"]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"Korean","key":{"name":"Korea"}},{"language":"Taiwanese","key":{"name":"Taiwan"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]},{"data":{"location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"path":["employees",9,"details"]}],"hasNext":true} --graphql Content-Type: application/json diff --git a/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.graphql b/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.graphql index 362913fea2..fd9dda9154 100644 --- a/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.graphql +++ b/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.graphql @@ -1,21 +1,72 @@ query { - ... @defer { employees { id details { forename } } } - ... @defer { employee(id: 1) { id details { forename location { language } } } } - ... @defer { teammates(team: OPERATIONS) { id details { forename } products } } ... @defer { + employees { + ... @defer { id } + ... @defer { notes } + ... @defer { + details { + forename + surname + location { language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + } + ... @defer { + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } + } + ... @defer { + hobbies { + ... on Exercise { category } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } + ... on Programming { languages } + ... on Travelling { countriesLived { language key { name } } } + } + } + ... @defer { products } + } + employee(id: 1) { + ... @defer { id } + ... @defer { details { forename location { language } } } + } + teammates(team: OPERATIONS) { + ... @defer { id } + ... @defer { details { forename } } + ... @defer { products } + } productTypes { - ... on Documentation { url(product: SDK) } - ... on Consultancy { name lead { details { forename } } } + ... @defer { + ... on Documentation { + url(product: SDK) + urls(products: [COSMO, MARKETING]) + } + ... on Consultancy { + lead { details { forename } } + name + } + } } - } - ... @defer { a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { - details { forename } + ... @defer { details { forename } } } - } - ... @defer { b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { - details { forename } + ... @defer { details { forename } } } } } diff --git a/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.txt index d3c620d53b..2f3012285e 100644 --- a/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.txt +++ b/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.txt @@ -7,32 +7,11 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}},{"id":12,"details":{"forename":"David"}}]},"path":[]}],"hasNext":true} +{"incremental":[{"data":{"employees":[{},{},{},{},{},{},{},{},{},{}],"employee":{},"teammates":[{},{}],"productTypes":[{},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://docs.wundergraph.com/","urls":["https://cosmo-docs.wundergraph.com/","https://wundergraph.com/pricing"]}],"a":[{}],"b":[{}]},"path":[]}],"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}}},"path":[]}],"hasNext":true} +{"incremental":[{"data":{"id":4},"path":["teammates",0],"errors":[{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",0,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",1,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",2,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",3,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",4,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",5,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",6,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",7,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",8,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",9,"role"]}]},{"data":{"id":11},"path":["teammates",1],"errors":[{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",0,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",1,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",2,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",3,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",4,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",5,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",6,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",7,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",8,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",9,"role"]}]}],"hasNext":false} ---graphql -Content-Type: application/json - -{"incremental":[{"data":{"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"path":[]}],"hasNext":true} - ---graphql -Content-Type: application/json - -{"incremental":[{"data":{"productTypes":[{},{"name":"CONSULTANCY","lead":{"details":{"forename":"Jens"}}},{"url":"https://docs.wundergraph.com/"}]},"path":[]}],"hasNext":true} - ---graphql -Content-Type: application/json - -{"incremental":[{"data":{"a":[{"details":{"forename":"Sergiy"}}]},"path":[]}],"hasNext":true} - ---graphql -Content-Type: application/json - -{"incremental":[{"data":{"b":[{"details":{"forename":"Björn"}}]},"path":[]}],"hasNext":false} - ---graphql ---graphql-- +--graphql \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql b/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql index e98381861a..d4f14c8a82 100644 --- a/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql +++ b/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql @@ -1,18 +1,77 @@ -fragment EmployeeDetailsFragment on Employee { +fragment EmployeesFields on Employee { + notes details { forename + surname location { language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } + ... @defer { + hobbies { + ... on Exercise { category } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } + ... on Programming { languages } + ... on Travelling { countriesLived { language key { name } } } + } + products + } +} + +fragment ProductTypesFields on ProductType { + ... on Documentation { + url(product: SDK) + urls(products: [COSMO, MARKETING]) + } + ... on Consultancy { + lead { details { forename } } + name } - ... @defer { notes } } query { employees { id - ...EmployeeDetailsFragment @defer + ... @defer { ...EmployeesFields } + } + employee(id: 1) { + id + details { + forename + location { language } + } } teammates(team: OPERATIONS) { id + details { forename } products } + ... @defer { + productTypes { + ...ProductTypesFields + } + } + a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { + details { forename } + } + b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } } diff --git a/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt b/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt index f4b4e59f92..ff5f1e96d6 100644 --- a/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt +++ b/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt @@ -2,17 +2,5 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":7},{"id":8},{"id":10},{"id":11},{"id":12}],"teammates":[{"id":4,"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"products":["FINANCE"]}]},"hasNext":true} - ---graphql -Content-Type: application/json - -{"incremental":[{"data":{"details":{"forename":"Jens","location":{"language":"German"}}},"path":["employees",0]},{"data":{"details":{"forename":"Dustin","location":{"language":"German"}}},"path":["employees",1]},{"data":{"details":{"forename":"Stefan","location":{"language":"English"}}},"path":["employees",2]},{"data":{"details":{"forename":"Björn","location":{"language":"German"}}},"path":["employees",3]},{"data":{"details":{"forename":"Sergiy","location":{"language":"Ukrainian"}}},"path":["employees",4]},{"data":{"details":{"forename":"Suvij","location":{"language":"Hindi"}}},"path":["employees",5]},{"data":{"details":{"forename":"Nithin","location":{"language":"Hindi"}}},"path":["employees",6]},{"data":{"details":{"forename":"Eelco","location":{"language":"Dutch"}}},"path":["employees",7]},{"data":{"details":{"forename":"Alexandra","location":{"language":"German"}}},"path":["employees",8]},{"data":{"details":{"forename":"David","location":{"language":"English"}}},"path":["employees",9]}],"hasNext":true} - ---graphql -Content-Type: application/json - -{"incremental":[{"data":{"notes":"Jens notes resolved by products"},"path":["employees",0]},{"data":{"notes":"Dustin notes resolved by products"},"path":["employees",1]},{"data":{"notes":"Stefan notes resolved by products"},"path":["employees",2]},{"data":{"notes":"Björn notes resolved by products"},"path":["employees",3]},{"data":{"notes":"Sergiy notes resolved by products"},"path":["employees",4]},{"data":{"notes":"Suvij notes resolved by products"},"path":["employees",5]},{"data":{"notes":"Nithin notes resolved by products"},"path":["employees",6]},{"data":{"notes":"Eelco notes resolved by products"},"path":["employees",7]},{"data":{"notes":"Alexandra notes resolved by products"},"path":["employees",8]},{"data":{"notes":"David notes resolved by products"},"path":["employees",9]}],"hasNext":false} - ---graphql ---graphql-- +{"errors":[{"message":"Unknown type \"ProductType\".","path":["ProductType"]}]} +--graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql b/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql index e3122d71ea..26499b2d8e 100644 --- a/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql +++ b/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql @@ -1,18 +1,75 @@ -fragment EmployeeDetailsFragment on Employee { +fragment EmployeesFields on Employee { + notes details { forename + surname location { language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } + ... @defer { + hobbies { + ... on Exercise { category } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } + ... on Programming { languages } + ... on Travelling { countriesLived { language key { name } } } + } + products + } +} + +fragment ProductTypesFields on ProductType { + ... on Documentation { + url(product: SDK) + urls(products: [COSMO, MARKETING]) + } + ... on Consultancy { + lead { details { forename } } + name } - ... @defer { notes } } query { employees { id - ...EmployeeDetailsFragment + ...EmployeesFields + } + employee(id: 1) { + id + details { + forename + location { language } + } } teammates(team: OPERATIONS) { id + details { forename } products } + productTypes { + ...ProductTypesFields + } + a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { + details { forename } + } + b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } } diff --git a/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.txt b/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.txt index a4b1f25077..ff5f1e96d6 100644 --- a/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.txt +++ b/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.txt @@ -2,12 +2,5 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},{"id":2,"details":{"forename":"Dustin","location":{"language":"German"}}},{"id":3,"details":{"forename":"Stefan","location":{"language":"English"}}},{"id":4,"details":{"forename":"Björn","location":{"language":"German"}}},{"id":5,"details":{"forename":"Sergiy","location":{"language":"Ukrainian"}}},{"id":7,"details":{"forename":"Suvij","location":{"language":"Hindi"}}},{"id":8,"details":{"forename":"Nithin","location":{"language":"Hindi"}}},{"id":10,"details":{"forename":"Eelco","location":{"language":"Dutch"}}},{"id":11,"details":{"forename":"Alexandra","location":{"language":"German"}}},{"id":12,"details":{"forename":"David","location":{"language":"English"}}}],"teammates":[{"id":4,"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"products":["FINANCE"]}]},"hasNext":true} - ---graphql -Content-Type: application/json - -{"incremental":[{"data":{"notes":"Jens notes resolved by products"},"path":["employees",0]},{"data":{"notes":"Dustin notes resolved by products"},"path":["employees",1]},{"data":{"notes":"Stefan notes resolved by products"},"path":["employees",2]},{"data":{"notes":"Björn notes resolved by products"},"path":["employees",3]},{"data":{"notes":"Sergiy notes resolved by products"},"path":["employees",4]},{"data":{"notes":"Suvij notes resolved by products"},"path":["employees",5]},{"data":{"notes":"Nithin notes resolved by products"},"path":["employees",6]},{"data":{"notes":"Eelco notes resolved by products"},"path":["employees",7]},{"data":{"notes":"Alexandra notes resolved by products"},"path":["employees",8]},{"data":{"notes":"David notes resolved by products"},"path":["employees",9]}],"hasNext":false} - ---graphql ---graphql-- +{"errors":[{"message":"Unknown type \"ProductType\".","path":["ProductType"]}]} +--graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql b/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql index c1404e6435..18fd7a5d04 100644 --- a/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql +++ b/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql @@ -1,18 +1,73 @@ -fragment EmployeeDetailsFragment on Employee { +fragment EmployeesFields on Employee { + notes details { forename + surname location { language } + hasChildren + maritalStatus + nationality + pets { + class + gender + name + ... on Cat { type } + ... on Dog { breed } + ... on Alligator { dangerous } + } + } + role { + departments + title + ... on Engineer { engineerType } + ... on Operator { operatorType } + } + hobbies { + ... on Exercise { category } + ... on Flying { planeModels yearsOfExperience } + ... on Gaming { genres name yearsOfExperience } + ... on Other { name } + ... on Programming { languages } + ... on Travelling { countriesLived { language key { name } } } + } + products +} + +fragment ProductTypesFields on ProductType { + ... on Documentation { + url(product: SDK) + urls(products: [COSMO, MARKETING]) + } + ... on Consultancy { + lead { details { forename } } + name } - notes } query { employees { id - ...EmployeeDetailsFragment @defer + ...EmployeesFields @defer + } + employee(id: 1) { + id + details { + forename + location { language } + } } teammates(team: OPERATIONS) { id + details { forename } products } + productTypes { + ...ProductTypesFields @defer + } + a: findEmployees(criteria: { hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } }) { + details { forename } + } + b: findEmployees(criteria: { hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } }) { + details { forename } + } } diff --git a/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt b/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt index 601298d192..ff5f1e96d6 100644 --- a/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt +++ b/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt @@ -2,12 +2,5 @@ --graphql Content-Type: application/json -{"data":{"employees":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":7},{"id":8},{"id":10},{"id":11},{"id":12}],"teammates":[{"id":4,"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"products":["FINANCE"]}]},"hasNext":true} - ---graphql -Content-Type: application/json - -{"incremental":[{"data":{"details":{"forename":"Jens","location":{"language":"German"}},"notes":"Jens notes resolved by products"},"path":["employees",0]},{"data":{"details":{"forename":"Dustin","location":{"language":"German"}},"notes":"Dustin notes resolved by products"},"path":["employees",1]},{"data":{"details":{"forename":"Stefan","location":{"language":"English"}},"notes":"Stefan notes resolved by products"},"path":["employees",2]},{"data":{"details":{"forename":"Björn","location":{"language":"German"}},"notes":"Björn notes resolved by products"},"path":["employees",3]},{"data":{"details":{"forename":"Sergiy","location":{"language":"Ukrainian"}},"notes":"Sergiy notes resolved by products"},"path":["employees",4]},{"data":{"details":{"forename":"Suvij","location":{"language":"Hindi"}},"notes":"Suvij notes resolved by products"},"path":["employees",5]},{"data":{"details":{"forename":"Nithin","location":{"language":"Hindi"}},"notes":"Nithin notes resolved by products"},"path":["employees",6]},{"data":{"details":{"forename":"Eelco","location":{"language":"Dutch"}},"notes":"Eelco notes resolved by products"},"path":["employees",7]},{"data":{"details":{"forename":"Alexandra","location":{"language":"German"}},"notes":"Alexandra notes resolved by products"},"path":["employees",8]},{"data":{"details":{"forename":"David","location":{"language":"English"}},"notes":"David notes resolved by products"},"path":["employees",9]}],"hasNext":false} - ---graphql ---graphql-- +{"errors":[{"message":"Unknown type \"ProductType\".","path":["ProductType"]}]} +--graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_01_single_defer.graphql b/router-tests/testdata/queries_defer/products_defer_01_single_defer.graphql index e49e304fca..b3009cd935 100644 --- a/router-tests/testdata/queries_defer/products_defer_01_single_defer.graphql +++ b/router-tests/testdata/queries_defer/products_defer_01_single_defer.graphql @@ -1,14 +1,29 @@ query { products { upc - ... on Cosmo { name repositoryURL lead { details { forename } } } - ... on SDK { clientLanguages unicode owner { details { forename } } } + ... on Cosmo { + name + lead { details { forename } } + repositoryURL + } + ... on SDK { + owner { details { forename } } + clientLanguages + unicode + } } ... @defer { productTypes { __typename - ... on Documentation { url(product: COSMO) } - ... on Consultancy { name lead { details { forename } } } + upc + ... on Documentation { + url(product: COSMO) + urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) + } + ... on Consultancy { + lead { details { forename } } + name + } } } } diff --git a/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql b/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql index 21d83cb0cb..b3009cd935 100644 --- a/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql +++ b/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql @@ -1,13 +1,29 @@ query { products { upc - ... on Cosmo { name repositoryURL } + ... on Cosmo { + name + lead { details { forename } } + repositoryURL + } + ... on SDK { + owner { details { forename } } + clientLanguages + unicode + } } ... @defer { productTypes { __typename - ... on Documentation { url(product: COSMO) } - ... on Consultancy { name lead { details { forename } } } + upc + ... on Documentation { + url(product: COSMO) + urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) + } + ... on Consultancy { + lead { details { forename } } + name + } } } } diff --git a/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql b/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql index 2d154b3404..87069616f7 100644 --- a/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql +++ b/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql @@ -3,13 +3,27 @@ query { upc ... on Cosmo { name - ... @defer { repositoryURL lead { details { forename } } } + ... @defer { + repositoryURL + lead { details { forename } } + } + } + ... on SDK { + owner { details { forename } } + clientLanguages + unicode } - ... on SDK { clientLanguages unicode owner { details { forename } } } } productTypes { __typename - ... on Documentation { url(product: COSMO) } - ... on Consultancy { name lead { details { forename } } } + upc + ... on Documentation { + url(product: COSMO) + urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) + } + ... on Consultancy { + lead { details { forename } } + name + } } } diff --git a/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql b/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql index d0c91a5dcd..a22dee9c2f 100644 --- a/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql +++ b/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql @@ -2,13 +2,28 @@ query { ... @defer { products { upc - ... on Cosmo { name repositoryURL lead { details { forename } } } - ... on SDK { clientLanguages unicode owner { details { forename } } } + ... on Cosmo { + name + lead { details { forename } } + repositoryURL + } + ... on SDK { + owner { details { forename } } + clientLanguages + unicode + } } productTypes { __typename - ... on Documentation { url(product: COSMO) } - ... on Consultancy { name lead { details { forename } } } + upc + ... on Documentation { + url(product: COSMO) + urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) + } + ... on Consultancy { + lead { details { forename } } + name + } } } } diff --git a/router-tests/testdata/queries_defer/products_defer_05_nested_defer.graphql b/router-tests/testdata/queries_defer/products_defer_05_nested_defer.graphql index 809bbfc571..2b6824b9ed 100644 --- a/router-tests/testdata/queries_defer/products_defer_05_nested_defer.graphql +++ b/router-tests/testdata/queries_defer/products_defer_05_nested_defer.graphql @@ -8,10 +8,22 @@ query { ... @defer { lead { details { forename } } } } } + ... on SDK { + owner { details { forename } } + clientLanguages + unicode + } } productTypes { __typename - ... on Documentation { url(product: COSMO) } - ... on Consultancy { name lead { details { forename } } } + upc + ... on Documentation { + url(product: COSMO) + urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) + } + ... on Consultancy { + lead { details { forename } } + name + } } } diff --git a/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql b/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql index 73f317c3b4..1f44bf422f 100644 --- a/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql +++ b/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql @@ -4,13 +4,28 @@ query { upc ... on Cosmo { name - ... @defer { repositoryURL lead { details { forename } } } + ... @defer { + repositoryURL + lead { details { forename } } + } + } + ... on SDK { + owner { details { forename } } + clientLanguages + unicode } } } productTypes { __typename - ... on Documentation { url(product: COSMO) } - ... on Consultancy { name lead { details { forename } } } + upc + ... on Documentation { + url(product: COSMO) + urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) + } + ... on Consultancy { + lead { details { forename } } + name + } } } diff --git a/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.graphql b/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.graphql index 56b54e6506..168981e8f5 100644 --- a/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.graphql +++ b/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.graphql @@ -6,10 +6,22 @@ query { ... @defer { repositoryURL } ... @defer { lead { details { forename } } } } + ... on SDK { + owner { details { forename } } + clientLanguages + unicode + } } productTypes { __typename - ... on Documentation { url(product: COSMO) } - ... on Consultancy { name lead { details { forename } } } + upc + ... on Documentation { + url(product: COSMO) + urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) + } + ... on Consultancy { + lead { details { forename } } + name + } } } diff --git a/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.graphql b/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.graphql index c329a53f6c..6cf9a89fed 100644 --- a/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.graphql +++ b/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.graphql @@ -6,10 +6,19 @@ query { repositoryURL ... @defer { lead { details { forename } } } } + ... on SDK { + owner { details { forename } } + clientLanguages + unicode + } } productTypes { __typename - ... on Documentation { url(product: COSMO) } + upc + ... on Documentation { + url(product: COSMO) + urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) + } ... on Consultancy { name ... @defer { lead { details { forename } } } diff --git a/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql b/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql index 2857e1efda..003266eb32 100644 --- a/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql +++ b/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql @@ -4,12 +4,27 @@ query { ... on Cosmo { name lead { details { forename } } - ... @defer { lead { details { forename } } repositoryURL } + ... @defer { + lead { details { forename } } + repositoryURL + } + } + ... on SDK { + owner { details { forename } } + clientLanguages + unicode } } productTypes { __typename - ... on Documentation { url(product: COSMO) } - ... on Consultancy { name lead { details { forename } } } + upc + ... on Documentation { + url(product: COSMO) + urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) + } + ... on Consultancy { + lead { details { forename } } + name + } } } diff --git a/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.graphql b/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.graphql index 35f484bb1d..d426a29698 100644 --- a/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.graphql +++ b/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.graphql @@ -16,7 +16,14 @@ query { } ... @defer { productTypes { - ... on Documentation { ... @defer { url(product: COSMO) } } + __typename + ... @defer { upc } + ... on Documentation { + ... @defer { + url(product: COSMO) + urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) + } + } ... on Consultancy { ... @defer { name } ... @defer { lead { details { forename } } } diff --git a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql index 09a3d074db..16e9e1588f 100644 --- a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql +++ b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql @@ -4,15 +4,32 @@ fragment CosmoDetails on Cosmo { ... @defer { lead { details { forename } } } } +fragment SDKDetails on SDK { + clientLanguages + unicode + owner { details { forename } } +} + +fragment ProductTypeDetails on ProductType { + upc + ... on Documentation { + url(product: COSMO) + urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) + } + ... on Consultancy { + lead { details { forename } } + name + } +} + query { products { upc - ...CosmoDetails @defer + ... @defer { ...CosmoDetails } + ... @defer { ...SDKDetails } } productTypes { - ... on Consultancy { - name - lead { details { forename } } - } + __typename + ...ProductTypeDetails } } diff --git a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt index dbb83bd530..ff5f1e96d6 100644 --- a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt +++ b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt @@ -2,5 +2,5 @@ --graphql Content-Type: application/json -{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} +{"errors":[{"message":"Unknown type \"ProductType\".","path":["ProductType"]}]} --graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql b/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql index 415227e6ca..4f6cf2beb1 100644 --- a/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql +++ b/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql @@ -1,18 +1,39 @@ fragment CosmoDetails on Cosmo { name - ... @defer { repositoryURL } - ... @defer { lead { details { forename } } } + ... @defer { + repositoryURL + lead { details { forename } } + } +} + +fragment SDKDetails on SDK { + ... @defer { + clientLanguages + unicode + owner { details { forename } } + } +} + +fragment ProductTypeDetails on ProductType { + upc + ... on Documentation { + url(product: COSMO) + urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) + } + ... on Consultancy { + lead { details { forename } } + name + } } query { products { upc ...CosmoDetails + ...SDKDetails } productTypes { - ... on Consultancy { - name - lead { details { forename } } - } + __typename + ...ProductTypeDetails } } diff --git a/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.txt b/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.txt index dbb83bd530..ff5f1e96d6 100644 --- a/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.txt +++ b/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.txt @@ -2,5 +2,5 @@ --graphql Content-Type: application/json -{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} +{"errors":[{"message":"Unknown type \"ProductType\".","path":["ProductType"]}]} --graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql b/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql index 9d1a1bcb4f..3f6b994fdd 100644 --- a/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql +++ b/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql @@ -5,9 +5,21 @@ fragment CosmoDetails on Cosmo { } fragment SDKDetails on SDK { + owner { details { forename } } clientLanguages unicode - owner { details { forename } } +} + +fragment ProductTypeDetails on ProductType { + upc + ... on Documentation { + url(product: COSMO) + urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) + } + ... on Consultancy { + lead { details { forename } } + name + } } query { @@ -17,9 +29,7 @@ query { ...SDKDetails @defer } productTypes { - ... on Consultancy { - name - lead { details { forename } } - } + __typename + ...ProductTypeDetails @defer } } diff --git a/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt b/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt index dbb83bd530..ff5f1e96d6 100644 --- a/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt +++ b/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt @@ -2,5 +2,5 @@ --graphql Content-Type: application/json -{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} +{"errors":[{"message":"Unknown type \"ProductType\".","path":["ProductType"]}]} --graphql-- \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/queries_with_errors.txt b/router-tests/testdata/queries_defer/queries_with_errors.txt deleted file mode 100644 index 72a4a601c6..0000000000 --- a/router-tests/testdata/queries_defer/queries_with_errors.txt +++ /dev/null @@ -1,23 +0,0 @@ -products_01_single_defer -products_02_single_defer_between_regular -products_03_multiple_fields_deferred -products_04_all_fields_deferred -products_05_nested_defer -products_06_nested_defer_variation -products_07_parallel_defers -products_08_defer_nested_object -products_09_duplicated_field_across_defer -products_10_extensive_parallel -products_11_fragment_around_and_inside -products_12_fragment_body_defer -products_13_fragment_spread_defer -requires_different_depth_08_defer_nested_object -requires_different_depth_09_duplicated_field_across_defer -requires_different_depth_10_extensive_parallel -requires_different_depth_11_fragment_around_and_inside -requires_different_depth_12_fragment_body_defer -requires_mood_08_defer_nested_object -requires_mood_09_duplicated_field_across_defer -requires_mood_10_extensive_parallel -requires_mood_11_fragment_around_and_inside -requires_mood_12_fragment_body_defer \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.graphql b/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.graphql index 56b45c742a..2c8acc1208 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.graphql +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.graphql @@ -4,10 +4,12 @@ query Requires { __typename ... on Consultancy { isLeadAvailable - lead { - __typename - id - derivedMood + ... @defer { + lead { + __typename + id + derivedMood + } } } } diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt index c25a34435f..9e76df24b8 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt @@ -7,7 +7,12 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"products":[{"isLeadAvailable":false,"lead":{"id":1,"derivedMood":"HAPPY"}},{},{}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"products":[{"isLeadAvailable":false},{},{}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.graphql b/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.graphql index bcfc0271b4..18d83bf7a2 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.graphql +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.graphql @@ -2,7 +2,6 @@ query Requires { products { __typename ... on Consultancy { - ... @defer { name } ... @defer { isLeadAvailable } ... @defer { lead { diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt index 7281fe57e9..8cc4e14159 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt @@ -7,11 +7,6 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"name":"CONSULTANCY"},"path":["products",0]}],"hasNext":true} - ---graphql -Content-Type: application/json - {"incremental":[{"data":{"isLeadAvailable":false},"path":["products",0]}],"hasNext":true} --graphql diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.graphql b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.graphql index 11c5eb2a4c..2f571c097a 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.graphql +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.graphql @@ -3,7 +3,6 @@ query Requires { products { __typename ... on Consultancy { - ... @defer { name } ... @defer { isLeadAvailable } ... @defer { lead { diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt index 1177d54847..69710f8d26 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt @@ -12,11 +12,6 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"name":"CONSULTANCY"},"path":["products",0]}],"hasNext":true} - ---graphql -Content-Type: application/json - {"incremental":[{"data":{"isLeadAvailable":false},"path":["products",0]}],"hasNext":true} --graphql diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.graphql b/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.graphql index bdd080a8fd..2ef53cd835 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.graphql +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.graphql @@ -10,6 +10,6 @@ fragment ConsultancyDetails on Consultancy { query Requires { products { __typename - ...ConsultancyDetails @defer + ... @defer { ...ConsultancyDetails } } } diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt index 54bb3f4f3d..c70b157c4c 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt @@ -2,12 +2,7 @@ --graphql Content-Type: application/json -{"data":{"products":[{"__typename":"Consultancy"},{"__typename":"Cosmo"},{"__typename":"SDK"}]},"hasNext":true} - ---graphql -Content-Type: application/json - -{"incremental":[{"data":{"isLeadAvailable":false,"lead":{"id":1}},"path":["products",0]}],"hasNext":true} +{"data":{"products":[{"__typename":"Consultancy","isLeadAvailable":false,"lead":{"__typename":"Employee","id":1}},{"__typename":"Cosmo"},{"__typename":"SDK"}]},"hasNext":true} --graphql Content-Type: application/json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.graphql index b7ae8a780e..9c639b6a08 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.graphql +++ b/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.graphql @@ -1,13 +1,10 @@ query RequiresMood { products { ... on Consultancy { - name - ... @defer { - lead { - __typename - id - derivedMood - } + lead { + __typename + id + ... @defer { derivedMood } } } } diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.txt index 3a1bc5fc71..1240695547 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.txt @@ -2,12 +2,11 @@ --graphql Content-Type: application/json -{"data":{"products":[{"name":"CONSULTANCY"},{},{}]},"hasNext":true} +{"data":{"products":[{"lead":{"__typename":"Employee","id":1}},{},{}]},"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} +{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} ---graphql ---graphql-- +--graphql \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.graphql index 56a1ef94a8..92eae02426 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.graphql +++ b/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.graphql @@ -1,7 +1,6 @@ query RequiresMood { products { ... on Consultancy { - ... @defer { name } ... @defer { lead { __typename diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.txt b/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.txt index 82d5010729..4e12ff81e1 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.txt @@ -7,11 +7,6 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"name":"CONSULTANCY"},"path":["products",0]}],"hasNext":true} - ---graphql -Content-Type: application/json - {"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} --graphql diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.graphql index 1b91f97a3c..cbff26083c 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.graphql +++ b/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.graphql @@ -2,7 +2,6 @@ query RequiresMood { ... @defer { products { ... on Consultancy { - name lead { __typename id diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.txt index 7b374861e3..3322d49030 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"products":[{"name":"CONSULTANCY","lead":{"id":1,"derivedMood":"HAPPY"}},{},{}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"products":[{"lead":{"id":1,"derivedMood":"HAPPY"}},{},{}]},"path":[]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.graphql index 9336f2f375..92eae02426 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.graphql +++ b/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.graphql @@ -1,14 +1,7 @@ query RequiresMood { - ... @defer { - products { - ... on Consultancy { - name - } - } - } - ... @defer { - products { - ... on Consultancy { + products { + ... on Consultancy { + ... @defer { lead { __typename id diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.txt index 04363821ba..4e12ff81e1 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.txt @@ -2,12 +2,7 @@ --graphql Content-Type: application/json -{"data":{},"hasNext":true} - ---graphql -Content-Type: application/json - -{"incremental":[{"data":{"products":[{"name":"CONSULTANCY"},{},{}]},"path":[]}],"hasNext":true} +{"data":{"products":[{},{},{}]},"hasNext":true} --graphql Content-Type: application/json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.graphql index ece75c91af..9c639b6a08 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.graphql +++ b/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.graphql @@ -1,7 +1,6 @@ query RequiresMood { products { ... on Consultancy { - name lead { __typename id diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.txt b/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.txt index d8e5a749f3..1240695547 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.txt @@ -2,7 +2,7 @@ --graphql Content-Type: application/json -{"data":{"products":[{"name":"CONSULTANCY","lead":{"__typename":"Employee","id":1}},{},{}]},"hasNext":true} +{"data":{"products":[{"lead":{"__typename":"Employee","id":1}},{},{}]},"hasNext":true} --graphql Content-Type: application/json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.graphql index 0d94d5e759..04c6d10718 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.graphql +++ b/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.graphql @@ -4,7 +4,6 @@ query RequiresMood { lead { __typename id } ... @defer { lead { derivedMood } - name } } } diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.txt index 4c9b9a75ea..1240695547 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.txt @@ -7,6 +7,6 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":null,"path":["products",0],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} +{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} --graphql \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.graphql index 0c219afc18..d5177e3f7d 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.graphql +++ b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.graphql @@ -2,7 +2,6 @@ query RequiresMood { ... @defer { products { ... on Consultancy { - ... @defer { name } ... @defer { lead { __typename diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt index 2a2c0a9288..938cdd12b8 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt @@ -12,11 +12,6 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"name":"CONSULTANCY"},"path":["products",0]}],"hasNext":true} - ---graphql -Content-Type: application/json - {"incremental":[{"data":{"lead":{}},"path":["products",0]}],"hasNext":true} --graphql diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.graphql index 04528c5812..c38fbd1320 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.graphql +++ b/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.graphql @@ -1,5 +1,4 @@ fragment ConsultancyLead on Consultancy { - name lead { __typename id @@ -9,6 +8,6 @@ fragment ConsultancyLead on Consultancy { query RequiresMood { products { - ...ConsultancyLead @defer + ... @defer { ...ConsultancyLead } } } diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.txt b/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.txt index 51b827412d..1240695547 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.txt @@ -2,12 +2,7 @@ --graphql Content-Type: application/json -{"data":{"products":[{},{},{}]},"hasNext":true} - ---graphql -Content-Type: application/json - -{"incremental":[{"data":{"name":"CONSULTANCY","lead":{"id":1}},"path":["products",0]}],"hasNext":true} +{"data":{"products":[{"lead":{"__typename":"Employee","id":1}},{},{}]},"hasNext":true} --graphql Content-Type: application/json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.graphql b/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.graphql index acd30344b5..ebe2e79215 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.graphql +++ b/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.graphql @@ -1,5 +1,4 @@ fragment ConsultancyLead on Consultancy { - name lead { __typename id diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.txt b/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.txt index d8e5a749f3..1240695547 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.txt @@ -2,7 +2,7 @@ --graphql Content-Type: application/json -{"data":{"products":[{"name":"CONSULTANCY","lead":{"__typename":"Employee","id":1}},{},{}]},"hasNext":true} +{"data":{"products":[{"lead":{"__typename":"Employee","id":1}},{},{}]},"hasNext":true} --graphql Content-Type: application/json From 57cbea42967bebbb1b3d001f1ee147a7cb550b63 Mon Sep 17 00:00:00 2001 From: spetrunin Date: Thu, 26 Mar 2026 20:03:16 +0200 Subject: [PATCH 05/23] update fixtures and fix products queries --- .../employeeDetails_original.graphql | 19 +++ .../queries_defer/employee_original.graphql | 25 ++++ .../queries_defer/employees_original.graphql | 79 +++++++++++ .../findEmployeesNoCriteria_original.graphql | 7 + .../findEmployees_original.graphql | 30 +++++ .../queries_defer/full_original.graphql | 125 ++++++++++++++++++ .../products_defer_01_single_defer.graphql | 8 +- ...er_02_single_defer_between_regular.graphql | 8 +- ..._defer_03_multiple_fields_deferred.graphql | 8 +- ...ucts_defer_03_multiple_fields_deferred.txt | 11 +- ...ducts_defer_04_all_fields_deferred.graphql | 8 +- .../products_defer_05_nested_defer.graphql | 8 +- .../products_defer_05_nested_defer.txt | 16 ++- ...ts_defer_06_nested_defer_variation.graphql | 8 +- ...oducts_defer_06_nested_defer_variation.txt | 16 ++- .../products_defer_07_parallel_defers.graphql | 8 +- .../products_defer_07_parallel_defers.txt | 16 ++- ...ducts_defer_08_defer_nested_object.graphql | 8 +- .../products_defer_08_defer_nested_object.txt | 16 ++- ...r_09_duplicated_field_across_defer.graphql | 8 +- ...defer_09_duplicated_field_across_defer.txt | 11 +- ...oducts_defer_10_extensive_parallel.graphql | 8 +- ...efer_11_fragment_around_and_inside.graphql | 8 +- ...ducts_defer_12_fragment_body_defer.graphql | 80 +++++++---- .../products_defer_12_fragment_body_defer.txt | 21 ++- ...cts_defer_13_fragment_spread_defer.graphql | 76 +++++++---- ...roducts_defer_13_fragment_spread_defer.txt | 31 ++++- .../queries_defer/products_original.graphql | 63 +++++++++ .../requires_different_depth_original.graphql | 13 ++ .../requires_mood_original.graphql | 11 ++ 30 files changed, 667 insertions(+), 87 deletions(-) create mode 100644 router-tests/testdata/queries_defer/employeeDetails_original.graphql create mode 100644 router-tests/testdata/queries_defer/employee_original.graphql create mode 100644 router-tests/testdata/queries_defer/employees_original.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_original.graphql create mode 100644 router-tests/testdata/queries_defer/findEmployees_original.graphql create mode 100644 router-tests/testdata/queries_defer/full_original.graphql create mode 100644 router-tests/testdata/queries_defer/products_original.graphql create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_original.graphql create mode 100644 router-tests/testdata/queries_defer/requires_mood_original.graphql diff --git a/router-tests/testdata/queries_defer/employeeDetails_original.graphql b/router-tests/testdata/queries_defer/employeeDetails_original.graphql new file mode 100644 index 0000000000..c87d78a82c --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_original.graphql @@ -0,0 +1,19 @@ +query { + # Fetch from employees subgraph + employees { + id + # Fetch from products subgraph + notes + # Fetch from hobbies subgraph + hobbies { + __typename + # Fetch from employees subgraph + employees { + id + details { + forename + } + } + } + } +} diff --git a/router-tests/testdata/queries_defer/employee_original.graphql b/router-tests/testdata/queries_defer/employee_original.graphql new file mode 100644 index 0000000000..8be0b7a68d --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_original.graphql @@ -0,0 +1,25 @@ +query { + # can return null + employee(id: 1) { + # resolved through employees subgraph + id + details { + forename + location { + language + } + } + hobbies { + __typename + } + } + teammates(team: OPERATIONS) { + # resolved through employees subgraph + id + details { + forename + } + # resolved through products subgraph + products + } +} diff --git a/router-tests/testdata/queries_defer/employees_original.graphql b/router-tests/testdata/queries_defer/employees_original.graphql new file mode 100644 index 0000000000..7f56d20f3a --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_original.graphql @@ -0,0 +1,79 @@ +query { + employees { + # resolved through employees subgraph + id + # overridden by the products subgraph + notes + details { + # resolved through either employees or family subgraph + forename + surname + # resolved through employees subgraph + location { + key { + name + } + language + } + # resolved through family subgraph + hasChildren + # maritalStatus can return null + maritalStatus + nationality + # pets can return null + pets { + class + gender + name + ... on Cat { + type + } + ... on Dog { + breed + } + ... on Alligator { + dangerous + } + } + } + # resolved through employees subgraph + role { + departments + title + ... on Engineer { + engineerType + } + ... on Operator { + operatorType + } + } + # resolved through hobbies subgraph + hobbies { + ... on Exercise { + category + } + ... on Flying { + planeModels + yearsOfExperience + } + ... on Gaming { + genres + name + yearsOfExperience + } + ... on Other { + name + } + ... on Programming { + languages + } + ... on Travelling { + countriesLived { + language + } + } + } + # resolved through products subgraph + products + } +} diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_original.graphql b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_original.graphql new file mode 100644 index 0000000000..73f740eef5 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_original.graphql @@ -0,0 +1,7 @@ +query { + findEmployees { + details { + forename + } + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployees_original.graphql b/router-tests/testdata/queries_defer/findEmployees_original.graphql new file mode 100644 index 0000000000..bd3bbb9993 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_original.graphql @@ -0,0 +1,30 @@ +query { + a: findEmployees(criteria: { + hasPets: true + }) { + details { + forename + } + } + b: findEmployees(criteria: { + hasPets: false, nationality: GERMAN, nested: { maritalStatus: MARRIED } + }) { + details { + forename + } + } + c: findEmployees(criteria: { + hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED } + }) { + details { + forename + } + } + d: findEmployees(criteria: { + hasPets: true, nationality: ENGLISH, nested: { maritalStatus: MARRIED, hasChildren: true } + }) { + details { + forename + } + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_original.graphql b/router-tests/testdata/queries_defer/full_original.graphql new file mode 100644 index 0000000000..7dcebb6c3d --- /dev/null +++ b/router-tests/testdata/queries_defer/full_original.graphql @@ -0,0 +1,125 @@ +query { + employees { + # resolved through employees subgraph + id + # overridden by the products subgraph + notes + details { + # resolved through either employees or family subgraph + forename + surname + # resolved through employees subgraph + location { + language + } + # resolved through family subgraph + hasChildren + # maritalStatus can return null + maritalStatus + nationality + # pets can return null + pets { + class + gender + name + ... on Cat { + type + } + ... on Dog { + breed + } + ... on Alligator { + dangerous + } + } + } + # resolved through employees subgraph + role { + departments + title + ... on Engineer { + engineerType + } + ... on Operator { + operatorType + } + } + # resolved through hobbies subgraph + hobbies { + ... on Exercise { + category + } + ... on Flying { + planeModels + yearsOfExperience + } + ... on Gaming { + genres + name + yearsOfExperience + } + ... on Other { + name + } + ... on Programming { + languages + } + ... on Travelling { + countriesLived { + language + key { + name + } + } + } + } + # resolved through products subgraph + products + } + # can return null + employee(id: 1) { + # resolved through employees subgraph + id + details { + forename + location { + language + } + } + } + teammates(team: OPERATIONS) { + # resolved through employees subgraph + id + ...EmployeeNameFragment + # resolved through products subgraph + products + } + productTypes { + ... on Documentation { + url(product: SDK) + urls(products: [COSMO, MARKETING]) + } + ... on Consultancy { + lead { + ...EmployeeNameFragment + } + name + } + } + a: findEmployees(criteria: { + hasPets: true, nationality: UKRAINIAN, nested: { maritalStatus: ENGAGED } + }) { + ...EmployeeNameFragment + } + b: findEmployees(criteria: { + hasPets: true, nationality: GERMAN, nested: { maritalStatus: MARRIED, hasChildren: true } + }) { + ...EmployeeNameFragment + } +} + +fragment EmployeeNameFragment on Employee { + details { + forename + } +} diff --git a/router-tests/testdata/queries_defer/products_defer_01_single_defer.graphql b/router-tests/testdata/queries_defer/products_defer_01_single_defer.graphql index b3009cd935..c82f062749 100644 --- a/router-tests/testdata/queries_defer/products_defer_01_single_defer.graphql +++ b/router-tests/testdata/queries_defer/products_defer_01_single_defer.graphql @@ -1,6 +1,8 @@ query { products { - upc + ... on IProduct { + upc + } ... on Cosmo { name lead { details { forename } } @@ -15,7 +17,9 @@ query { ... @defer { productTypes { __typename - upc + ... on IProduct { + upc + } ... on Documentation { url(product: COSMO) urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) diff --git a/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql b/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql index b3009cd935..c82f062749 100644 --- a/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql +++ b/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql @@ -1,6 +1,8 @@ query { products { - upc + ... on IProduct { + upc + } ... on Cosmo { name lead { details { forename } } @@ -15,7 +17,9 @@ query { ... @defer { productTypes { __typename - upc + ... on IProduct { + upc + } ... on Documentation { url(product: COSMO) urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) diff --git a/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql b/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql index 87069616f7..68ee2aade4 100644 --- a/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql +++ b/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql @@ -1,6 +1,8 @@ query { products { - upc + ... on IProduct { + upc + } ... on Cosmo { name ... @defer { @@ -16,7 +18,9 @@ query { } productTypes { __typename - upc + ... on IProduct { + upc + } ... on Documentation { url(product: COSMO) urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) diff --git a/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.txt b/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.txt index dbb83bd530..ae554c1e09 100644 --- a/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.txt +++ b/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.txt @@ -2,5 +2,12 @@ --graphql Content-Type: application/json -{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} ---graphql-- \ No newline at end of file +{"data":{"products":[{},{"name":"COSMO","upc":"cosmo"},{"owner":{"details":{"forename":"Jens"}},"clientLanguages":["RUST","TYPESCRIPT"],"unicode":"😀♥!\u0015\u0010🝥","upc":"sdk"}],"productTypes":[{"__typename":"Cosmo","upc":"cosmo"},{"__typename":"Consultancy","lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"__typename":"Documentation","url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"repositoryURL":"https://github.com/wundergraph/cosmo","lead":{"details":{"forename":"Dustin"}}},"path":["products",1]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql b/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql index a22dee9c2f..33f5221fb7 100644 --- a/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql +++ b/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql @@ -1,7 +1,9 @@ query { ... @defer { products { - upc + ... on IProduct { + upc + } ... on Cosmo { name lead { details { forename } } @@ -15,7 +17,9 @@ query { } productTypes { __typename - upc + ... on IProduct { + upc + } ... on Documentation { url(product: COSMO) urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) diff --git a/router-tests/testdata/queries_defer/products_defer_05_nested_defer.graphql b/router-tests/testdata/queries_defer/products_defer_05_nested_defer.graphql index 2b6824b9ed..4fee6963d2 100644 --- a/router-tests/testdata/queries_defer/products_defer_05_nested_defer.graphql +++ b/router-tests/testdata/queries_defer/products_defer_05_nested_defer.graphql @@ -1,6 +1,8 @@ query { products { - upc + ... on IProduct { + upc + } ... on Cosmo { name ... @defer { @@ -16,7 +18,9 @@ query { } productTypes { __typename - upc + ... on IProduct { + upc + } ... on Documentation { url(product: COSMO) urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) diff --git a/router-tests/testdata/queries_defer/products_defer_05_nested_defer.txt b/router-tests/testdata/queries_defer/products_defer_05_nested_defer.txt index dbb83bd530..b2f9b53270 100644 --- a/router-tests/testdata/queries_defer/products_defer_05_nested_defer.txt +++ b/router-tests/testdata/queries_defer/products_defer_05_nested_defer.txt @@ -2,5 +2,17 @@ --graphql Content-Type: application/json -{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} ---graphql-- \ No newline at end of file +{"data":{"products":[{},{"name":"COSMO","upc":"cosmo"},{"owner":{"details":{"forename":"Jens"}},"clientLanguages":["RUST","TYPESCRIPT"],"unicode":"😀♥!\u0015\u0010🝥","upc":"sdk"}],"productTypes":[{"__typename":"Cosmo","upc":"cosmo"},{"__typename":"Consultancy","lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"__typename":"Documentation","url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"repositoryURL":"https://github.com/wundergraph/cosmo"},"path":["products",1]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"details":{"forename":"Dustin"}}},"path":["products",1]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql b/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql index 1f44bf422f..5ce6d8b40c 100644 --- a/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql +++ b/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql @@ -1,7 +1,9 @@ query { ... @defer { products { - upc + ... on IProduct { + upc + } ... on Cosmo { name ... @defer { @@ -18,7 +20,9 @@ query { } productTypes { __typename - upc + ... on IProduct { + upc + } ... on Documentation { url(product: COSMO) urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) diff --git a/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.txt index dbb83bd530..9f21d0fb4b 100644 --- a/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.txt +++ b/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.txt @@ -2,5 +2,17 @@ --graphql Content-Type: application/json -{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} ---graphql-- \ No newline at end of file +{"data":{"productTypes":[{"__typename":"Cosmo","upc":"cosmo"},{"__typename":"Consultancy","lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"__typename":"Documentation","url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"products":[{},{"name":"COSMO","upc":"cosmo"},{"owner":{"details":{"forename":"Jens"}},"clientLanguages":["RUST","TYPESCRIPT"],"unicode":"😀♥!\u0015\u0010🝥","upc":"sdk"}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"repositoryURL":"https://github.com/wundergraph/cosmo","lead":{"details":{"forename":"Dustin"}}},"path":["products",1]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.graphql b/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.graphql index 168981e8f5..fd720968f8 100644 --- a/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.graphql +++ b/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.graphql @@ -1,6 +1,8 @@ query { products { - upc + ... on IProduct { + upc + } ... on Cosmo { name ... @defer { repositoryURL } @@ -14,7 +16,9 @@ query { } productTypes { __typename - upc + ... on IProduct { + upc + } ... on Documentation { url(product: COSMO) urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) diff --git a/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.txt index dbb83bd530..b2f9b53270 100644 --- a/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.txt +++ b/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.txt @@ -2,5 +2,17 @@ --graphql Content-Type: application/json -{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} ---graphql-- \ No newline at end of file +{"data":{"products":[{},{"name":"COSMO","upc":"cosmo"},{"owner":{"details":{"forename":"Jens"}},"clientLanguages":["RUST","TYPESCRIPT"],"unicode":"😀♥!\u0015\u0010🝥","upc":"sdk"}],"productTypes":[{"__typename":"Cosmo","upc":"cosmo"},{"__typename":"Consultancy","lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"__typename":"Documentation","url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"repositoryURL":"https://github.com/wundergraph/cosmo"},"path":["products",1]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"details":{"forename":"Dustin"}}},"path":["products",1]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.graphql b/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.graphql index 6cf9a89fed..82def318b7 100644 --- a/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.graphql +++ b/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.graphql @@ -1,6 +1,8 @@ query { products { - upc + ... on IProduct { + upc + } ... on Cosmo { name repositoryURL @@ -14,7 +16,9 @@ query { } productTypes { __typename - upc + ... on IProduct { + upc + } ... on Documentation { url(product: COSMO) urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) diff --git a/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.txt b/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.txt index dbb83bd530..9ec2fdac0b 100644 --- a/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.txt +++ b/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.txt @@ -2,5 +2,17 @@ --graphql Content-Type: application/json -{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} ---graphql-- \ No newline at end of file +{"data":{"products":[{},{"name":"COSMO","repositoryURL":"https://github.com/wundergraph/cosmo","upc":"cosmo"},{"owner":{"details":{"forename":"Jens"}},"clientLanguages":["RUST","TYPESCRIPT"],"unicode":"😀♥!\u0015\u0010🝥","upc":"sdk"}],"productTypes":[{"__typename":"Cosmo","upc":"cosmo"},{"__typename":"Consultancy","name":"CONSULTANCY"},{"__typename":"Documentation","url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"details":{"forename":"Dustin"}}},"path":["products",1]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"details":{"forename":"Jens"}}},"path":["productTypes",1]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql b/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql index 003266eb32..300b9fabea 100644 --- a/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql +++ b/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql @@ -1,6 +1,8 @@ query { products { - upc + ... on IProduct { + upc + } ... on Cosmo { name lead { details { forename } } @@ -17,7 +19,9 @@ query { } productTypes { __typename - upc + ... on IProduct { + upc + } ... on Documentation { url(product: COSMO) urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) diff --git a/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.txt index dbb83bd530..9ab18657eb 100644 --- a/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.txt +++ b/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.txt @@ -2,5 +2,12 @@ --graphql Content-Type: application/json -{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} ---graphql-- \ No newline at end of file +{"data":{"products":[{},{"name":"COSMO","lead":{"details":{"forename":"Dustin"}},"upc":"cosmo"},{"owner":{"details":{"forename":"Jens"}},"clientLanguages":["RUST","TYPESCRIPT"],"unicode":"😀♥!\u0015\u0010🝥","upc":"sdk"}],"productTypes":[{"__typename":"Cosmo","upc":"cosmo"},{"__typename":"Consultancy","lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"__typename":"Documentation","url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"repositoryURL":"https://github.com/wundergraph/cosmo"},"path":["products",1]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.graphql b/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.graphql index d426a29698..7870ccf0b1 100644 --- a/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.graphql +++ b/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.graphql @@ -1,7 +1,9 @@ query { ... @defer { products { - ... @defer { upc } + ... on IProduct @defer { + upc + } ... on Cosmo { ... @defer { name } ... @defer { repositoryURL } @@ -17,7 +19,9 @@ query { ... @defer { productTypes { __typename - ... @defer { upc } + ... on IProduct @defer { + upc + } ... on Documentation { ... @defer { url(product: COSMO) diff --git a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql index 16e9e1588f..64f607663e 100644 --- a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql +++ b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql @@ -11,7 +11,9 @@ fragment SDKDetails on SDK { } fragment ProductTypeDetails on ProductType { - upc + ... on IProduct { + upc + } ... on Documentation { url(product: COSMO) urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) @@ -24,7 +26,9 @@ fragment ProductTypeDetails on ProductType { query { products { - upc + ... on IProduct @defer { + upc + } ... @defer { ...CosmoDetails } ... @defer { ...SDKDetails } } diff --git a/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql b/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql index 4f6cf2beb1..e86d7fd56d 100644 --- a/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql +++ b/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql @@ -1,39 +1,69 @@ -fragment CosmoDetails on Cosmo { - name - ... @defer { - repositoryURL - lead { details { forename } } +query { + products { + ...IProductFragment + ...CosmoFragment + ...SDKFragment + } + productTypes { + __typename + ... on Documentation { + url(product: COSMO) + urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) + } + ...IProductFragment + ... on Consultancy { + lead { + details { + forename + } + } + name + } } } -fragment SDKDetails on SDK { +fragment IProductFragment on IProduct { ... @defer { - clientLanguages - unicode - owner { details { forename } } + upc } } -fragment ProductTypeDetails on ProductType { - upc - ... on Documentation { - url(product: COSMO) - urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) +fragment CosmoFragment on Cosmo { + name + lead { + ... @defer { + details { + forename + } + } } - ... on Consultancy { - lead { details { forename } } - name + repositoryURL +} + +fragment SDKFragment on SDK { + owner { + details { + forename + } } + clientLanguages + unicode } -query { - products { - upc - ...CosmoDetails - ...SDKDetails +fragment EmployeeFragment on Employee { + id + details { + ... @defer { + forename + location { + language + } + } + maritalStatus } - productTypes { - __typename - ...ProductTypeDetails + role { + departments + title } + products } diff --git a/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.txt b/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.txt index ff5f1e96d6..23ad231ba3 100644 --- a/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.txt +++ b/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.txt @@ -2,5 +2,22 @@ --graphql Content-Type: application/json -{"errors":[{"message":"Unknown type \"ProductType\".","path":["ProductType"]}]} ---graphql-- \ No newline at end of file +{"data":{"products":[{},{"name":"COSMO","lead":{},"repositoryURL":"https://github.com/wundergraph/cosmo"},{"owner":{"details":{"forename":"Jens"}},"clientLanguages":["RUST","TYPESCRIPT"],"unicode":"😀♥!\u0015\u0010🝥"}],"productTypes":[{"__typename":"Cosmo"},{"__typename":"Consultancy","lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"__typename":"Documentation","url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"upc":"cosmo"},"path":["products",1]},{"data":{"upc":"sdk"},"path":["products",2]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Dustin"}},"path":["products",1,"lead"]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"upc":"cosmo"},"path":["productTypes",0]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql b/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql index 3f6b994fdd..6b2028c007 100644 --- a/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql +++ b/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql @@ -1,35 +1,63 @@ -fragment CosmoDetails on Cosmo { - name - repositoryURL - lead { details { forename } } +query { + products { + ...IProductFragment @defer + ...CosmoFragment @defer + ...SDKFragment @defer + } + productTypes { + __typename + ... on Documentation @defer { + url(product: COSMO) + urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) + } + ...IProductFragment @defer + ... on Consultancy { + lead { + details { + forename + } + } + name + } + } } -fragment SDKDetails on SDK { - owner { details { forename } } - clientLanguages - unicode +fragment IProductFragment on IProduct { + upc } -fragment ProductTypeDetails on ProductType { - upc - ... on Documentation { - url(product: COSMO) - urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) +fragment CosmoFragment on Cosmo { + name + lead { + details { + forename + } } - ... on Consultancy { - lead { details { forename } } - name + repositoryURL +} + +fragment SDKFragment on SDK { + owner { + details { + forename + } } + clientLanguages + unicode } -query { - products { - upc - ...CosmoDetails @defer - ...SDKDetails @defer +fragment EmployeeFragment on Employee { + id + details { + forename + location { + language + } + maritalStatus } - productTypes { - __typename - ...ProductTypeDetails @defer + role { + departments + title } + products } diff --git a/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt b/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt index ff5f1e96d6..a026201725 100644 --- a/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt +++ b/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt @@ -2,5 +2,32 @@ --graphql Content-Type: application/json -{"errors":[{"message":"Unknown type \"ProductType\".","path":["ProductType"]}]} ---graphql-- \ No newline at end of file +{"data":{"products":[{},{},{}],"productTypes":[{"__typename":"Cosmo"},{"__typename":"Consultancy","lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"__typename":"Documentation"}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"upc":"cosmo"},"path":["products",1]},{"data":{"upc":"sdk"},"path":["products",2]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"name":"COSMO","lead":{"details":{"forename":"Dustin"}},"repositoryURL":"https://github.com/wundergraph/cosmo"},"path":["products",1]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"owner":{"details":{"forename":"Jens"}},"clientLanguages":["RUST","TYPESCRIPT"],"unicode":"😀♥!\u0015\u0010🝥"},"path":["products",2]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]},"path":["productTypes",2]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"upc":"cosmo"},"path":["productTypes",0]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/products_original.graphql b/router-tests/testdata/queries_defer/products_original.graphql new file mode 100644 index 0000000000..96d9e8c4f3 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_original.graphql @@ -0,0 +1,63 @@ +query { + products { + ...IProductFragment + ...CosmoFragment + ...SDKFragment + } + productTypes { + __typename + ... on Documentation { + url(product: COSMO) + urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) + } + ...IProductFragment + ... on Consultancy { + lead { + details { + forename + } + } + name + } + } +} + +fragment IProductFragment on IProduct { + upc +} + +fragment CosmoFragment on Cosmo { + name + lead { + details { + forename + } + } + repositoryURL +} + +fragment SDKFragment on SDK { + owner { + details { + forename + } + } + clientLanguages + unicode +} + +fragment EmployeeFragment on Employee { + id + details { + forename + location { + language + } + maritalStatus + } + role { + departments + title + } + products +} diff --git a/router-tests/testdata/queries_defer/requires_different_depth_original.graphql b/router-tests/testdata/queries_defer/requires_different_depth_original.graphql new file mode 100644 index 0000000000..12ce47ae98 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_original.graphql @@ -0,0 +1,13 @@ +query Requires { + products { + __typename + ... on Consultancy { + lead { + __typename + id + derivedMood + } + isLeadAvailable + } + } +} diff --git a/router-tests/testdata/queries_defer/requires_mood_original.graphql b/router-tests/testdata/queries_defer/requires_mood_original.graphql new file mode 100644 index 0000000000..1d0775039c --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_original.graphql @@ -0,0 +1,11 @@ +query RequiresMood { + products { + ... on Consultancy { + lead { + __typename + id + derivedMood + } + } + } +} From ed86425c0124cfe5f132f458a6c5145a7ce7e59d Mon Sep 17 00:00:00 2001 From: spetrunin Date: Thu, 26 Mar 2026 20:04:02 +0200 Subject: [PATCH 06/23] add failing todo file --- ..._defer_12_fragment_body_defer.graphql.todo | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql.todo diff --git a/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql.todo b/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql.todo new file mode 100644 index 0000000000..4f6cf2beb1 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql.todo @@ -0,0 +1,39 @@ +fragment CosmoDetails on Cosmo { + name + ... @defer { + repositoryURL + lead { details { forename } } + } +} + +fragment SDKDetails on SDK { + ... @defer { + clientLanguages + unicode + owner { details { forename } } + } +} + +fragment ProductTypeDetails on ProductType { + upc + ... on Documentation { + url(product: COSMO) + urls(products: [CONSULTANCY, ENGINE, HUMAN_RESOURCES, SDK]) + } + ... on Consultancy { + lead { details { forename } } + name + } +} + +query { + products { + upc + ...CosmoDetails + ...SDKDetails + } + productTypes { + __typename + ...ProductTypeDetails + } +} From 770718034ef38af45270467426ff59100f4b9c28 Mon Sep 17 00:00:00 2001 From: spetrunin Date: Thu, 26 Mar 2026 20:29:53 +0200 Subject: [PATCH 07/23] add reconstructed fixtures --- router-tests/defer_test.go | 24 +- ...s_defer_01_single_defer_reconstructed.json | 1690 +++++++++++++++++ ...e_defer_between_regular_reconstructed.json | 1690 +++++++++++++++++ ..._04_all_fields_deferred_reconstructed.json | 1690 +++++++++++++++++ ..._08_defer_nested_object_reconstructed.json | 1690 +++++++++++++++++ ...e_defer_01_single_defer_reconstructed.json | 42 + ...e_defer_between_regular_reconstructed.json | 42 + ...ultiple_fields_deferred_reconstructed.json | 42 + ..._04_all_fields_deferred_reconstructed.json | 42 + ...e_defer_05_nested_defer_reconstructed.json | 42 + ..._nested_defer_variation_reconstructed.json | 42 + ...efer_07_parallel_defers_reconstructed.json | 42 + ..._08_defer_nested_object_reconstructed.json | 42 + ...ated_field_across_defer_reconstructed.json | 42 + ...r_10_extensive_parallel_reconstructed.json | 42 + ...s_defer_01_single_defer_reconstructed.json | 652 +++++++ ...e_defer_between_regular_reconstructed.json | 652 +++++++ ...ultiple_fields_deferred_reconstructed.json | 652 +++++++ ..._04_all_fields_deferred_reconstructed.json | 652 +++++++ ...s_defer_05_nested_defer_reconstructed.json | 652 +++++++ ..._nested_defer_variation_reconstructed.json | 652 +++++++ ...efer_07_parallel_defers_reconstructed.json | 652 +++++++ ..._08_defer_nested_object_reconstructed.json | 652 +++++++ ...gment_around_and_inside_reconstructed.json | 652 +++++++ ..._12_fragment_body_defer_reconstructed.json | 652 +++++++ ...3_fragment_spread_defer_reconstructed.json | 652 +++++++ ...a_defer_01_single_defer_reconstructed.json | 56 + ...e_defer_between_regular_reconstructed.json | 56 + ...ultiple_fields_deferred_reconstructed.json | 56 + ..._04_all_fields_deferred_reconstructed.json | 56 + ...a_defer_05_nested_defer_reconstructed.json | 56 + ..._nested_defer_variation_reconstructed.json | 56 + ...efer_07_parallel_defers_reconstructed.json | 56 + ..._08_defer_nested_object_reconstructed.json | 56 + ...r_10_extensive_parallel_reconstructed.json | 56 + ...s_defer_01_single_defer_reconstructed.json | 51 + ...e_defer_between_regular_reconstructed.json | 51 + ...ultiple_fields_deferred_reconstructed.json | 51 + ..._04_all_fields_deferred_reconstructed.json | 51 + ...s_defer_05_nested_defer_reconstructed.json | 51 + ..._nested_defer_variation_reconstructed.json | 51 + ...efer_07_parallel_defers_reconstructed.json | 51 + ..._08_defer_nested_object_reconstructed.json | 51 + ...r_10_extensive_parallel_reconstructed.json | 51 + .../queries_defer/findEmployees_original.json | 4 +- ...l_defer_01_single_defer_reconstructed.json | 730 +++++++ ...e_defer_between_regular_reconstructed.json | 730 +++++++ ...ultiple_fields_deferred_reconstructed.json | 730 +++++++ ..._04_all_fields_deferred_reconstructed.json | 730 +++++++ ...l_defer_05_nested_defer_reconstructed.json | 730 +++++++ ..._nested_defer_variation_reconstructed.json | 730 +++++++ ...efer_07_parallel_defers_reconstructed.json | 730 +++++++ ..._08_defer_nested_object_reconstructed.json | 730 +++++++ ...r_10_extensive_parallel_reconstructed.json | 211 ++ ...gment_around_and_inside_reconstructed.json | 10 + ..._12_fragment_body_defer_reconstructed.json | 10 + ...3_fragment_spread_defer_reconstructed.json | 10 + ..._08_defer_nested_object_reconstructed.json | 55 + ...gment_around_and_inside_reconstructed.json | 10 + ...h_defer_01_single_defer_reconstructed.json | 20 + ...e_defer_between_regular_reconstructed.json | 20 + ...ultiple_fields_deferred_reconstructed.json | 20 + ..._04_all_fields_deferred_reconstructed.json | 15 + ...h_defer_05_nested_defer_reconstructed.json | 15 + ..._nested_defer_variation_reconstructed.json | 15 + ...efer_07_parallel_defers_reconstructed.json | 20 + ...3_fragment_spread_defer_reconstructed.json | 20 + ...d_defer_01_single_defer_reconstructed.json | 14 + ...ultiple_fields_deferred_reconstructed.json | 14 + ..._04_all_fields_deferred_reconstructed.json | 14 + ...d_defer_05_nested_defer_reconstructed.json | 14 + ..._nested_defer_variation_reconstructed.json | 14 + ...efer_07_parallel_defers_reconstructed.json | 14 + ...3_fragment_spread_defer_reconstructed.json | 14 + 74 files changed, 21725 insertions(+), 7 deletions(-) create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employee_defer_01_single_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employee_defer_05_nested_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employee_defer_07_parallel_defers_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employees_defer_01_single_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employees_defer_05_nested_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employees_defer_07_parallel_defers_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/full_defer_01_single_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/full_defer_05_nested_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/full_defer_07_parallel_defers_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/full_defer_08_defer_nested_object_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/full_defer_10_extensive_parallel_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/products_defer_08_defer_nested_object_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer_reconstructed.json diff --git a/router-tests/defer_test.go b/router-tests/defer_test.go index 5b21ab468c..06e626be22 100644 --- a/router-tests/defer_test.go +++ b/router-tests/defer_test.go @@ -35,12 +35,15 @@ func TestDeferTestdataQueries(t *testing.T) { continue } + // "full_defer_01_single_defer" → source = "full" + source, _, found := strings.Cut(name, "_defer_") + if !found { + continue + } + t.Run(name, func(t *testing.T) { t.Parallel() - // "full_defer_01_single_defer" → source = "full" - source, _, _ := strings.Cut(name, "_defer_") - gMultipart := goldie.New( t, goldie.WithFixtureDir("testdata/queries_defer"), @@ -50,7 +53,7 @@ func TestDeferTestdataQueries(t *testing.T) { gFull := goldie.New( t, goldie.WithFixtureDir("testdata/queries_defer"), - goldie.WithNameSuffix("_original.json"), + goldie.WithNameSuffix(".json"), goldie.WithDiffEngine(goldie.ClassicDiff), ) @@ -89,7 +92,18 @@ func TestDeferTestdataQueries(t *testing.T) { require.NoError(t, err) actual := normalizeJSON(t, reconstructed) - gFull.Assert(t, source, actual) + + gFull.Assert(t, name+"_reconstructed", actual) + + // compare with original + if false { + expected, err := os.ReadFile(gFull.GoldenFileName(t, source+"_original")) + require.NoError(t, err) + // manually assert to never update original when update flag is specified + if diff := goldie.Diff(goldie.ClassicDiff, string(actual), string(expected)); diff != "" { + t.Fatal(diff) + } + } }) }) }) diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer_reconstructed.json new file mode 100644 index 0000000000..930f5d887d --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer_reconstructed.json @@ -0,0 +1,1690 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 4, + "details": { + "forename": "Björn" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular_reconstructed.json new file mode 100644 index 0000000000..930f5d887d --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular_reconstructed.json @@ -0,0 +1,1690 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 4, + "details": { + "forename": "Björn" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..930f5d887d --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred_reconstructed.json @@ -0,0 +1,1690 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 4, + "details": { + "forename": "Björn" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object_reconstructed.json new file mode 100644 index 0000000000..930f5d887d --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object_reconstructed.json @@ -0,0 +1,1690 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 4, + "details": { + "forename": "Björn" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employee_defer_01_single_defer_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_01_single_defer_reconstructed.json new file mode 100644 index 0000000000..80a77c000e --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_01_single_defer_reconstructed.json @@ -0,0 +1,42 @@ +{ + "data": { + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + }, + "hobbies": [ + {}, + {}, + {}, + {}, + {} + ] + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular_reconstructed.json new file mode 100644 index 0000000000..80a77c000e --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular_reconstructed.json @@ -0,0 +1,42 @@ +{ + "data": { + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + }, + "hobbies": [ + {}, + {}, + {}, + {}, + {} + ] + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..80a77c000e --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred_reconstructed.json @@ -0,0 +1,42 @@ +{ + "data": { + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + }, + "hobbies": [ + {}, + {}, + {}, + {}, + {} + ] + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..80a77c000e --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred_reconstructed.json @@ -0,0 +1,42 @@ +{ + "data": { + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + }, + "hobbies": [ + {}, + {}, + {}, + {}, + {} + ] + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employee_defer_05_nested_defer_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_05_nested_defer_reconstructed.json new file mode 100644 index 0000000000..80a77c000e --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_05_nested_defer_reconstructed.json @@ -0,0 +1,42 @@ +{ + "data": { + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + }, + "hobbies": [ + {}, + {}, + {}, + {}, + {} + ] + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation_reconstructed.json new file mode 100644 index 0000000000..80a77c000e --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation_reconstructed.json @@ -0,0 +1,42 @@ +{ + "data": { + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + }, + "hobbies": [ + {}, + {}, + {}, + {}, + {} + ] + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers_reconstructed.json new file mode 100644 index 0000000000..80a77c000e --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers_reconstructed.json @@ -0,0 +1,42 @@ +{ + "data": { + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + }, + "hobbies": [ + {}, + {}, + {}, + {}, + {} + ] + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object_reconstructed.json new file mode 100644 index 0000000000..80a77c000e --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object_reconstructed.json @@ -0,0 +1,42 @@ +{ + "data": { + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + }, + "hobbies": [ + {}, + {}, + {}, + {}, + {} + ] + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer_reconstructed.json new file mode 100644 index 0000000000..80a77c000e --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer_reconstructed.json @@ -0,0 +1,42 @@ +{ + "data": { + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + }, + "hobbies": [ + {}, + {}, + {}, + {}, + {} + ] + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel_reconstructed.json new file mode 100644 index 0000000000..80a77c000e --- /dev/null +++ b/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel_reconstructed.json @@ -0,0 +1,42 @@ +{ + "data": { + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + }, + "hobbies": [ + {}, + {}, + {}, + {}, + {} + ] + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employees_defer_01_single_defer_reconstructed.json b/router-tests/testdata/queries_defer/employees_defer_01_single_defer_reconstructed.json new file mode 100644 index 0000000000..7193fc0aa0 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_01_single_defer_reconstructed.json @@ -0,0 +1,652 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ], + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "COSMO", + "SDK" + ], + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "key": { + "name": "America" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "products": [ + "CONSULTANCY", + "MARKETING" + ], + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Serbian" + } + ] + } + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ], + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "key": { + "name": "Ukraine" + }, + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "products": [ + "ENGINE", + "SDK" + ], + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "COSMO", + "SDK" + ], + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "COSMO", + "SDK" + ], + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "key": { + "name": "Netherlands" + }, + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ], + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German" + }, + { + "language": "Indonesian" + }, + { + "language": "Dutch" + }, + { + "language": "Portuguese" + }, + { + "language": "Spanish" + }, + { + "language": "Thai" + } + ] + } + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "products": [ + "FINANCE" + ], + "hobbies": [ + { + "name": "Spending time with the family" + } + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "key": { + "name": "England" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ], + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Korean" + }, + { + "language": "Taiwanese" + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular_reconstructed.json new file mode 100644 index 0000000000..7193fc0aa0 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular_reconstructed.json @@ -0,0 +1,652 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ], + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "COSMO", + "SDK" + ], + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "key": { + "name": "America" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "products": [ + "CONSULTANCY", + "MARKETING" + ], + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Serbian" + } + ] + } + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ], + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "key": { + "name": "Ukraine" + }, + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "products": [ + "ENGINE", + "SDK" + ], + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "COSMO", + "SDK" + ], + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "COSMO", + "SDK" + ], + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "key": { + "name": "Netherlands" + }, + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ], + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German" + }, + { + "language": "Indonesian" + }, + { + "language": "Dutch" + }, + { + "language": "Portuguese" + }, + { + "language": "Spanish" + }, + { + "language": "Thai" + } + ] + } + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "products": [ + "FINANCE" + ], + "hobbies": [ + { + "name": "Spending time with the family" + } + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "key": { + "name": "England" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ], + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Korean" + }, + { + "language": "Taiwanese" + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..301f6214ff --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred_reconstructed.json @@ -0,0 +1,652 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "key": { + "name": "America" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Serbian" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "key": { + "name": "Ukraine" + }, + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "key": { + "name": "Netherlands" + }, + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German" + }, + { + "language": "Indonesian" + }, + { + "language": "Dutch" + }, + { + "language": "Portuguese" + }, + { + "language": "Spanish" + }, + { + "language": "Thai" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "key": { + "name": "England" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Korean" + }, + { + "language": "Taiwanese" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..301f6214ff --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred_reconstructed.json @@ -0,0 +1,652 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "key": { + "name": "America" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Serbian" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "key": { + "name": "Ukraine" + }, + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "key": { + "name": "Netherlands" + }, + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German" + }, + { + "language": "Indonesian" + }, + { + "language": "Dutch" + }, + { + "language": "Portuguese" + }, + { + "language": "Spanish" + }, + { + "language": "Thai" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "key": { + "name": "England" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Korean" + }, + { + "language": "Taiwanese" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employees_defer_05_nested_defer_reconstructed.json b/router-tests/testdata/queries_defer/employees_defer_05_nested_defer_reconstructed.json new file mode 100644 index 0000000000..7193fc0aa0 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_05_nested_defer_reconstructed.json @@ -0,0 +1,652 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ], + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "COSMO", + "SDK" + ], + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "key": { + "name": "America" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "products": [ + "CONSULTANCY", + "MARKETING" + ], + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Serbian" + } + ] + } + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ], + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "key": { + "name": "Ukraine" + }, + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "products": [ + "ENGINE", + "SDK" + ], + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "COSMO", + "SDK" + ], + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "COSMO", + "SDK" + ], + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "key": { + "name": "Netherlands" + }, + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ], + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German" + }, + { + "language": "Indonesian" + }, + { + "language": "Dutch" + }, + { + "language": "Portuguese" + }, + { + "language": "Spanish" + }, + { + "language": "Thai" + } + ] + } + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "products": [ + "FINANCE" + ], + "hobbies": [ + { + "name": "Spending time with the family" + } + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "key": { + "name": "England" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ], + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Korean" + }, + { + "language": "Taiwanese" + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation_reconstructed.json b/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation_reconstructed.json new file mode 100644 index 0000000000..7193fc0aa0 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation_reconstructed.json @@ -0,0 +1,652 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ], + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "COSMO", + "SDK" + ], + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "key": { + "name": "America" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "products": [ + "CONSULTANCY", + "MARKETING" + ], + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Serbian" + } + ] + } + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ], + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "key": { + "name": "Ukraine" + }, + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "products": [ + "ENGINE", + "SDK" + ], + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "COSMO", + "SDK" + ], + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "COSMO", + "SDK" + ], + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "key": { + "name": "Netherlands" + }, + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ], + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German" + }, + { + "language": "Indonesian" + }, + { + "language": "Dutch" + }, + { + "language": "Portuguese" + }, + { + "language": "Spanish" + }, + { + "language": "Thai" + } + ] + } + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "products": [ + "FINANCE" + ], + "hobbies": [ + { + "name": "Spending time with the family" + } + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "key": { + "name": "England" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ], + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Korean" + }, + { + "language": "Taiwanese" + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers_reconstructed.json b/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers_reconstructed.json new file mode 100644 index 0000000000..2946b93fd9 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers_reconstructed.json @@ -0,0 +1,652 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "key": { + "name": "America" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Serbian" + } + ] + } + ], + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "key": { + "name": "Ukraine" + }, + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "key": { + "name": "Netherlands" + }, + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German" + }, + { + "language": "Indonesian" + }, + { + "language": "Dutch" + }, + { + "language": "Portuguese" + }, + { + "language": "Spanish" + }, + { + "language": "Thai" + } + ] + } + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "key": { + "name": "England" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Korean" + }, + { + "language": "Taiwanese" + } + ] + } + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object_reconstructed.json b/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object_reconstructed.json new file mode 100644 index 0000000000..3d4a6f354f --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object_reconstructed.json @@ -0,0 +1,652 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "key": { + "name": "America" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Serbian" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "key": { + "name": "Ukraine" + }, + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "key": { + "name": "Netherlands" + }, + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German" + }, + { + "language": "Indonesian" + }, + { + "language": "Dutch" + }, + { + "language": "Portuguese" + }, + { + "language": "Spanish" + }, + { + "language": "Thai" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "key": { + "name": "England" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Korean" + }, + { + "language": "Taiwanese" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside_reconstructed.json b/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside_reconstructed.json new file mode 100644 index 0000000000..53edbb8100 --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside_reconstructed.json @@ -0,0 +1,652 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ], + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + } + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + } + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "key": { + "name": "America" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Serbian" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ], + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + } + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ], + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + } + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "key": { + "name": "Ukraine" + }, + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + } + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + } + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + } + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "key": { + "name": "Netherlands" + }, + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German" + }, + { + "language": "Indonesian" + }, + { + "language": "Dutch" + }, + { + "language": "Portuguese" + }, + { + "language": "Spanish" + }, + { + "language": "Thai" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + } + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ], + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + } + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "key": { + "name": "England" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Korean" + }, + { + "language": "Taiwanese" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer_reconstructed.json b/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer_reconstructed.json new file mode 100644 index 0000000000..40447bb48b --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer_reconstructed.json @@ -0,0 +1,652 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ], + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "products": [ + "COSMO", + "SDK" + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "key": { + "name": "America" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "products": [ + "CONSULTANCY", + "MARKETING" + ], + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Serbian" + } + ] + } + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ], + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "key": { + "name": "Ukraine" + }, + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "products": [ + "ENGINE", + "SDK" + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "products": [ + "COSMO", + "SDK" + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "products": [ + "COSMO", + "SDK" + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "key": { + "name": "Netherlands" + }, + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German" + }, + { + "language": "Indonesian" + }, + { + "language": "Dutch" + }, + { + "language": "Portuguese" + }, + { + "language": "Spanish" + }, + { + "language": "Thai" + } + ] + } + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "products": [ + "FINANCE" + ], + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "key": { + "name": "England" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ], + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Korean" + }, + { + "language": "Taiwanese" + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer_reconstructed.json b/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer_reconstructed.json new file mode 100644 index 0000000000..301f6214ff --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer_reconstructed.json @@ -0,0 +1,652 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "key": { + "name": "America" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Serbian" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "key": { + "name": "Ukraine" + }, + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "key": { + "name": "Netherlands" + }, + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German" + }, + { + "language": "Indonesian" + }, + { + "language": "Dutch" + }, + { + "language": "Portuguese" + }, + { + "language": "Spanish" + }, + { + "language": "Thai" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "key": { + "name": "England" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Korean" + }, + { + "language": "Taiwanese" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer_reconstructed.json b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer_reconstructed.json new file mode 100644 index 0000000000..5483c6e2a1 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer_reconstructed.json @@ -0,0 +1,56 @@ +{ + "data": { + "findEmployees": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Dustin" + } + }, + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Suvij" + } + }, + { + "details": { + "forename": "Nithin" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "Alexandra" + } + }, + { + "details": { + "forename": "David" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular_reconstructed.json new file mode 100644 index 0000000000..5483c6e2a1 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular_reconstructed.json @@ -0,0 +1,56 @@ +{ + "data": { + "findEmployees": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Dustin" + } + }, + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Suvij" + } + }, + { + "details": { + "forename": "Nithin" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "Alexandra" + } + }, + { + "details": { + "forename": "David" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..5483c6e2a1 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred_reconstructed.json @@ -0,0 +1,56 @@ +{ + "data": { + "findEmployees": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Dustin" + } + }, + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Suvij" + } + }, + { + "details": { + "forename": "Nithin" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "Alexandra" + } + }, + { + "details": { + "forename": "David" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..5483c6e2a1 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred_reconstructed.json @@ -0,0 +1,56 @@ +{ + "data": { + "findEmployees": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Dustin" + } + }, + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Suvij" + } + }, + { + "details": { + "forename": "Nithin" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "Alexandra" + } + }, + { + "details": { + "forename": "David" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer_reconstructed.json b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer_reconstructed.json new file mode 100644 index 0000000000..5483c6e2a1 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer_reconstructed.json @@ -0,0 +1,56 @@ +{ + "data": { + "findEmployees": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Dustin" + } + }, + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Suvij" + } + }, + { + "details": { + "forename": "Nithin" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "Alexandra" + } + }, + { + "details": { + "forename": "David" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation_reconstructed.json b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation_reconstructed.json new file mode 100644 index 0000000000..5483c6e2a1 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation_reconstructed.json @@ -0,0 +1,56 @@ +{ + "data": { + "findEmployees": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Dustin" + } + }, + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Suvij" + } + }, + { + "details": { + "forename": "Nithin" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "Alexandra" + } + }, + { + "details": { + "forename": "David" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers_reconstructed.json b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers_reconstructed.json new file mode 100644 index 0000000000..5483c6e2a1 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers_reconstructed.json @@ -0,0 +1,56 @@ +{ + "data": { + "findEmployees": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Dustin" + } + }, + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Suvij" + } + }, + { + "details": { + "forename": "Nithin" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "Alexandra" + } + }, + { + "details": { + "forename": "David" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object_reconstructed.json b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object_reconstructed.json new file mode 100644 index 0000000000..5483c6e2a1 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object_reconstructed.json @@ -0,0 +1,56 @@ +{ + "data": { + "findEmployees": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Dustin" + } + }, + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Suvij" + } + }, + { + "details": { + "forename": "Nithin" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "Alexandra" + } + }, + { + "details": { + "forename": "David" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel_reconstructed.json b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel_reconstructed.json new file mode 100644 index 0000000000..5483c6e2a1 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel_reconstructed.json @@ -0,0 +1,56 @@ +{ + "data": { + "findEmployees": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Dustin" + } + }, + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Suvij" + } + }, + { + "details": { + "forename": "Nithin" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "Alexandra" + } + }, + { + "details": { + "forename": "David" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer_reconstructed.json b/router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer_reconstructed.json new file mode 100644 index 0000000000..b7f8860cc7 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer_reconstructed.json @@ -0,0 +1,51 @@ +{ + "data": { + "a": [ + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "David" + } + } + ], + "c": [ + { + "details": { + "forename": "David" + } + } + ], + "d": [], + "b": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Alexandra" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular_reconstructed.json new file mode 100644 index 0000000000..b7f8860cc7 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular_reconstructed.json @@ -0,0 +1,51 @@ +{ + "data": { + "a": [ + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "David" + } + } + ], + "c": [ + { + "details": { + "forename": "David" + } + } + ], + "d": [], + "b": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Alexandra" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..7574026c39 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred_reconstructed.json @@ -0,0 +1,51 @@ +{ + "data": { + "a": [ + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "David" + } + } + ], + "d": [], + "b": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Alexandra" + } + } + ], + "c": [ + { + "details": { + "forename": "David" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..82cdcebcfc --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred_reconstructed.json @@ -0,0 +1,51 @@ +{ + "data": { + "a": [ + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "David" + } + } + ], + "b": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Alexandra" + } + } + ], + "c": [ + { + "details": { + "forename": "David" + } + } + ], + "d": [] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer_reconstructed.json b/router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer_reconstructed.json new file mode 100644 index 0000000000..7574026c39 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer_reconstructed.json @@ -0,0 +1,51 @@ +{ + "data": { + "a": [ + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "David" + } + } + ], + "d": [], + "b": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Alexandra" + } + } + ], + "c": [ + { + "details": { + "forename": "David" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation_reconstructed.json b/router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation_reconstructed.json new file mode 100644 index 0000000000..ef33d9630a --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation_reconstructed.json @@ -0,0 +1,51 @@ +{ + "data": { + "d": [], + "a": [ + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "David" + } + } + ], + "b": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Alexandra" + } + } + ], + "c": [ + { + "details": { + "forename": "David" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers_reconstructed.json b/router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers_reconstructed.json new file mode 100644 index 0000000000..7574026c39 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers_reconstructed.json @@ -0,0 +1,51 @@ +{ + "data": { + "a": [ + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "David" + } + } + ], + "d": [], + "b": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Alexandra" + } + } + ], + "c": [ + { + "details": { + "forename": "David" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object_reconstructed.json b/router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object_reconstructed.json new file mode 100644 index 0000000000..82cdcebcfc --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object_reconstructed.json @@ -0,0 +1,51 @@ +{ + "data": { + "a": [ + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "David" + } + } + ], + "b": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Alexandra" + } + } + ], + "c": [ + { + "details": { + "forename": "David" + } + } + ], + "d": [] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel_reconstructed.json b/router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel_reconstructed.json new file mode 100644 index 0000000000..82cdcebcfc --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel_reconstructed.json @@ -0,0 +1,51 @@ +{ + "data": { + "a": [ + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "David" + } + } + ], + "b": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Alexandra" + } + } + ], + "c": [ + { + "details": { + "forename": "David" + } + } + ], + "d": [] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployees_original.json b/router-tests/testdata/queries_defer/findEmployees_original.json index 82cdcebcfc..7574026c39 100644 --- a/router-tests/testdata/queries_defer/findEmployees_original.json +++ b/router-tests/testdata/queries_defer/findEmployees_original.json @@ -27,6 +27,7 @@ } } ], + "d": [], "b": [ { "details": { @@ -45,7 +46,6 @@ "forename": "David" } } - ], - "d": [] + ] } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_01_single_defer_reconstructed.json b/router-tests/testdata/queries_defer/full_defer_01_single_defer_reconstructed.json new file mode 100644 index 0000000000..40f3103d03 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_01_single_defer_reconstructed.json @@ -0,0 +1,730 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "Serbian", + "key": { + "name": "Serbia" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German", + "key": { + "name": "Germany" + } + }, + { + "language": "Indonesian", + "key": { + "name": "Indonesia" + } + }, + { + "language": "Dutch", + "key": { + "name": "Netherlands" + } + }, + { + "language": "Portuguese", + "key": { + "name": "Portugal" + } + }, + { + "language": "Spanish", + "key": { + "name": "Spain" + } + }, + { + "language": "Thai", + "key": { + "name": "Thailand" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "Korean", + "key": { + "name": "Korea" + } + }, + { + "language": "Taiwanese", + "key": { + "name": "Taiwan" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ], + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + } + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ], + "a": [ + { + "details": { + "forename": "Sergiy" + } + } + ], + "b": [ + { + "details": { + "forename": "Björn" + } + } + ], + "productTypes": [ + {}, + { + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "url": "https://docs.wundergraph.com/", + "urls": [ + "https://cosmo-docs.wundergraph.com/", + "https://wundergraph.com/pricing" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular_reconstructed.json new file mode 100644 index 0000000000..40f3103d03 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular_reconstructed.json @@ -0,0 +1,730 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "Serbian", + "key": { + "name": "Serbia" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German", + "key": { + "name": "Germany" + } + }, + { + "language": "Indonesian", + "key": { + "name": "Indonesia" + } + }, + { + "language": "Dutch", + "key": { + "name": "Netherlands" + } + }, + { + "language": "Portuguese", + "key": { + "name": "Portugal" + } + }, + { + "language": "Spanish", + "key": { + "name": "Spain" + } + }, + { + "language": "Thai", + "key": { + "name": "Thailand" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "Korean", + "key": { + "name": "Korea" + } + }, + { + "language": "Taiwanese", + "key": { + "name": "Taiwan" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ], + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + } + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ], + "a": [ + { + "details": { + "forename": "Sergiy" + } + } + ], + "b": [ + { + "details": { + "forename": "Björn" + } + } + ], + "productTypes": [ + {}, + { + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "url": "https://docs.wundergraph.com/", + "urls": [ + "https://cosmo-docs.wundergraph.com/", + "https://wundergraph.com/pricing" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..55f77d08f6 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred_reconstructed.json @@ -0,0 +1,730 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "Serbian", + "key": { + "name": "Serbia" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German", + "key": { + "name": "Germany" + } + }, + { + "language": "Indonesian", + "key": { + "name": "Indonesia" + } + }, + { + "language": "Dutch", + "key": { + "name": "Netherlands" + } + }, + { + "language": "Portuguese", + "key": { + "name": "Portugal" + } + }, + { + "language": "Spanish", + "key": { + "name": "Spain" + } + }, + { + "language": "Thai", + "key": { + "name": "Thailand" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "Korean", + "key": { + "name": "Korea" + } + }, + { + "language": "Taiwanese", + "key": { + "name": "Taiwan" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ], + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + } + }, + "a": [ + { + "details": { + "forename": "Sergiy" + } + } + ], + "b": [ + { + "details": { + "forename": "Björn" + } + } + ], + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ], + "productTypes": [ + {}, + { + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "url": "https://docs.wundergraph.com/", + "urls": [ + "https://cosmo-docs.wundergraph.com/", + "https://wundergraph.com/pricing" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..2198cb4313 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred_reconstructed.json @@ -0,0 +1,730 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "Serbian", + "key": { + "name": "Serbia" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German", + "key": { + "name": "Germany" + } + }, + { + "language": "Indonesian", + "key": { + "name": "Indonesia" + } + }, + { + "language": "Dutch", + "key": { + "name": "Netherlands" + } + }, + { + "language": "Portuguese", + "key": { + "name": "Portugal" + } + }, + { + "language": "Spanish", + "key": { + "name": "Spain" + } + }, + { + "language": "Thai", + "key": { + "name": "Thailand" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "Korean", + "key": { + "name": "Korea" + } + }, + { + "language": "Taiwanese", + "key": { + "name": "Taiwan" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ], + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + } + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ], + "productTypes": [ + {}, + { + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "url": "https://docs.wundergraph.com/", + "urls": [ + "https://cosmo-docs.wundergraph.com/", + "https://wundergraph.com/pricing" + ] + } + ], + "a": [ + { + "details": { + "forename": "Sergiy" + } + } + ], + "b": [ + { + "details": { + "forename": "Björn" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_05_nested_defer_reconstructed.json b/router-tests/testdata/queries_defer/full_defer_05_nested_defer_reconstructed.json new file mode 100644 index 0000000000..2198cb4313 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_05_nested_defer_reconstructed.json @@ -0,0 +1,730 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "Serbian", + "key": { + "name": "Serbia" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German", + "key": { + "name": "Germany" + } + }, + { + "language": "Indonesian", + "key": { + "name": "Indonesia" + } + }, + { + "language": "Dutch", + "key": { + "name": "Netherlands" + } + }, + { + "language": "Portuguese", + "key": { + "name": "Portugal" + } + }, + { + "language": "Spanish", + "key": { + "name": "Spain" + } + }, + { + "language": "Thai", + "key": { + "name": "Thailand" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "Korean", + "key": { + "name": "Korea" + } + }, + { + "language": "Taiwanese", + "key": { + "name": "Taiwan" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ], + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + } + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ], + "productTypes": [ + {}, + { + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "url": "https://docs.wundergraph.com/", + "urls": [ + "https://cosmo-docs.wundergraph.com/", + "https://wundergraph.com/pricing" + ] + } + ], + "a": [ + { + "details": { + "forename": "Sergiy" + } + } + ], + "b": [ + { + "details": { + "forename": "Björn" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation_reconstructed.json b/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation_reconstructed.json new file mode 100644 index 0000000000..2198cb4313 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation_reconstructed.json @@ -0,0 +1,730 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "Serbian", + "key": { + "name": "Serbia" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German", + "key": { + "name": "Germany" + } + }, + { + "language": "Indonesian", + "key": { + "name": "Indonesia" + } + }, + { + "language": "Dutch", + "key": { + "name": "Netherlands" + } + }, + { + "language": "Portuguese", + "key": { + "name": "Portugal" + } + }, + { + "language": "Spanish", + "key": { + "name": "Spain" + } + }, + { + "language": "Thai", + "key": { + "name": "Thailand" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "Korean", + "key": { + "name": "Korea" + } + }, + { + "language": "Taiwanese", + "key": { + "name": "Taiwan" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ], + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + } + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ], + "productTypes": [ + {}, + { + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "url": "https://docs.wundergraph.com/", + "urls": [ + "https://cosmo-docs.wundergraph.com/", + "https://wundergraph.com/pricing" + ] + } + ], + "a": [ + { + "details": { + "forename": "Sergiy" + } + } + ], + "b": [ + { + "details": { + "forename": "Björn" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_07_parallel_defers_reconstructed.json b/router-tests/testdata/queries_defer/full_defer_07_parallel_defers_reconstructed.json new file mode 100644 index 0000000000..2198cb4313 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_07_parallel_defers_reconstructed.json @@ -0,0 +1,730 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "Serbian", + "key": { + "name": "Serbia" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German", + "key": { + "name": "Germany" + } + }, + { + "language": "Indonesian", + "key": { + "name": "Indonesia" + } + }, + { + "language": "Dutch", + "key": { + "name": "Netherlands" + } + }, + { + "language": "Portuguese", + "key": { + "name": "Portugal" + } + }, + { + "language": "Spanish", + "key": { + "name": "Spain" + } + }, + { + "language": "Thai", + "key": { + "name": "Thailand" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "Korean", + "key": { + "name": "Korea" + } + }, + { + "language": "Taiwanese", + "key": { + "name": "Taiwan" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ], + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + } + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ], + "productTypes": [ + {}, + { + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "url": "https://docs.wundergraph.com/", + "urls": [ + "https://cosmo-docs.wundergraph.com/", + "https://wundergraph.com/pricing" + ] + } + ], + "a": [ + { + "details": { + "forename": "Sergiy" + } + } + ], + "b": [ + { + "details": { + "forename": "Björn" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object_reconstructed.json b/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object_reconstructed.json new file mode 100644 index 0000000000..2198cb4313 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object_reconstructed.json @@ -0,0 +1,730 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "Serbian", + "key": { + "name": "Serbia" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German", + "key": { + "name": "Germany" + } + }, + { + "language": "Indonesian", + "key": { + "name": "Indonesia" + } + }, + { + "language": "Dutch", + "key": { + "name": "Netherlands" + } + }, + { + "language": "Portuguese", + "key": { + "name": "Portugal" + } + }, + { + "language": "Spanish", + "key": { + "name": "Spain" + } + }, + { + "language": "Thai", + "key": { + "name": "Thailand" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "Korean", + "key": { + "name": "Korea" + } + }, + { + "language": "Taiwanese", + "key": { + "name": "Taiwan" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ], + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + } + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ], + "productTypes": [ + {}, + { + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "url": "https://docs.wundergraph.com/", + "urls": [ + "https://cosmo-docs.wundergraph.com/", + "https://wundergraph.com/pricing" + ] + } + ], + "a": [ + { + "details": { + "forename": "Sergiy" + } + } + ], + "b": [ + { + "details": { + "forename": "Björn" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel_reconstructed.json b/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel_reconstructed.json new file mode 100644 index 0000000000..22fd2a0b26 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel_reconstructed.json @@ -0,0 +1,211 @@ +{ + "data": { + "employees": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ], + "employee": {}, + "teammates": [ + { + "id": 4 + }, + { + "id": 11 + } + ], + "productTypes": [ + {}, + { + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "url": "https://docs.wundergraph.com/", + "urls": [ + "https://cosmo-docs.wundergraph.com/", + "https://wundergraph.com/pricing" + ] + } + ], + "a": [ + {} + ], + "b": [ + {} + ] + }, + "errors": [ + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 0, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 1, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 2, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 3, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 4, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 5, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 6, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 7, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 8, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 9, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 0, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 1, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 2, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 3, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 4, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 5, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 6, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 7, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 8, + "role" + ] + }, + { + "message": "Cannot return null for non-nullable field 'Query.employees.role'.", + "path": [ + "employees", + 9, + "role" + ] + } + ] +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside_reconstructed.json b/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside_reconstructed.json new file mode 100644 index 0000000000..064f21c64f --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside_reconstructed.json @@ -0,0 +1,10 @@ +{ + "errors": [ + { + "message": "Unknown type \"ProductType\".", + "path": [ + "ProductType" + ] + } + ] +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer_reconstructed.json b/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer_reconstructed.json new file mode 100644 index 0000000000..064f21c64f --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer_reconstructed.json @@ -0,0 +1,10 @@ +{ + "errors": [ + { + "message": "Unknown type \"ProductType\".", + "path": [ + "ProductType" + ] + } + ] +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer_reconstructed.json b/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer_reconstructed.json new file mode 100644 index 0000000000..064f21c64f --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer_reconstructed.json @@ -0,0 +1,10 @@ +{ + "errors": [ + { + "message": "Unknown type \"ProductType\".", + "path": [ + "ProductType" + ] + } + ] +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object_reconstructed.json new file mode 100644 index 0000000000..3b66e09d7a --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object_reconstructed.json @@ -0,0 +1,55 @@ +{ + "data": { + "products": [ + {}, + { + "name": "COSMO", + "repositoryURL": "https://github.com/wundergraph/cosmo", + "upc": "cosmo", + "lead": { + "details": { + "forename": "Dustin" + } + } + }, + { + "owner": { + "details": { + "forename": "Jens" + } + }, + "clientLanguages": [ + "RUST", + "TYPESCRIPT" + ], + "unicode": "😀♥!\u0015\u0010🝥", + "upc": "sdk" + } + ], + "productTypes": [ + { + "__typename": "Cosmo", + "upc": "cosmo" + }, + { + "__typename": "Consultancy", + "name": "CONSULTANCY", + "lead": { + "details": { + "forename": "Jens" + } + } + }, + { + "__typename": "Documentation", + "url": "https://cosmo-docs.wundergraph.com/", + "urls": [ + "https://cal.com/stefan-avram-wundergraph/wundergraph-introduction", + "https://github.com/wundergraph/graphql-go-tools/blob/master/README.md", + "N/A", + "https://docs.wundergraph.com/" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside_reconstructed.json new file mode 100644 index 0000000000..064f21c64f --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside_reconstructed.json @@ -0,0 +1,10 @@ +{ + "errors": [ + { + "message": "Unknown type \"ProductType\".", + "path": [ + "ProductType" + ] + } + ] +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer_reconstructed.json new file mode 100644 index 0000000000..f67601d48b --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer_reconstructed.json @@ -0,0 +1,20 @@ +{ + "data": { + "products": [ + { + "__typename": "Consultancy", + "lead": { + "id": 1, + "derivedMood": "HAPPY" + }, + "isLeadAvailable": false + }, + { + "__typename": "Cosmo" + }, + { + "__typename": "SDK" + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular_reconstructed.json new file mode 100644 index 0000000000..4df810f453 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular_reconstructed.json @@ -0,0 +1,20 @@ +{ + "data": { + "products": [ + { + "__typename": "Consultancy", + "isLeadAvailable": false, + "lead": { + "id": 1, + "derivedMood": "HAPPY" + } + }, + { + "__typename": "Cosmo" + }, + { + "__typename": "SDK" + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..4df810f453 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred_reconstructed.json @@ -0,0 +1,20 @@ +{ + "data": { + "products": [ + { + "__typename": "Consultancy", + "isLeadAvailable": false, + "lead": { + "id": 1, + "derivedMood": "HAPPY" + } + }, + { + "__typename": "Cosmo" + }, + { + "__typename": "SDK" + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..5b8b823088 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred_reconstructed.json @@ -0,0 +1,15 @@ +{ + "data": { + "products": [ + { + "lead": { + "id": 1, + "derivedMood": "HAPPY" + }, + "isLeadAvailable": false + }, + {}, + {} + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer_reconstructed.json new file mode 100644 index 0000000000..5b8b823088 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer_reconstructed.json @@ -0,0 +1,15 @@ +{ + "data": { + "products": [ + { + "lead": { + "id": 1, + "derivedMood": "HAPPY" + }, + "isLeadAvailable": false + }, + {}, + {} + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation_reconstructed.json new file mode 100644 index 0000000000..c33eca810d --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation_reconstructed.json @@ -0,0 +1,15 @@ +{ + "data": { + "products": [ + { + "isLeadAvailable": false, + "lead": { + "id": 1, + "derivedMood": "HAPPY" + } + }, + {}, + {} + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers_reconstructed.json new file mode 100644 index 0000000000..4df810f453 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers_reconstructed.json @@ -0,0 +1,20 @@ +{ + "data": { + "products": [ + { + "__typename": "Consultancy", + "isLeadAvailable": false, + "lead": { + "id": 1, + "derivedMood": "HAPPY" + } + }, + { + "__typename": "Cosmo" + }, + { + "__typename": "SDK" + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer_reconstructed.json new file mode 100644 index 0000000000..4df810f453 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer_reconstructed.json @@ -0,0 +1,20 @@ +{ + "data": { + "products": [ + { + "__typename": "Consultancy", + "isLeadAvailable": false, + "lead": { + "id": 1, + "derivedMood": "HAPPY" + } + }, + { + "__typename": "Cosmo" + }, + { + "__typename": "SDK" + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer_reconstructed.json new file mode 100644 index 0000000000..f87e954319 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer_reconstructed.json @@ -0,0 +1,14 @@ +{ + "data": { + "products": [ + { + "lead": { + "id": 1, + "derivedMood": "HAPPY" + } + }, + {}, + {} + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..f87e954319 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred_reconstructed.json @@ -0,0 +1,14 @@ +{ + "data": { + "products": [ + { + "lead": { + "id": 1, + "derivedMood": "HAPPY" + } + }, + {}, + {} + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..f87e954319 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred_reconstructed.json @@ -0,0 +1,14 @@ +{ + "data": { + "products": [ + { + "lead": { + "id": 1, + "derivedMood": "HAPPY" + } + }, + {}, + {} + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer_reconstructed.json new file mode 100644 index 0000000000..f87e954319 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer_reconstructed.json @@ -0,0 +1,14 @@ +{ + "data": { + "products": [ + { + "lead": { + "id": 1, + "derivedMood": "HAPPY" + } + }, + {}, + {} + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation_reconstructed.json new file mode 100644 index 0000000000..f87e954319 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation_reconstructed.json @@ -0,0 +1,14 @@ +{ + "data": { + "products": [ + { + "lead": { + "id": 1, + "derivedMood": "HAPPY" + } + }, + {}, + {} + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers_reconstructed.json new file mode 100644 index 0000000000..f87e954319 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers_reconstructed.json @@ -0,0 +1,14 @@ +{ + "data": { + "products": [ + { + "lead": { + "id": 1, + "derivedMood": "HAPPY" + } + }, + {}, + {} + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer_reconstructed.json new file mode 100644 index 0000000000..f87e954319 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer_reconstructed.json @@ -0,0 +1,14 @@ +{ + "data": { + "products": [ + { + "lead": { + "id": 1, + "derivedMood": "HAPPY" + } + }, + {}, + {} + ] + } +} \ No newline at end of file From 65b368199247febb86ac67d0d87bebf439a94584 Mon Sep 17 00:00:00 2001 From: spetrunin Date: Thu, 26 Mar 2026 20:53:09 +0200 Subject: [PATCH 08/23] add all reconstructed fixtures --- ...ultiple_fields_deferred_reconstructed.json | 1690 ++++++++++++++++ ...s_defer_05_nested_defer_reconstructed.json | 1690 ++++++++++++++++ ..._nested_defer_variation_reconstructed.json | 1690 ++++++++++++++++ ...efer_07_parallel_defers_reconstructed.json | 1690 ++++++++++++++++ ...ated_field_across_defer_reconstructed.json | 1724 +++++++++++++++++ ...r_10_extensive_parallel_reconstructed.json | 1690 ++++++++++++++++ ...ated_field_across_defer_reconstructed.json | 652 +++++++ ...r_10_extensive_parallel_reconstructed.json | 652 +++++++ ...ated_field_across_defer_reconstructed.json | 730 +++++++ ...ultiple_fields_deferred_reconstructed.json | 55 + ...s_defer_05_nested_defer_reconstructed.json | 55 + ..._nested_defer_variation_reconstructed.json | 55 + ...efer_07_parallel_defers_reconstructed.json | 55 + ...ated_field_across_defer_reconstructed.json | 55 + ..._12_fragment_body_defer_reconstructed.json | 55 + ...3_fragment_spread_defer_reconstructed.json | 55 + ..._08_defer_nested_object_reconstructed.json | 34 + ...ated_field_across_defer_reconstructed.json | 33 + ...r_10_extensive_parallel_reconstructed.json | 28 + ...gment_around_and_inside_reconstructed.json | 34 + ..._12_fragment_body_defer_reconstructed.json | 34 + ...e_defer_between_regular_reconstructed.json | 28 + ..._08_defer_nested_object_reconstructed.json | 28 + ...ated_field_across_defer_reconstructed.json | 28 + ...r_10_extensive_parallel_reconstructed.json | 27 + ...gment_around_and_inside_reconstructed.json | 28 + ..._12_fragment_body_defer_reconstructed.json | 28 + 27 files changed, 12923 insertions(+) create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/products_defer_05_nested_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/products_defer_07_parallel_defers_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..930f5d887d --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred_reconstructed.json @@ -0,0 +1,1690 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 4, + "details": { + "forename": "Björn" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer_reconstructed.json new file mode 100644 index 0000000000..930f5d887d --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer_reconstructed.json @@ -0,0 +1,1690 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 4, + "details": { + "forename": "Björn" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation_reconstructed.json new file mode 100644 index 0000000000..930f5d887d --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation_reconstructed.json @@ -0,0 +1,1690 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 4, + "details": { + "forename": "Björn" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers_reconstructed.json new file mode 100644 index 0000000000..930f5d887d --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers_reconstructed.json @@ -0,0 +1,1690 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 4, + "details": { + "forename": "Björn" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer_reconstructed.json new file mode 100644 index 0000000000..21ada28e8b --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer_reconstructed.json @@ -0,0 +1,1724 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "hobbies": [ + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Gaming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "__typename": "Programming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Travelling", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ], + "notes": "Jens notes resolved by products" + }, + { + "id": 2, + "hobbies": [ + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Gaming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Programming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ], + "notes": "Dustin notes resolved by products" + }, + { + "id": 3, + "hobbies": [ + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "__typename": "Travelling", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ], + "notes": "Stefan notes resolved by products" + }, + { + "id": 4, + "hobbies": [ + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Flying", + "employees": [ + { + "id": 4, + "details": { + "forename": "Björn" + } + } + ] + }, + { + "__typename": "Travelling", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ], + "notes": "Björn notes resolved by products" + }, + { + "id": 5, + "hobbies": [ + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ], + "notes": "Sergiy notes resolved by products" + }, + { + "id": 7, + "hobbies": [ + { + "__typename": "Gaming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ], + "notes": "Suvij notes resolved by products" + }, + { + "id": 8, + "hobbies": [ + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Gaming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ], + "notes": "Nithin notes resolved by products" + }, + { + "id": 10, + "hobbies": [ + { + "__typename": "Programming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "__typename": "Travelling", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ], + "notes": "Eelco notes resolved by products" + }, + { + "id": 11, + "hobbies": [ + { + "__typename": "Other", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ], + "notes": "Alexandra notes resolved by products" + }, + { + "id": 12, + "hobbies": [ + { + "__typename": "Programming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Exercise", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Gaming", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "__typename": "Travelling", + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ], + "notes": "David notes resolved by products" + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel_reconstructed.json new file mode 100644 index 0000000000..930f5d887d --- /dev/null +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel_reconstructed.json @@ -0,0 +1,1690 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 4, + "details": { + "forename": "Björn" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 5, + "details": { + "forename": "Sergiy" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + } + } + ] + } + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "hobbies": [ + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 2, + "details": { + "forename": "Dustin" + } + }, + { + "id": 7, + "details": { + "forename": "Suvij" + } + }, + { + "id": 8, + "details": { + "forename": "Nithin" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + }, + { + "employees": [ + { + "id": 1, + "details": { + "forename": "Jens" + } + }, + { + "id": 3, + "details": { + "forename": "Stefan" + } + }, + { + "id": 4, + "details": { + "forename": "Björn" + } + }, + { + "id": 10, + "details": { + "forename": "Eelco" + } + }, + { + "id": 12, + "details": { + "forename": "David" + } + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer_reconstructed.json new file mode 100644 index 0000000000..301f6214ff --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer_reconstructed.json @@ -0,0 +1,652 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "key": { + "name": "America" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Serbian" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "key": { + "name": "Ukraine" + }, + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "key": { + "name": "Netherlands" + }, + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German" + }, + { + "language": "Indonesian" + }, + { + "language": "Dutch" + }, + { + "language": "Portuguese" + }, + { + "language": "Spanish" + }, + { + "language": "Thai" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "key": { + "name": "England" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Korean" + }, + { + "language": "Taiwanese" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel_reconstructed.json b/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel_reconstructed.json new file mode 100644 index 0000000000..301f6214ff --- /dev/null +++ b/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel_reconstructed.json @@ -0,0 +1,652 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "key": { + "name": "America" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Serbian" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "German" + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "key": { + "name": "Ukraine" + }, + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "key": { + "name": "India" + }, + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "key": { + "name": "Netherlands" + }, + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German" + }, + { + "language": "Indonesian" + }, + { + "language": "Dutch" + }, + { + "language": "Portuguese" + }, + { + "language": "Spanish" + }, + { + "language": "Thai" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "key": { + "name": "Germany" + }, + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "key": { + "name": "England" + }, + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English" + }, + { + "language": "Korean" + }, + { + "language": "Taiwanese" + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer_reconstructed.json new file mode 100644 index 0000000000..2198cb4313 --- /dev/null +++ b/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer_reconstructed.json @@ -0,0 +1,730 @@ +{ + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "Serbian", + "key": { + "name": "Serbia" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German", + "key": { + "name": "Germany" + } + }, + { + "language": "Indonesian", + "key": { + "name": "Indonesia" + } + }, + { + "language": "Dutch", + "key": { + "name": "Netherlands" + } + }, + { + "language": "Portuguese", + "key": { + "name": "Portugal" + } + }, + { + "language": "Spanish", + "key": { + "name": "Spain" + } + }, + { + "language": "Thai", + "key": { + "name": "Thailand" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "Korean", + "key": { + "name": "Korea" + } + }, + { + "language": "Taiwanese", + "key": { + "name": "Taiwan" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ], + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + } + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ], + "productTypes": [ + {}, + { + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "url": "https://docs.wundergraph.com/", + "urls": [ + "https://cosmo-docs.wundergraph.com/", + "https://wundergraph.com/pricing" + ] + } + ], + "a": [ + { + "details": { + "forename": "Sergiy" + } + } + ], + "b": [ + { + "details": { + "forename": "Björn" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..3124058ba3 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred_reconstructed.json @@ -0,0 +1,55 @@ +{ + "data": { + "products": [ + {}, + { + "name": "COSMO", + "upc": "cosmo", + "repositoryURL": "https://github.com/wundergraph/cosmo", + "lead": { + "details": { + "forename": "Dustin" + } + } + }, + { + "owner": { + "details": { + "forename": "Jens" + } + }, + "clientLanguages": [ + "RUST", + "TYPESCRIPT" + ], + "unicode": "😀♥!\u0015\u0010🝥", + "upc": "sdk" + } + ], + "productTypes": [ + { + "__typename": "Cosmo", + "upc": "cosmo" + }, + { + "__typename": "Consultancy", + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "__typename": "Documentation", + "url": "https://cosmo-docs.wundergraph.com/", + "urls": [ + "https://cal.com/stefan-avram-wundergraph/wundergraph-introduction", + "https://github.com/wundergraph/graphql-go-tools/blob/master/README.md", + "N/A", + "https://docs.wundergraph.com/" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_05_nested_defer_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_05_nested_defer_reconstructed.json new file mode 100644 index 0000000000..3124058ba3 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_05_nested_defer_reconstructed.json @@ -0,0 +1,55 @@ +{ + "data": { + "products": [ + {}, + { + "name": "COSMO", + "upc": "cosmo", + "repositoryURL": "https://github.com/wundergraph/cosmo", + "lead": { + "details": { + "forename": "Dustin" + } + } + }, + { + "owner": { + "details": { + "forename": "Jens" + } + }, + "clientLanguages": [ + "RUST", + "TYPESCRIPT" + ], + "unicode": "😀♥!\u0015\u0010🝥", + "upc": "sdk" + } + ], + "productTypes": [ + { + "__typename": "Cosmo", + "upc": "cosmo" + }, + { + "__typename": "Consultancy", + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "__typename": "Documentation", + "url": "https://cosmo-docs.wundergraph.com/", + "urls": [ + "https://cal.com/stefan-avram-wundergraph/wundergraph-introduction", + "https://github.com/wundergraph/graphql-go-tools/blob/master/README.md", + "N/A", + "https://docs.wundergraph.com/" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation_reconstructed.json new file mode 100644 index 0000000000..6a5b6a9c4c --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation_reconstructed.json @@ -0,0 +1,55 @@ +{ + "data": { + "productTypes": [ + { + "__typename": "Cosmo", + "upc": "cosmo" + }, + { + "__typename": "Consultancy", + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "__typename": "Documentation", + "url": "https://cosmo-docs.wundergraph.com/", + "urls": [ + "https://cal.com/stefan-avram-wundergraph/wundergraph-introduction", + "https://github.com/wundergraph/graphql-go-tools/blob/master/README.md", + "N/A", + "https://docs.wundergraph.com/" + ] + } + ], + "products": [ + {}, + { + "name": "COSMO", + "upc": "cosmo", + "repositoryURL": "https://github.com/wundergraph/cosmo", + "lead": { + "details": { + "forename": "Dustin" + } + } + }, + { + "owner": { + "details": { + "forename": "Jens" + } + }, + "clientLanguages": [ + "RUST", + "TYPESCRIPT" + ], + "unicode": "😀♥!\u0015\u0010🝥", + "upc": "sdk" + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_07_parallel_defers_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_07_parallel_defers_reconstructed.json new file mode 100644 index 0000000000..3124058ba3 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_07_parallel_defers_reconstructed.json @@ -0,0 +1,55 @@ +{ + "data": { + "products": [ + {}, + { + "name": "COSMO", + "upc": "cosmo", + "repositoryURL": "https://github.com/wundergraph/cosmo", + "lead": { + "details": { + "forename": "Dustin" + } + } + }, + { + "owner": { + "details": { + "forename": "Jens" + } + }, + "clientLanguages": [ + "RUST", + "TYPESCRIPT" + ], + "unicode": "😀♥!\u0015\u0010🝥", + "upc": "sdk" + } + ], + "productTypes": [ + { + "__typename": "Cosmo", + "upc": "cosmo" + }, + { + "__typename": "Consultancy", + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "__typename": "Documentation", + "url": "https://cosmo-docs.wundergraph.com/", + "urls": [ + "https://cal.com/stefan-avram-wundergraph/wundergraph-introduction", + "https://github.com/wundergraph/graphql-go-tools/blob/master/README.md", + "N/A", + "https://docs.wundergraph.com/" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer_reconstructed.json new file mode 100644 index 0000000000..7f6ae911ab --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer_reconstructed.json @@ -0,0 +1,55 @@ +{ + "data": { + "products": [ + {}, + { + "name": "COSMO", + "lead": { + "details": { + "forename": "Dustin" + } + }, + "upc": "cosmo", + "repositoryURL": "https://github.com/wundergraph/cosmo" + }, + { + "owner": { + "details": { + "forename": "Jens" + } + }, + "clientLanguages": [ + "RUST", + "TYPESCRIPT" + ], + "unicode": "😀♥!\u0015\u0010🝥", + "upc": "sdk" + } + ], + "productTypes": [ + { + "__typename": "Cosmo", + "upc": "cosmo" + }, + { + "__typename": "Consultancy", + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "__typename": "Documentation", + "url": "https://cosmo-docs.wundergraph.com/", + "urls": [ + "https://cal.com/stefan-avram-wundergraph/wundergraph-introduction", + "https://github.com/wundergraph/graphql-go-tools/blob/master/README.md", + "N/A", + "https://docs.wundergraph.com/" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer_reconstructed.json new file mode 100644 index 0000000000..cb006baa1f --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer_reconstructed.json @@ -0,0 +1,55 @@ +{ + "data": { + "products": [ + {}, + { + "name": "COSMO", + "lead": { + "details": { + "forename": "Dustin" + } + }, + "repositoryURL": "https://github.com/wundergraph/cosmo", + "upc": "cosmo" + }, + { + "owner": { + "details": { + "forename": "Jens" + } + }, + "clientLanguages": [ + "RUST", + "TYPESCRIPT" + ], + "unicode": "😀♥!\u0015\u0010🝥", + "upc": "sdk" + } + ], + "productTypes": [ + { + "__typename": "Cosmo", + "upc": "cosmo" + }, + { + "__typename": "Consultancy", + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "__typename": "Documentation", + "url": "https://cosmo-docs.wundergraph.com/", + "urls": [ + "https://cal.com/stefan-avram-wundergraph/wundergraph-introduction", + "https://github.com/wundergraph/graphql-go-tools/blob/master/README.md", + "N/A", + "https://docs.wundergraph.com/" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer_reconstructed.json new file mode 100644 index 0000000000..01826bbec3 --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer_reconstructed.json @@ -0,0 +1,55 @@ +{ + "data": { + "products": [ + {}, + { + "upc": "cosmo", + "name": "COSMO", + "lead": { + "details": { + "forename": "Dustin" + } + }, + "repositoryURL": "https://github.com/wundergraph/cosmo" + }, + { + "upc": "sdk", + "owner": { + "details": { + "forename": "Jens" + } + }, + "clientLanguages": [ + "RUST", + "TYPESCRIPT" + ], + "unicode": "😀♥!\u0015\u0010🝥" + } + ], + "productTypes": [ + { + "__typename": "Cosmo", + "upc": "cosmo" + }, + { + "__typename": "Consultancy", + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "__typename": "Documentation", + "url": "https://cosmo-docs.wundergraph.com/", + "urls": [ + "https://cal.com/stefan-avram-wundergraph/wundergraph-introduction", + "https://github.com/wundergraph/graphql-go-tools/blob/master/README.md", + "N/A", + "https://docs.wundergraph.com/" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object_reconstructed.json new file mode 100644 index 0000000000..b9a411b580 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object_reconstructed.json @@ -0,0 +1,34 @@ +{ + "data": { + "products": [ + { + "__typename": "Consultancy", + "isLeadAvailable": false, + "lead": { + "__typename": "Employee", + "id": 1 + } + }, + { + "__typename": "Cosmo" + }, + { + "__typename": "SDK" + } + ] + }, + "errors": [ + { + "message": "Enum \"Mood\" cannot represent value: \"\"", + "path": [ + "products", + 0, + "lead", + "derivedMood" + ], + "extensions": { + "code": "INTERNAL_SERVER_ERROR" + } + } + ] +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer_reconstructed.json new file mode 100644 index 0000000000..40fa3af72e --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer_reconstructed.json @@ -0,0 +1,33 @@ +{ + "data": { + "products": [ + { + "__typename": "Consultancy", + "lead": { + "__typename": "Employee", + "id": 1 + } + }, + { + "__typename": "Cosmo" + }, + { + "__typename": "SDK" + } + ] + }, + "errors": [ + { + "message": "Enum \"Mood\" cannot represent value: \"\"", + "path": [ + "products", + 0, + "lead", + "derivedMood" + ], + "extensions": { + "code": "INTERNAL_SERVER_ERROR" + } + } + ] +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json new file mode 100644 index 0000000000..04889327af --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json @@ -0,0 +1,28 @@ +{ + "data": { + "products": [ + { + "isLeadAvailable": false, + "lead": { + "id": 1 + } + }, + {}, + {} + ] + }, + "errors": [ + { + "message": "Enum \"Mood\" cannot represent value: \"\"", + "path": [ + "products", + 0, + "lead", + "derivedMood" + ], + "extensions": { + "code": "INTERNAL_SERVER_ERROR" + } + } + ] +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside_reconstructed.json new file mode 100644 index 0000000000..b9a411b580 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside_reconstructed.json @@ -0,0 +1,34 @@ +{ + "data": { + "products": [ + { + "__typename": "Consultancy", + "isLeadAvailable": false, + "lead": { + "__typename": "Employee", + "id": 1 + } + }, + { + "__typename": "Cosmo" + }, + { + "__typename": "SDK" + } + ] + }, + "errors": [ + { + "message": "Enum \"Mood\" cannot represent value: \"\"", + "path": [ + "products", + 0, + "lead", + "derivedMood" + ], + "extensions": { + "code": "INTERNAL_SERVER_ERROR" + } + } + ] +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer_reconstructed.json new file mode 100644 index 0000000000..b9a411b580 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer_reconstructed.json @@ -0,0 +1,34 @@ +{ + "data": { + "products": [ + { + "__typename": "Consultancy", + "isLeadAvailable": false, + "lead": { + "__typename": "Employee", + "id": 1 + } + }, + { + "__typename": "Cosmo" + }, + { + "__typename": "SDK" + } + ] + }, + "errors": [ + { + "message": "Enum \"Mood\" cannot represent value: \"\"", + "path": [ + "products", + 0, + "lead", + "derivedMood" + ], + "extensions": { + "code": "INTERNAL_SERVER_ERROR" + } + } + ] +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular_reconstructed.json new file mode 100644 index 0000000000..c340772506 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular_reconstructed.json @@ -0,0 +1,28 @@ +{ + "data": { + "products": [ + { + "lead": { + "__typename": "Employee", + "id": 1 + } + }, + {}, + {} + ] + }, + "errors": [ + { + "message": "Enum \"Mood\" cannot represent value: \"\"", + "path": [ + "products", + 0, + "lead", + "derivedMood" + ], + "extensions": { + "code": "INTERNAL_SERVER_ERROR" + } + } + ] +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object_reconstructed.json new file mode 100644 index 0000000000..c340772506 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object_reconstructed.json @@ -0,0 +1,28 @@ +{ + "data": { + "products": [ + { + "lead": { + "__typename": "Employee", + "id": 1 + } + }, + {}, + {} + ] + }, + "errors": [ + { + "message": "Enum \"Mood\" cannot represent value: \"\"", + "path": [ + "products", + 0, + "lead", + "derivedMood" + ], + "extensions": { + "code": "INTERNAL_SERVER_ERROR" + } + } + ] +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer_reconstructed.json new file mode 100644 index 0000000000..c340772506 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer_reconstructed.json @@ -0,0 +1,28 @@ +{ + "data": { + "products": [ + { + "lead": { + "__typename": "Employee", + "id": 1 + } + }, + {}, + {} + ] + }, + "errors": [ + { + "message": "Enum \"Mood\" cannot represent value: \"\"", + "path": [ + "products", + 0, + "lead", + "derivedMood" + ], + "extensions": { + "code": "INTERNAL_SERVER_ERROR" + } + } + ] +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel_reconstructed.json new file mode 100644 index 0000000000..755a69add1 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel_reconstructed.json @@ -0,0 +1,27 @@ +{ + "data": { + "products": [ + { + "lead": { + "id": 1 + } + }, + {}, + {} + ] + }, + "errors": [ + { + "message": "Enum \"Mood\" cannot represent value: \"\"", + "path": [ + "products", + 0, + "lead", + "derivedMood" + ], + "extensions": { + "code": "INTERNAL_SERVER_ERROR" + } + } + ] +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside_reconstructed.json new file mode 100644 index 0000000000..c340772506 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside_reconstructed.json @@ -0,0 +1,28 @@ +{ + "data": { + "products": [ + { + "lead": { + "__typename": "Employee", + "id": 1 + } + }, + {}, + {} + ] + }, + "errors": [ + { + "message": "Enum \"Mood\" cannot represent value: \"\"", + "path": [ + "products", + 0, + "lead", + "derivedMood" + ], + "extensions": { + "code": "INTERNAL_SERVER_ERROR" + } + } + ] +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer_reconstructed.json new file mode 100644 index 0000000000..c340772506 --- /dev/null +++ b/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer_reconstructed.json @@ -0,0 +1,28 @@ +{ + "data": { + "products": [ + { + "lead": { + "__typename": "Employee", + "id": 1 + } + }, + {}, + {} + ] + }, + "errors": [ + { + "message": "Enum \"Mood\" cannot represent value: \"\"", + "path": [ + "products", + 0, + "lead", + "derivedMood" + ], + "extensions": { + "code": "INTERNAL_SERVER_ERROR" + } + } + ] +} \ No newline at end of file From 4c136a52be86d4067925a4ab1d54ea310c83d31d Mon Sep 17 00:00:00 2001 From: spetrunin Date: Thu, 26 Mar 2026 21:22:27 +0200 Subject: [PATCH 09/23] fix some fixtures use astjson to reconstruct full response --- router-tests/defer_test.go | 198 ++++++++---------- ...defer_09_duplicated_field_across_defer.txt | 14 +- ...ated_field_across_defer_reconstructed.json | 56 +++++ ...defer_09_duplicated_field_across_defer.txt | 14 +- ...ated_field_across_defer_reconstructed.json | 51 +++++ router-tests/testenv/testenv.go | 2 +- 6 files changed, 203 insertions(+), 132 deletions(-) create mode 100644 router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer_reconstructed.json diff --git a/router-tests/defer_test.go b/router-tests/defer_test.go index 06e626be22..cab8c392a7 100644 --- a/router-tests/defer_test.go +++ b/router-tests/defer_test.go @@ -11,15 +11,16 @@ import ( "strings" "testing" - "github.com/buger/jsonparser" "github.com/sebdah/goldie/v2" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/wundergraph/astjson" "github.com/wundergraph/cosmo/router-tests/testenv" "github.com/wundergraph/cosmo/router/pkg/config" ) -func TestDeferTestdataQueries(t *testing.T) { +func TestDeferTestDataQueries(t *testing.T) { t.Parallel() testDir := filepath.Join("testdata", "queries_defer") @@ -58,11 +59,20 @@ func TestDeferTestdataQueries(t *testing.T) { ) testenv.Run(t, &testenv.Config{ + NoRetryClient: true, ModifyEngineExecutionConfiguration: func(cfg *config.EngineExecutionConfiguration) { cfg.Debug.PrintIntermediateQueryPlans = true }, }, func(t *testing.T, xEnv *testenv.Environment) { - queryData, err := os.ReadFile(filepath.Join(testDir, fmt.Sprintf("%s.graphql", name))) + queryFilePath := filepath.Join(testDir, fmt.Sprintf("%s.graphql", name)) + t.Cleanup(func() { + if t.Failed() { + abs, _ := filepath.Abs(queryFilePath) + t.Logf("query file: %s", abs) + } + }) + + queryData, err := os.ReadFile(queryFilePath) require.NoError(t, err) payload := map[string]any{"query": string(queryData)} @@ -74,24 +84,29 @@ func TestDeferTestdataQueries(t *testing.T) { require.NoError(t, err) defer func() { require.NoError(t, res.Body.Close()) }() - require.Equal(t, http.StatusOK, res.StatusCode) - require.True(t, strings.HasPrefix(res.Header.Get("Content-Type"), "multipart/mixed"), - "expected multipart/mixed response, got: %s", res.Header.Get("Content-Type")) + assert.Equal(t, http.StatusOK, res.StatusCode) + + // defer could be fully discarded in case query has duplicate field which are not deffered + isMultipart := strings.HasPrefix(res.Header.Get("Content-Type"), "multipart/mixed") body, err := io.ReadAll(res.Body) require.NoError(t, err) - t.Run("multipart body", func(t *testing.T) { - // Assert raw multipart body. + t.Run("raw multipart body", func(t *testing.T) { gMultipart.Assert(t, name, body) }) t.Run("full response", func(t *testing.T) { - // Reconstruct full response from chunks and assert against original. - reconstructed, err := reconstructDeferResponse(body) - require.NoError(t, err) + var actual []byte - actual := normalizeJSON(t, reconstructed) + if isMultipart { + // Reconstruct the full response from chunks + reconstructed, err := reconstructDeferResponse(body) + require.NoError(t, err) + actual = normalizeJSON(t, reconstructed) + } else { + actual = normalizeJSON(t, body) + } gFull.Assert(t, name+"_reconstructed", actual) @@ -99,7 +114,7 @@ func TestDeferTestdataQueries(t *testing.T) { if false { expected, err := os.ReadFile(gFull.GoldenFileName(t, source+"_original")) require.NoError(t, err) - // manually assert to never update original when update flag is specified + // manually assert to never update the original when the update flag is specified if diff := goldie.Diff(goldie.ClassicDiff, string(actual), string(expected)); diff != "" { t.Fatal(diff) } @@ -111,7 +126,7 @@ func TestDeferTestdataQueries(t *testing.T) { } // reconstructDeferResponse parses a multipart/mixed defer body, merges all -// incremental patches onto the initial data using jsonparser, and returns +// incremental patches onto the initial data using astjson, and returns // the complete JSON response (without transport fields like hasNext). func reconstructDeferResponse(body []byte) ([]byte, error) { parts, err := parseMultipartParts(body) @@ -122,131 +137,104 @@ func reconstructDeferResponse(body []byte) ([]byte, error) { return nil, fmt.Errorf("no parts in multipart response") } - result := parts[0] + var p astjson.Parser + result, err := p.ParseBytes(parts[0]) + if err != nil { + return nil, fmt.Errorf("parse initial part: %w", err) + } for _, part := range parts[1:] { - var innerErr error - _, err = jsonparser.ArrayEach(part, func(item []byte, _ jsonparser.ValueType, _ int, _ error) { - if innerErr != nil { - return - } + partVal, err := p.ParseBytes(part) + if err != nil { + return nil, fmt.Errorf("parse part: %w", err) + } - patchData, dataType, _, e := jsonparser.Get(item, "data") - if e != nil || dataType == jsonparser.NotExist { - return + for _, item := range partVal.GetArray("incremental") { + patchData := item.Get("data") + if patchData == nil { + continue } - // Build path keys: prepend "data", convert array indices to "[N]". + // Build path: prepend "data", then each segment from the path array. pathKeys := []string{"data"} - _, e = jsonparser.ArrayEach(item, func(seg []byte, segType jsonparser.ValueType, _ int, _ error) { - if segType == jsonparser.Number { - pathKeys = append(pathKeys, "["+string(seg)+"]") - } else { - pathKeys = append(pathKeys, string(seg)) + for _, seg := range item.GetArray("path") { + switch seg.Type() { + case astjson.TypeNumber: + pathKeys = append(pathKeys, string(seg.MarshalTo(nil))) + default: + s, _ := seg.StringBytes() + pathKeys = append(pathKeys, string(s)) } - }, "path") - if e != nil { - innerErr = fmt.Errorf("parse path: %w", e) - return } - result, innerErr = mergeJSONAtPath(result, patchData, pathKeys) - if innerErr != nil { - return + if err := mergeAtPath(result, patchData, pathKeys); err != nil { + return nil, fmt.Errorf("merge at path %v: %w", pathKeys, err) } // Collect errors from incremental items into root errors. - patchErrors, errType, _, _ := jsonparser.Get(item, "errors") - if errType == jsonparser.Array { - existing, existingType, _, _ := jsonparser.Get(result, "errors") - if existingType == jsonparser.NotExist || existingType == jsonparser.Null { - result, innerErr = jsonparser.Set(result, patchErrors, "errors") + patchErrors := item.Get("errors") + if patchErrors != nil && patchErrors.Type() == astjson.TypeArray { + existing := result.Get("errors") + if existing == nil || existing.Type() == astjson.TypeNull { + result.Set(nil, "errors", patchErrors) } else { - merged := appendJSONArrays(existing, patchErrors) - result, innerErr = jsonparser.Set(result, merged, "errors") + merged := appendArrayValues(existing, patchErrors) + result.Set(nil, "errors", merged) } } - }, "incremental") - if err != nil { - return nil, fmt.Errorf("parse incremental: %w", err) - } - if innerErr != nil { - return nil, innerErr } } // Remove transport-only field. - result = jsonparser.Delete(result, "hasNext") + result.Del("hasNext") - return result, nil + return result.MarshalTo(nil), nil } -// mergeJSONAtPath navigates to pathKeys inside result and deep-merges patch there. -func mergeJSONAtPath(result, patch []byte, pathKeys []string) ([]byte, error) { +// mergeAtPath navigates result to the node at pathKeys and deep-merges patch there. +func mergeAtPath(result, patch *astjson.Value, pathKeys []string) error { if len(pathKeys) == 0 { - return deepMergeJSON(result, patch) + _, _, err := astjson.MergeValues(nil, result, patch) + return err } - existing, existingType, _, err := jsonparser.Get(result, pathKeys...) - if err != nil || existingType == jsonparser.NotExist { - return jsonparser.Set(result, patch, pathKeys...) - } - if existingType != jsonparser.Object { - return jsonparser.Set(result, patch, pathKeys...) - } - merged, err := deepMergeJSON(existing, patch) - if err != nil { - return nil, err - } - return jsonparser.Set(result, merged, pathKeys...) -} -// deepMergeJSON merges src object into dst object recursively. -// For object values present in both, it recurses; otherwise src wins. -func deepMergeJSON(dst, src []byte) ([]byte, error) { - result := dst - var innerErr error - err := jsonparser.ObjectEach(src, func(key, value []byte, dataType jsonparser.ValueType, _ int) error { - if innerErr != nil { + // Navigate to the parent of the target node. + current := result + for _, key := range pathKeys[:len(pathKeys)-1] { + next := current.Get(key) + if next == nil { return nil } - k := string(key) - if dataType == jsonparser.Object { - existingVal, existingType, _, _ := jsonparser.Get(result, k) - if existingType == jsonparser.Object { - merged, e := deepMergeJSON(existingVal, value) - if e != nil { - innerErr = e - return nil - } - result, innerErr = jsonparser.Set(result, merged, k) - return nil - } - } - result, innerErr = jsonparser.Set(result, value, k) + current = next + } + + lastKey := pathKeys[len(pathKeys)-1] + target := current.Get(lastKey) + if target == nil { + current.Set(nil, lastKey, patch) return nil - }) + } + + merged, _, err := astjson.MergeValues(nil, target, patch) if err != nil { - return nil, err + return err } - return result, innerErr + current.Set(nil, lastKey, merged) + return nil } -// appendJSONArrays concatenates two JSON arrays: [...a, ...b]. -func appendJSONArrays(a, b []byte) []byte { - aInner := bytes.TrimSpace(a[1 : len(a)-1]) - bInner := bytes.TrimSpace(b[1 : len(b)-1]) - if len(aInner) == 0 { - return b +// appendArrayValues returns a new TypeArray containing all elements of a followed by all of b. +func appendArrayValues(a, b *astjson.Value) *astjson.Value { + out := astjson.ArrayValue(nil) + idx := 0 + for _, v := range a.GetArray() { + out.SetArrayItem(nil, idx, v) + idx++ } - if len(bInner) == 0 { - return a + for _, v := range b.GetArray() { + out.SetArrayItem(nil, idx, v) + idx++ } - out := make([]byte, 0, 1+len(aInner)+1+len(bInner)+1) - out = append(out, '[') - out = append(out, aInner...) - out = append(out, ',') - out = append(out, bInner...) - out = append(out, ']') return out } diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.txt index ae3a1fd702..a5bd2c443f 100644 --- a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.txt +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.txt @@ -1,13 +1 @@ - ---graphql -Content-Type: application/json - -{"data":{"findEmployees":[{"details":{"forename":"Jens"}},{"details":{"forename":"Dustin"}},{"details":{"forename":"Stefan"}},{"details":{"forename":"Björn"}},{"details":{"forename":"Sergiy"}},{"details":{"forename":"Suvij"}},{"details":{"forename":"Nithin"}},{"details":{"forename":"Eelco"}},{"details":{"forename":"Alexandra"}},{"details":{"forename":"David"}}]},"hasNext":true} - ---graphql -Content-Type: application/json - -{"incremental":[{"data":{"location":{"language":"German"}},"path":["findEmployees",0,"details"]},{"data":{"location":{"language":"German"}},"path":["findEmployees",1,"details"]},{"data":{"location":{"language":"English"}},"path":["findEmployees",2,"details"]},{"data":{"location":{"language":"German"}},"path":["findEmployees",3,"details"]},{"data":{"location":{"language":"Ukrainian"}},"path":["findEmployees",4,"details"]},{"data":{"location":{"language":"Hindi"}},"path":["findEmployees",5,"details"]},{"data":{"location":{"language":"Hindi"}},"path":["findEmployees",6,"details"]},{"data":{"location":{"language":"Dutch"}},"path":["findEmployees",7,"details"]},{"data":{"location":{"language":"German"}},"path":["findEmployees",8,"details"]},{"data":{"location":{"language":"English"}},"path":["findEmployees",9,"details"]}],"hasNext":false} - ---graphql ---graphql-- +{"data":{"findEmployees":[{"details":{"forename":"Jens"}},{"details":{"forename":"Dustin"}},{"details":{"forename":"Stefan"}},{"details":{"forename":"Björn"}},{"details":{"forename":"Sergiy"}},{"details":{"forename":"Suvij"}},{"details":{"forename":"Nithin"}},{"details":{"forename":"Eelco"}},{"details":{"forename":"Alexandra"}},{"details":{"forename":"David"}}]}} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer_reconstructed.json new file mode 100644 index 0000000000..5483c6e2a1 --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer_reconstructed.json @@ -0,0 +1,56 @@ +{ + "data": { + "findEmployees": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Dustin" + } + }, + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Suvij" + } + }, + { + "details": { + "forename": "Nithin" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "Alexandra" + } + }, + { + "details": { + "forename": "David" + } + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.txt index 3f46f0d651..51a733ea7b 100644 --- a/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.txt +++ b/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.txt @@ -1,13 +1 @@ - ---graphql -Content-Type: application/json - -{"data":{"a":[{"details":{"forename":"Stefan"}},{"details":{"forename":"Björn"}},{"details":{"forename":"Sergiy"}},{"details":{"forename":"Eelco"}},{"details":{"forename":"David"}}],"b":[{"details":{"forename":"Jens"}},{"details":{"forename":"Alexandra"}}],"c":[{"details":{"forename":"David"}}],"d":[]},"hasNext":true} - ---graphql -Content-Type: application/json - -{"incremental":[{"data":{"location":{"language":"English"}},"path":["a",0,"details"]},{"data":{"location":{"language":"German"}},"path":["a",1,"details"]},{"data":{"location":{"language":"Ukrainian"}},"path":["a",2,"details"]},{"data":{"location":{"language":"Dutch"}},"path":["a",3,"details"]},{"data":{"location":{"language":"English"}},"path":["a",4,"details"]}],"hasNext":false} - ---graphql ---graphql-- +{"data":{"a":[{"details":{"forename":"Stefan"}},{"details":{"forename":"Björn"}},{"details":{"forename":"Sergiy"}},{"details":{"forename":"Eelco"}},{"details":{"forename":"David"}}],"b":[{"details":{"forename":"Jens"}},{"details":{"forename":"Alexandra"}}],"c":[{"details":{"forename":"David"}}],"d":[]}} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer_reconstructed.json new file mode 100644 index 0000000000..82cdcebcfc --- /dev/null +++ b/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer_reconstructed.json @@ -0,0 +1,51 @@ +{ + "data": { + "a": [ + { + "details": { + "forename": "Stefan" + } + }, + { + "details": { + "forename": "Björn" + } + }, + { + "details": { + "forename": "Sergiy" + } + }, + { + "details": { + "forename": "Eelco" + } + }, + { + "details": { + "forename": "David" + } + } + ], + "b": [ + { + "details": { + "forename": "Jens" + } + }, + { + "details": { + "forename": "Alexandra" + } + } + ], + "c": [ + { + "details": { + "forename": "David" + } + } + ], + "d": [] + } +} \ No newline at end of file diff --git a/router-tests/testenv/testenv.go b/router-tests/testenv/testenv.go index 06b438c868..59cb86f8ef 100644 --- a/router-tests/testenv/testenv.go +++ b/router-tests/testenv/testenv.go @@ -2375,7 +2375,7 @@ func (e *Environment) MakeGraphQLDeferRequest(method string, body io.Reader) *ht require.NoError(e.t, err) req.Header.Set("Content-Type", "application/json") - req.Header.Set("Accept", "multipart/mixed;deferSpec=20220824, application/json") + req.Header.Set("Accept", "multipart/mixed") req.Header.Set("Connection", "keep-alive") return req From 0647d58c778539a00b393288707212b2057af65a Mon Sep 17 00:00:00 2001 From: spetrunin Date: Fri, 27 Mar 2026 00:03:51 +0200 Subject: [PATCH 10/23] update failing fixtures --- .../products_defer_01_single_defer.txt | 11 +++- ...s_defer_01_single_defer_reconstructed.json | 52 +++++++++++++++++++ ..._defer_02_single_defer_between_regular.txt | 11 +++- ...e_defer_between_regular_reconstructed.json | 52 +++++++++++++++++++ .../products_defer_04_all_fields_deferred.txt | 11 +++- ..._04_all_fields_deferred_reconstructed.json | 52 +++++++++++++++++++ .../products_defer_10_extensive_parallel.txt | 15 +++++- ...r_10_extensive_parallel_reconstructed.json | 9 ++++ 8 files changed, 205 insertions(+), 8 deletions(-) create mode 100644 router-tests/testdata/queries_defer/products_defer_01_single_defer_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred_reconstructed.json create mode 100644 router-tests/testdata/queries_defer/products_defer_10_extensive_parallel_reconstructed.json diff --git a/router-tests/testdata/queries_defer/products_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/products_defer_01_single_defer.txt index dbb83bd530..80be9bb542 100644 --- a/router-tests/testdata/queries_defer/products_defer_01_single_defer.txt +++ b/router-tests/testdata/queries_defer/products_defer_01_single_defer.txt @@ -2,5 +2,12 @@ --graphql Content-Type: application/json -{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} ---graphql-- \ No newline at end of file +{"data":{"products":[{},{"name":"COSMO","lead":{"details":{"forename":"Dustin"}},"repositoryURL":"https://github.com/wundergraph/cosmo","upc":"cosmo"},{"owner":{"details":{"forename":"Jens"}},"clientLanguages":["RUST","TYPESCRIPT"],"unicode":"😀♥!\u0015\u0010🝥","upc":"sdk"}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"productTypes":[{"upc":"cosmo"},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/products_defer_01_single_defer_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_01_single_defer_reconstructed.json new file mode 100644 index 0000000000..47df7e194c --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_01_single_defer_reconstructed.json @@ -0,0 +1,52 @@ +{ + "data": { + "products": [ + {}, + { + "name": "COSMO", + "lead": { + "details": { + "forename": "Dustin" + } + }, + "repositoryURL": "https://github.com/wundergraph/cosmo", + "upc": "cosmo" + }, + { + "owner": { + "details": { + "forename": "Jens" + } + }, + "clientLanguages": [ + "RUST", + "TYPESCRIPT" + ], + "unicode": "😀♥!\u0015\u0010🝥", + "upc": "sdk" + } + ], + "productTypes": [ + { + "upc": "cosmo" + }, + { + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "url": "https://cosmo-docs.wundergraph.com/", + "urls": [ + "https://cal.com/stefan-avram-wundergraph/wundergraph-introduction", + "https://github.com/wundergraph/graphql-go-tools/blob/master/README.md", + "N/A", + "https://docs.wundergraph.com/" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt index dbb83bd530..80be9bb542 100644 --- a/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt +++ b/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt @@ -2,5 +2,12 @@ --graphql Content-Type: application/json -{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} ---graphql-- \ No newline at end of file +{"data":{"products":[{},{"name":"COSMO","lead":{"details":{"forename":"Dustin"}},"repositoryURL":"https://github.com/wundergraph/cosmo","upc":"cosmo"},{"owner":{"details":{"forename":"Jens"}},"clientLanguages":["RUST","TYPESCRIPT"],"unicode":"😀♥!\u0015\u0010🝥","upc":"sdk"}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"productTypes":[{"upc":"cosmo"},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular_reconstructed.json new file mode 100644 index 0000000000..47df7e194c --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular_reconstructed.json @@ -0,0 +1,52 @@ +{ + "data": { + "products": [ + {}, + { + "name": "COSMO", + "lead": { + "details": { + "forename": "Dustin" + } + }, + "repositoryURL": "https://github.com/wundergraph/cosmo", + "upc": "cosmo" + }, + { + "owner": { + "details": { + "forename": "Jens" + } + }, + "clientLanguages": [ + "RUST", + "TYPESCRIPT" + ], + "unicode": "😀♥!\u0015\u0010🝥", + "upc": "sdk" + } + ], + "productTypes": [ + { + "upc": "cosmo" + }, + { + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "url": "https://cosmo-docs.wundergraph.com/", + "urls": [ + "https://cal.com/stefan-avram-wundergraph/wundergraph-introduction", + "https://github.com/wundergraph/graphql-go-tools/blob/master/README.md", + "N/A", + "https://docs.wundergraph.com/" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.txt b/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.txt index dbb83bd530..8ec825313b 100644 --- a/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.txt +++ b/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.txt @@ -2,5 +2,12 @@ --graphql Content-Type: application/json -{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} ---graphql-- \ No newline at end of file +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"products":[{},{"name":"COSMO","lead":{"details":{"forename":"Dustin"}},"repositoryURL":"https://github.com/wundergraph/cosmo","upc":"cosmo"},{"owner":{"details":{"forename":"Jens"}},"clientLanguages":["RUST","TYPESCRIPT"],"unicode":"😀♥!\u0015\u0010🝥","upc":"sdk"}],"productTypes":[{"upc":"cosmo"},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred_reconstructed.json new file mode 100644 index 0000000000..47df7e194c --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred_reconstructed.json @@ -0,0 +1,52 @@ +{ + "data": { + "products": [ + {}, + { + "name": "COSMO", + "lead": { + "details": { + "forename": "Dustin" + } + }, + "repositoryURL": "https://github.com/wundergraph/cosmo", + "upc": "cosmo" + }, + { + "owner": { + "details": { + "forename": "Jens" + } + }, + "clientLanguages": [ + "RUST", + "TYPESCRIPT" + ], + "unicode": "😀♥!\u0015\u0010🝥", + "upc": "sdk" + } + ], + "productTypes": [ + { + "upc": "cosmo" + }, + { + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "url": "https://cosmo-docs.wundergraph.com/", + "urls": [ + "https://cal.com/stefan-avram-wundergraph/wundergraph-introduction", + "https://github.com/wundergraph/graphql-go-tools/blob/master/README.md", + "N/A", + "https://docs.wundergraph.com/" + ] + } + ] + } +} \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.txt index dbb83bd530..f365ccebe7 100644 --- a/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.txt +++ b/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.txt @@ -2,5 +2,16 @@ --graphql Content-Type: application/json -{"errors":[{"message":"cannot select field: upc on union: Products","path":["query","products"]}]} ---graphql-- \ No newline at end of file +{"data":{},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"products":[{},{},{}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[],"hasNext":false} + +--graphql \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel_reconstructed.json new file mode 100644 index 0000000000..9dee16282e --- /dev/null +++ b/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel_reconstructed.json @@ -0,0 +1,9 @@ +{ + "data": { + "products": [ + {}, + {}, + {} + ] + } +} \ No newline at end of file From b6990ffbc314df5a8cb1560bd32d440b7b2d203a Mon Sep 17 00:00:00 2001 From: spetrunin Date: Fri, 27 Mar 2026 00:56:58 +0200 Subject: [PATCH 11/23] update fixtures after fixing rendering typename with defer --- .../employeeDetails_defer_01_single_defer.txt | 2 +- ...s_defer_01_single_defer_reconstructed.json | 34 +++++++++++++++++++ ..._defer_02_single_defer_between_regular.txt | 2 +- ...e_defer_between_regular_reconstructed.json | 34 +++++++++++++++++++ ...ails_defer_03_multiple_fields_deferred.txt | 2 +- ...ultiple_fields_deferred_reconstructed.json | 34 +++++++++++++++++++ ...eeDetails_defer_04_all_fields_deferred.txt | 2 +- ..._04_all_fields_deferred_reconstructed.json | 34 +++++++++++++++++++ .../employeeDetails_defer_05_nested_defer.txt | 2 +- ...s_defer_05_nested_defer_reconstructed.json | 34 +++++++++++++++++++ ...etails_defer_06_nested_defer_variation.txt | 2 +- ..._nested_defer_variation_reconstructed.json | 34 +++++++++++++++++++ ...ployeeDetails_defer_07_parallel_defers.txt | 2 +- ...efer_07_parallel_defers_reconstructed.json | 34 +++++++++++++++++++ ...eeDetails_defer_08_defer_nested_object.txt | 2 +- ..._08_defer_nested_object_reconstructed.json | 34 +++++++++++++++++++ ...yeeDetails_defer_10_extensive_parallel.txt | 2 +- ...r_10_extensive_parallel_reconstructed.json | 34 +++++++++++++++++++ .../employee_defer_01_single_defer.txt | 2 +- ...e_defer_01_single_defer_reconstructed.json | 20 ++++++++--- ..._defer_02_single_defer_between_regular.txt | 2 +- ...e_defer_between_regular_reconstructed.json | 20 ++++++++--- ...oyee_defer_03_multiple_fields_deferred.txt | 2 +- ...ultiple_fields_deferred_reconstructed.json | 20 ++++++++--- .../employee_defer_04_all_fields_deferred.txt | 2 +- ..._04_all_fields_deferred_reconstructed.json | 20 ++++++++--- .../employee_defer_05_nested_defer.txt | 2 +- ...e_defer_05_nested_defer_reconstructed.json | 20 ++++++++--- ...ployee_defer_06_nested_defer_variation.txt | 2 +- ..._nested_defer_variation_reconstructed.json | 20 ++++++++--- .../employee_defer_07_parallel_defers.txt | 2 +- ...efer_07_parallel_defers_reconstructed.json | 20 ++++++++--- .../employee_defer_08_defer_nested_object.txt | 2 +- ..._08_defer_nested_object_reconstructed.json | 20 ++++++++--- ...defer_09_duplicated_field_across_defer.txt | 2 +- ...ated_field_across_defer_reconstructed.json | 20 ++++++++--- .../employee_defer_10_extensive_parallel.txt | 2 +- ...r_10_extensive_parallel_reconstructed.json | 20 ++++++++--- .../products_defer_01_single_defer.txt | 2 +- ...s_defer_01_single_defer_reconstructed.json | 3 ++ ..._defer_02_single_defer_between_regular.txt | 2 +- ...e_defer_between_regular_reconstructed.json | 3 ++ .../products_defer_04_all_fields_deferred.txt | 2 +- ..._04_all_fields_deferred_reconstructed.json | 3 ++ ..._different_depth_defer_01_single_defer.txt | 2 +- ...h_defer_01_single_defer_reconstructed.json | 1 + ..._defer_02_single_defer_between_regular.txt | 2 +- ...e_defer_between_regular_reconstructed.json | 1 + ...epth_defer_03_multiple_fields_deferred.txt | 2 +- ...ultiple_fields_deferred_reconstructed.json | 1 + ...ent_depth_defer_04_all_fields_deferred.txt | 2 +- ..._04_all_fields_deferred_reconstructed.json | 10 ++++-- ..._different_depth_defer_05_nested_defer.txt | 4 +-- ...h_defer_05_nested_defer_reconstructed.json | 10 ++++-- ..._depth_defer_06_nested_defer_variation.txt | 4 +-- ..._nested_defer_variation_reconstructed.json | 10 ++++-- ...fferent_depth_defer_07_parallel_defers.txt | 2 +- ...efer_07_parallel_defers_reconstructed.json | 1 + ...rent_depth_defer_10_extensive_parallel.txt | 4 +-- ...r_10_extensive_parallel_reconstructed.json | 10 ++++-- ...t_depth_defer_13_fragment_spread_defer.txt | 2 +- ...3_fragment_spread_defer_reconstructed.json | 1 + .../requires_mood_defer_01_single_defer.txt | 2 +- ...d_defer_01_single_defer_reconstructed.json | 1 + ...mood_defer_03_multiple_fields_deferred.txt | 2 +- ...ultiple_fields_deferred_reconstructed.json | 1 + ...ires_mood_defer_04_all_fields_deferred.txt | 2 +- ..._04_all_fields_deferred_reconstructed.json | 1 + .../requires_mood_defer_05_nested_defer.txt | 2 +- ...d_defer_05_nested_defer_reconstructed.json | 1 + ...s_mood_defer_06_nested_defer_variation.txt | 2 +- ..._nested_defer_variation_reconstructed.json | 1 + ...requires_mood_defer_07_parallel_defers.txt | 2 +- ...efer_07_parallel_defers_reconstructed.json | 1 + ...uires_mood_defer_10_extensive_parallel.txt | 2 +- ...r_10_extensive_parallel_reconstructed.json | 1 + ...es_mood_defer_13_fragment_spread_defer.txt | 2 +- ...3_fragment_spread_defer_reconstructed.json | 1 + 78 files changed, 552 insertions(+), 100 deletions(-) diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt index 7243e06138..72d11588a8 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Flying","employees":[{"id":4,"details":{"forename":"Björn"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer_reconstructed.json index 930f5d887d..7f3b750761 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer_reconstructed.json @@ -6,6 +6,7 @@ "notes": "Jens notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -70,6 +71,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -104,6 +106,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -162,6 +165,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -190,6 +194,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -230,6 +235,7 @@ "notes": "Dustin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -294,6 +300,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -328,6 +335,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -362,6 +370,7 @@ "notes": "Stefan notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -426,6 +435,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -490,6 +500,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -548,6 +559,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -588,6 +600,7 @@ "notes": "Björn notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -652,6 +665,7 @@ ] }, { + "__typename": "Flying", "employees": [ { "id": 4, @@ -662,6 +676,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -702,6 +717,7 @@ "notes": "Sergiy notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -760,6 +776,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -818,6 +835,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -882,6 +900,7 @@ "notes": "Suvij notes resolved by products", "hobbies": [ { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -916,6 +935,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -980,6 +1000,7 @@ "notes": "Nithin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1044,6 +1065,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1078,6 +1100,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1142,6 +1165,7 @@ "notes": "Eelco notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1170,6 +1194,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1234,6 +1259,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1298,6 +1324,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1362,6 +1389,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1420,6 +1448,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -1460,6 +1489,7 @@ "notes": "Alexandra notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -1524,6 +1554,7 @@ "notes": "David notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1552,6 +1583,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1616,6 +1648,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1650,6 +1683,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.txt index 7243e06138..72d11588a8 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.txt +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Flying","employees":[{"id":4,"details":{"forename":"Björn"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular_reconstructed.json index 930f5d887d..7f3b750761 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular_reconstructed.json +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular_reconstructed.json @@ -6,6 +6,7 @@ "notes": "Jens notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -70,6 +71,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -104,6 +106,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -162,6 +165,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -190,6 +194,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -230,6 +235,7 @@ "notes": "Dustin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -294,6 +300,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -328,6 +335,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -362,6 +370,7 @@ "notes": "Stefan notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -426,6 +435,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -490,6 +500,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -548,6 +559,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -588,6 +600,7 @@ "notes": "Björn notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -652,6 +665,7 @@ ] }, { + "__typename": "Flying", "employees": [ { "id": 4, @@ -662,6 +676,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -702,6 +717,7 @@ "notes": "Sergiy notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -760,6 +776,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -818,6 +835,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -882,6 +900,7 @@ "notes": "Suvij notes resolved by products", "hobbies": [ { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -916,6 +935,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -980,6 +1000,7 @@ "notes": "Nithin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1044,6 +1065,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1078,6 +1100,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1142,6 +1165,7 @@ "notes": "Eelco notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1170,6 +1194,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1234,6 +1259,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1298,6 +1324,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1362,6 +1389,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1420,6 +1448,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -1460,6 +1489,7 @@ "notes": "Alexandra notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -1524,6 +1554,7 @@ "notes": "David notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1552,6 +1583,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1616,6 +1648,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1650,6 +1683,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.txt index b10c5551b0..63d92929d9 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.txt +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"notes":"Jens notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"notes":"Dustin notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"notes":"Stefan notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"notes":"Björn notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"notes":"Sergiy notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"notes":"Suvij notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"notes":"Nithin notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"notes":"Eelco notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"notes":"Alexandra notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"notes":"David notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} +{"incremental":[{"data":{"notes":"Jens notes resolved by products","hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"notes":"Dustin notes resolved by products","hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"notes":"Stefan notes resolved by products","hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"notes":"Björn notes resolved by products","hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Flying","employees":[{"id":4,"details":{"forename":"Björn"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"notes":"Sergiy notes resolved by products","hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"notes":"Suvij notes resolved by products","hobbies":[{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"notes":"Nithin notes resolved by products","hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"notes":"Eelco notes resolved by products","hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"notes":"Alexandra notes resolved by products","hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"notes":"David notes resolved by products","hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred_reconstructed.json index 930f5d887d..7f3b750761 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred_reconstructed.json +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred_reconstructed.json @@ -6,6 +6,7 @@ "notes": "Jens notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -70,6 +71,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -104,6 +106,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -162,6 +165,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -190,6 +194,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -230,6 +235,7 @@ "notes": "Dustin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -294,6 +300,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -328,6 +335,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -362,6 +370,7 @@ "notes": "Stefan notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -426,6 +435,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -490,6 +500,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -548,6 +559,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -588,6 +600,7 @@ "notes": "Björn notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -652,6 +665,7 @@ ] }, { + "__typename": "Flying", "employees": [ { "id": 4, @@ -662,6 +676,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -702,6 +717,7 @@ "notes": "Sergiy notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -760,6 +776,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -818,6 +835,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -882,6 +900,7 @@ "notes": "Suvij notes resolved by products", "hobbies": [ { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -916,6 +935,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -980,6 +1000,7 @@ "notes": "Nithin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1044,6 +1065,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1078,6 +1100,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1142,6 +1165,7 @@ "notes": "Eelco notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1170,6 +1194,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1234,6 +1259,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1298,6 +1324,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1362,6 +1389,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1420,6 +1448,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -1460,6 +1489,7 @@ "notes": "Alexandra notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -1524,6 +1554,7 @@ "notes": "David notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1552,6 +1583,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1616,6 +1648,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1650,6 +1683,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.txt index a0745bb3af..a8a82613ce 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.txt +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},{"id":2,"notes":"Dustin notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},{"id":3,"notes":"Stefan notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},{"id":4,"notes":"Björn notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},{"id":5,"notes":"Sergiy notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},{"id":7,"notes":"Suvij notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},{"id":8,"notes":"Nithin notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},{"id":10,"notes":"Eelco notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},{"id":11,"notes":"Alexandra notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},{"id":12,"notes":"David notes resolved by products","hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},{"id":2,"notes":"Dustin notes resolved by products","hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},{"id":3,"notes":"Stefan notes resolved by products","hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},{"id":4,"notes":"Björn notes resolved by products","hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Flying","employees":[{"id":4,"details":{"forename":"Björn"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},{"id":5,"notes":"Sergiy notes resolved by products","hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},{"id":7,"notes":"Suvij notes resolved by products","hobbies":[{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},{"id":8,"notes":"Nithin notes resolved by products","hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},{"id":10,"notes":"Eelco notes resolved by products","hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},{"id":11,"notes":"Alexandra notes resolved by products","hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},{"id":12,"notes":"David notes resolved by products","hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]}]},"path":[]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred_reconstructed.json index 930f5d887d..7f3b750761 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred_reconstructed.json +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred_reconstructed.json @@ -6,6 +6,7 @@ "notes": "Jens notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -70,6 +71,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -104,6 +106,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -162,6 +165,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -190,6 +194,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -230,6 +235,7 @@ "notes": "Dustin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -294,6 +300,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -328,6 +335,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -362,6 +370,7 @@ "notes": "Stefan notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -426,6 +435,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -490,6 +500,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -548,6 +559,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -588,6 +600,7 @@ "notes": "Björn notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -652,6 +665,7 @@ ] }, { + "__typename": "Flying", "employees": [ { "id": 4, @@ -662,6 +676,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -702,6 +717,7 @@ "notes": "Sergiy notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -760,6 +776,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -818,6 +835,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -882,6 +900,7 @@ "notes": "Suvij notes resolved by products", "hobbies": [ { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -916,6 +935,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -980,6 +1000,7 @@ "notes": "Nithin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1044,6 +1065,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1078,6 +1100,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1142,6 +1165,7 @@ "notes": "Eelco notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1170,6 +1194,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1234,6 +1259,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1298,6 +1324,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1362,6 +1389,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1420,6 +1448,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -1460,6 +1489,7 @@ "notes": "Alexandra notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -1524,6 +1554,7 @@ "notes": "David notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1552,6 +1583,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1616,6 +1648,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1650,6 +1683,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.txt index b4be0e2e8a..92e9e7f3ac 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.txt +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.txt @@ -12,7 +12,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Flying","employees":[{"id":4,"details":{"forename":"Björn"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer_reconstructed.json index 930f5d887d..7f3b750761 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer_reconstructed.json @@ -6,6 +6,7 @@ "notes": "Jens notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -70,6 +71,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -104,6 +106,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -162,6 +165,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -190,6 +194,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -230,6 +235,7 @@ "notes": "Dustin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -294,6 +300,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -328,6 +335,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -362,6 +370,7 @@ "notes": "Stefan notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -426,6 +435,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -490,6 +500,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -548,6 +559,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -588,6 +600,7 @@ "notes": "Björn notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -652,6 +665,7 @@ ] }, { + "__typename": "Flying", "employees": [ { "id": 4, @@ -662,6 +676,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -702,6 +717,7 @@ "notes": "Sergiy notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -760,6 +776,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -818,6 +835,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -882,6 +900,7 @@ "notes": "Suvij notes resolved by products", "hobbies": [ { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -916,6 +935,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -980,6 +1000,7 @@ "notes": "Nithin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1044,6 +1065,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1078,6 +1100,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1142,6 +1165,7 @@ "notes": "Eelco notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1170,6 +1194,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1234,6 +1259,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1298,6 +1324,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1362,6 +1389,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1420,6 +1448,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -1460,6 +1489,7 @@ "notes": "Alexandra notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -1524,6 +1554,7 @@ "notes": "David notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1552,6 +1583,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1616,6 +1648,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1650,6 +1683,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.txt index d28e009294..080408e63c 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.txt +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.txt @@ -12,7 +12,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Flying","employees":[{"id":4,"details":{"forename":"Björn"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation_reconstructed.json index 930f5d887d..7f3b750761 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation_reconstructed.json +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation_reconstructed.json @@ -6,6 +6,7 @@ "notes": "Jens notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -70,6 +71,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -104,6 +106,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -162,6 +165,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -190,6 +194,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -230,6 +235,7 @@ "notes": "Dustin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -294,6 +300,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -328,6 +335,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -362,6 +370,7 @@ "notes": "Stefan notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -426,6 +435,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -490,6 +500,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -548,6 +559,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -588,6 +600,7 @@ "notes": "Björn notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -652,6 +665,7 @@ ] }, { + "__typename": "Flying", "employees": [ { "id": 4, @@ -662,6 +676,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -702,6 +717,7 @@ "notes": "Sergiy notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -760,6 +776,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -818,6 +835,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -882,6 +900,7 @@ "notes": "Suvij notes resolved by products", "hobbies": [ { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -916,6 +935,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -980,6 +1000,7 @@ "notes": "Nithin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1044,6 +1065,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1078,6 +1100,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1142,6 +1165,7 @@ "notes": "Eelco notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1170,6 +1194,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1234,6 +1259,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1298,6 +1324,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1362,6 +1389,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1420,6 +1448,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -1460,6 +1489,7 @@ "notes": "Alexandra notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -1524,6 +1554,7 @@ "notes": "David notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1552,6 +1583,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1616,6 +1648,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1650,6 +1683,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.txt index b4be0e2e8a..92e9e7f3ac 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.txt +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.txt @@ -12,7 +12,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Flying","employees":[{"id":4,"details":{"forename":"Björn"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers_reconstructed.json index 930f5d887d..7f3b750761 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers_reconstructed.json +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers_reconstructed.json @@ -6,6 +6,7 @@ "notes": "Jens notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -70,6 +71,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -104,6 +106,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -162,6 +165,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -190,6 +194,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -230,6 +235,7 @@ "notes": "Dustin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -294,6 +300,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -328,6 +335,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -362,6 +370,7 @@ "notes": "Stefan notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -426,6 +435,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -490,6 +500,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -548,6 +559,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -588,6 +600,7 @@ "notes": "Björn notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -652,6 +665,7 @@ ] }, { + "__typename": "Flying", "employees": [ { "id": 4, @@ -662,6 +676,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -702,6 +717,7 @@ "notes": "Sergiy notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -760,6 +776,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -818,6 +835,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -882,6 +900,7 @@ "notes": "Suvij notes resolved by products", "hobbies": [ { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -916,6 +935,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -980,6 +1000,7 @@ "notes": "Nithin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1044,6 +1065,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1078,6 +1100,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1142,6 +1165,7 @@ "notes": "Eelco notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1170,6 +1194,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1234,6 +1259,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1298,6 +1324,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1362,6 +1389,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1420,6 +1448,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -1460,6 +1489,7 @@ "notes": "Alexandra notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -1524,6 +1554,7 @@ "notes": "David notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1552,6 +1583,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1616,6 +1648,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1650,6 +1683,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.txt index 7243e06138..72d11588a8 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.txt +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Flying","employees":[{"id":4,"details":{"forename":"Björn"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object_reconstructed.json index 930f5d887d..7f3b750761 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object_reconstructed.json +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object_reconstructed.json @@ -6,6 +6,7 @@ "notes": "Jens notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -70,6 +71,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -104,6 +106,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -162,6 +165,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -190,6 +194,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -230,6 +235,7 @@ "notes": "Dustin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -294,6 +300,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -328,6 +335,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -362,6 +370,7 @@ "notes": "Stefan notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -426,6 +435,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -490,6 +500,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -548,6 +559,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -588,6 +600,7 @@ "notes": "Björn notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -652,6 +665,7 @@ ] }, { + "__typename": "Flying", "employees": [ { "id": 4, @@ -662,6 +676,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -702,6 +717,7 @@ "notes": "Sergiy notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -760,6 +776,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -818,6 +835,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -882,6 +900,7 @@ "notes": "Suvij notes resolved by products", "hobbies": [ { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -916,6 +935,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -980,6 +1000,7 @@ "notes": "Nithin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1044,6 +1065,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1078,6 +1100,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1142,6 +1165,7 @@ "notes": "Eelco notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1170,6 +1194,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1234,6 +1259,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1298,6 +1324,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1362,6 +1389,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1420,6 +1448,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -1460,6 +1489,7 @@ "notes": "Alexandra notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -1524,6 +1554,7 @@ "notes": "David notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1552,6 +1583,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1616,6 +1648,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1650,6 +1683,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.txt index 7dc26b9dba..bddc5e8971 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.txt +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.txt @@ -22,7 +22,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":4,"details":{"forename":"Björn"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",1]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Flying","employees":[{"id":4,"details":{"forename":"Björn"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",4]},{"data":{"hobbies":[{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",5]},{"data":{"hobbies":[{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",6]},{"data":{"hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"__typename":"Other","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":5,"details":{"forename":"Sergiy"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":11,"details":{"forename":"Alexandra"}}]}]},"path":["employees",8]},{"data":{"hobbies":[{"__typename":"Programming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Exercise","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":3,"details":{"forename":"Stefan"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":8,"details":{"forename":"Nithin"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Gaming","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":2,"details":{"forename":"Dustin"}},{"id":7,"details":{"forename":"Suvij"}},{"id":8,"details":{"forename":"Nithin"}},{"id":12,"details":{"forename":"David"}}]},{"__typename":"Travelling","employees":[{"id":1,"details":{"forename":"Jens"}},{"id":3,"details":{"forename":"Stefan"}},{"id":4,"details":{"forename":"Björn"}},{"id":10,"details":{"forename":"Eelco"}},{"id":12,"details":{"forename":"David"}}]}]},"path":["employees",9]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel_reconstructed.json b/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel_reconstructed.json index 930f5d887d..7f3b750761 100644 --- a/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel_reconstructed.json +++ b/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel_reconstructed.json @@ -6,6 +6,7 @@ "notes": "Jens notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -70,6 +71,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -104,6 +106,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -162,6 +165,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -190,6 +194,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -230,6 +235,7 @@ "notes": "Dustin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -294,6 +300,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -328,6 +335,7 @@ ] }, { + "__typename": "Programming", "employees": [ { "id": 1, @@ -362,6 +370,7 @@ "notes": "Stefan notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -426,6 +435,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -490,6 +500,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -548,6 +559,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -588,6 +600,7 @@ "notes": "Björn notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -652,6 +665,7 @@ ] }, { + "__typename": "Flying", "employees": [ { "id": 4, @@ -662,6 +676,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -702,6 +717,7 @@ "notes": "Sergiy notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -760,6 +776,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -818,6 +835,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -882,6 +900,7 @@ "notes": "Suvij notes resolved by products", "hobbies": [ { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -916,6 +935,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -980,6 +1000,7 @@ "notes": "Nithin notes resolved by products", "hobbies": [ { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1044,6 +1065,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1078,6 +1100,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1142,6 +1165,7 @@ "notes": "Eelco notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1170,6 +1194,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1234,6 +1259,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1298,6 +1324,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1362,6 +1389,7 @@ ] }, { + "__typename": "Other", "employees": [ { "id": 1, @@ -1420,6 +1448,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, @@ -1460,6 +1489,7 @@ "notes": "Alexandra notes resolved by products", "hobbies": [ { + "__typename": "Other", "employees": [ { "id": 1, @@ -1524,6 +1554,7 @@ "notes": "David notes resolved by products", "hobbies": [ { + "__typename": "Programming", "employees": [ { "id": 1, @@ -1552,6 +1583,7 @@ ] }, { + "__typename": "Exercise", "employees": [ { "id": 1, @@ -1616,6 +1648,7 @@ ] }, { + "__typename": "Gaming", "employees": [ { "id": 1, @@ -1650,6 +1683,7 @@ ] }, { + "__typename": "Travelling", "employees": [ { "id": 1, diff --git a/router-tests/testdata/queries_defer/employee_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/employee_defer_01_single_defer.txt index a12ff922bf..4f1cee65be 100644 --- a/router-tests/testdata/queries_defer/employee_defer_01_single_defer.txt +++ b/router-tests/testdata/queries_defer/employee_defer_01_single_defer.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{},{},{},{},{}]},"path":["employee"]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"__typename":"Exercise"},{"__typename":"Gaming"},{"__typename":"Other"},{"__typename":"Programming"},{"__typename":"Travelling"}]},"path":["employee"]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_01_single_defer_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_01_single_defer_reconstructed.json index 80a77c000e..0e74b492eb 100644 --- a/router-tests/testdata/queries_defer/employee_defer_01_single_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/employee_defer_01_single_defer_reconstructed.json @@ -9,11 +9,21 @@ } }, "hobbies": [ - {}, - {}, - {}, - {}, - {} + { + "__typename": "Exercise" + }, + { + "__typename": "Gaming" + }, + { + "__typename": "Other" + }, + { + "__typename": "Programming" + }, + { + "__typename": "Travelling" + } ] }, "teammates": [ diff --git a/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt index a12ff922bf..4f1cee65be 100644 --- a/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt +++ b/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{},{},{},{},{}]},"path":["employee"]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"__typename":"Exercise"},{"__typename":"Gaming"},{"__typename":"Other"},{"__typename":"Programming"},{"__typename":"Travelling"}]},"path":["employee"]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular_reconstructed.json index 80a77c000e..0e74b492eb 100644 --- a/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular_reconstructed.json +++ b/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular_reconstructed.json @@ -9,11 +9,21 @@ } }, "hobbies": [ - {}, - {}, - {}, - {}, - {} + { + "__typename": "Exercise" + }, + { + "__typename": "Gaming" + }, + { + "__typename": "Other" + }, + { + "__typename": "Programming" + }, + { + "__typename": "Travelling" + } ] }, "teammates": [ diff --git a/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.txt b/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.txt index 392d63896e..790ec1b819 100644 --- a/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.txt +++ b/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"details":{"forename":"Jens","location":{"language":"German"}},"hobbies":[{},{},{},{},{}]},"path":["employee"]}],"hasNext":false} +{"incremental":[{"data":{"details":{"forename":"Jens","location":{"language":"German"}},"hobbies":[{"__typename":"Exercise"},{"__typename":"Gaming"},{"__typename":"Other"},{"__typename":"Programming"},{"__typename":"Travelling"}]},"path":["employee"]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred_reconstructed.json index 80a77c000e..0e74b492eb 100644 --- a/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred_reconstructed.json +++ b/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred_reconstructed.json @@ -9,11 +9,21 @@ } }, "hobbies": [ - {}, - {}, - {}, - {}, - {} + { + "__typename": "Exercise" + }, + { + "__typename": "Gaming" + }, + { + "__typename": "Other" + }, + { + "__typename": "Programming" + }, + { + "__typename": "Travelling" + } ] }, "teammates": [ diff --git a/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.txt b/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.txt index 211feae9da..3248a3b625 100644 --- a/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.txt +++ b/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}},"hobbies":[{},{},{},{},{}]},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}},"hobbies":[{"__typename":"Exercise"},{"__typename":"Gaming"},{"__typename":"Other"},{"__typename":"Programming"},{"__typename":"Travelling"}]},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}]},"path":[]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred_reconstructed.json index 80a77c000e..0e74b492eb 100644 --- a/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred_reconstructed.json +++ b/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred_reconstructed.json @@ -9,11 +9,21 @@ } }, "hobbies": [ - {}, - {}, - {}, - {}, - {} + { + "__typename": "Exercise" + }, + { + "__typename": "Gaming" + }, + { + "__typename": "Other" + }, + { + "__typename": "Programming" + }, + { + "__typename": "Travelling" + } ] }, "teammates": [ diff --git a/router-tests/testdata/queries_defer/employee_defer_05_nested_defer.txt b/router-tests/testdata/queries_defer/employee_defer_05_nested_defer.txt index a31007cb4c..81471d5fc9 100644 --- a/router-tests/testdata/queries_defer/employee_defer_05_nested_defer.txt +++ b/router-tests/testdata/queries_defer/employee_defer_05_nested_defer.txt @@ -12,7 +12,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{},{},{},{},{}]},"path":["employee"]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"__typename":"Exercise"},{"__typename":"Gaming"},{"__typename":"Other"},{"__typename":"Programming"},{"__typename":"Travelling"}]},"path":["employee"]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_05_nested_defer_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_05_nested_defer_reconstructed.json index 80a77c000e..0e74b492eb 100644 --- a/router-tests/testdata/queries_defer/employee_defer_05_nested_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/employee_defer_05_nested_defer_reconstructed.json @@ -9,11 +9,21 @@ } }, "hobbies": [ - {}, - {}, - {}, - {}, - {} + { + "__typename": "Exercise" + }, + { + "__typename": "Gaming" + }, + { + "__typename": "Other" + }, + { + "__typename": "Programming" + }, + { + "__typename": "Travelling" + } ] }, "teammates": [ diff --git a/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.txt index cfe7bbcf26..5096a915ad 100644 --- a/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.txt +++ b/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.txt @@ -12,7 +12,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{},{},{},{},{}]},"path":["employee"]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"__typename":"Exercise"},{"__typename":"Gaming"},{"__typename":"Other"},{"__typename":"Programming"},{"__typename":"Travelling"}]},"path":["employee"]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation_reconstructed.json index 80a77c000e..0e74b492eb 100644 --- a/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation_reconstructed.json +++ b/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation_reconstructed.json @@ -9,11 +9,21 @@ } }, "hobbies": [ - {}, - {}, - {}, - {}, - {} + { + "__typename": "Exercise" + }, + { + "__typename": "Gaming" + }, + { + "__typename": "Other" + }, + { + "__typename": "Programming" + }, + { + "__typename": "Travelling" + } ] }, "teammates": [ diff --git a/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.txt index a31007cb4c..81471d5fc9 100644 --- a/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.txt +++ b/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.txt @@ -12,7 +12,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{},{},{},{},{}]},"path":["employee"]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"__typename":"Exercise"},{"__typename":"Gaming"},{"__typename":"Other"},{"__typename":"Programming"},{"__typename":"Travelling"}]},"path":["employee"]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers_reconstructed.json index 80a77c000e..0e74b492eb 100644 --- a/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers_reconstructed.json +++ b/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers_reconstructed.json @@ -9,11 +9,21 @@ } }, "hobbies": [ - {}, - {}, - {}, - {}, - {} + { + "__typename": "Exercise" + }, + { + "__typename": "Gaming" + }, + { + "__typename": "Other" + }, + { + "__typename": "Programming" + }, + { + "__typename": "Travelling" + } ] }, "teammates": [ diff --git a/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.txt b/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.txt index a1a1e38599..c955117efe 100644 --- a/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.txt +++ b/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{},{},{},{},{}]},"path":["employee"]}],"hasNext":true} +{"incremental":[{"data":{"hobbies":[{"__typename":"Exercise"},{"__typename":"Gaming"},{"__typename":"Other"},{"__typename":"Programming"},{"__typename":"Travelling"}]},"path":["employee"]}],"hasNext":true} --graphql Content-Type: application/json diff --git a/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object_reconstructed.json index 80a77c000e..0e74b492eb 100644 --- a/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object_reconstructed.json +++ b/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object_reconstructed.json @@ -9,11 +9,21 @@ } }, "hobbies": [ - {}, - {}, - {}, - {}, - {} + { + "__typename": "Exercise" + }, + { + "__typename": "Gaming" + }, + { + "__typename": "Other" + }, + { + "__typename": "Programming" + }, + { + "__typename": "Travelling" + } ] }, "teammates": [ diff --git a/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.txt index b87250863d..2b15eeb266 100644 --- a/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.txt +++ b/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{},{},{},{},{}]},"path":["employee"]},{"data":{"location":{"language":"German"}},"path":["employee","details"]}],"hasNext":false} +{"incremental":[{"data":{"hobbies":[{"__typename":"Exercise"},{"__typename":"Gaming"},{"__typename":"Other"},{"__typename":"Programming"},{"__typename":"Travelling"}]},"path":["employee"]},{"data":{"location":{"language":"German"}},"path":["employee","details"]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer_reconstructed.json index 80a77c000e..0e74b492eb 100644 --- a/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer_reconstructed.json @@ -9,11 +9,21 @@ } }, "hobbies": [ - {}, - {}, - {}, - {}, - {} + { + "__typename": "Exercise" + }, + { + "__typename": "Gaming" + }, + { + "__typename": "Other" + }, + { + "__typename": "Programming" + }, + { + "__typename": "Travelling" + } ] }, "teammates": [ diff --git a/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.txt index 2a0de22f89..d7ae2d1ed5 100644 --- a/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.txt +++ b/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.txt @@ -22,7 +22,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"hobbies":[{},{},{},{},{}]},"path":["employee"]}],"hasNext":true} +{"incremental":[{"data":{"hobbies":[{"__typename":"Exercise"},{"__typename":"Gaming"},{"__typename":"Other"},{"__typename":"Programming"},{"__typename":"Travelling"}]},"path":["employee"]}],"hasNext":true} --graphql Content-Type: application/json diff --git a/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel_reconstructed.json b/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel_reconstructed.json index 80a77c000e..0e74b492eb 100644 --- a/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel_reconstructed.json +++ b/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel_reconstructed.json @@ -9,11 +9,21 @@ } }, "hobbies": [ - {}, - {}, - {}, - {}, - {} + { + "__typename": "Exercise" + }, + { + "__typename": "Gaming" + }, + { + "__typename": "Other" + }, + { + "__typename": "Programming" + }, + { + "__typename": "Travelling" + } ] }, "teammates": [ diff --git a/router-tests/testdata/queries_defer/products_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/products_defer_01_single_defer.txt index 80be9bb542..5995b48648 100644 --- a/router-tests/testdata/queries_defer/products_defer_01_single_defer.txt +++ b/router-tests/testdata/queries_defer/products_defer_01_single_defer.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"productTypes":[{"upc":"cosmo"},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"productTypes":[{"__typename":"Cosmo","upc":"cosmo"},{"__typename":"Consultancy","lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"__typename":"Documentation","url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]}]},"path":[]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/products_defer_01_single_defer_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_01_single_defer_reconstructed.json index 47df7e194c..cb006baa1f 100644 --- a/router-tests/testdata/queries_defer/products_defer_01_single_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/products_defer_01_single_defer_reconstructed.json @@ -28,9 +28,11 @@ ], "productTypes": [ { + "__typename": "Cosmo", "upc": "cosmo" }, { + "__typename": "Consultancy", "lead": { "details": { "forename": "Jens" @@ -39,6 +41,7 @@ "name": "CONSULTANCY" }, { + "__typename": "Documentation", "url": "https://cosmo-docs.wundergraph.com/", "urls": [ "https://cal.com/stefan-avram-wundergraph/wundergraph-introduction", diff --git a/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt index 80be9bb542..5995b48648 100644 --- a/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt +++ b/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"productTypes":[{"upc":"cosmo"},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"productTypes":[{"__typename":"Cosmo","upc":"cosmo"},{"__typename":"Consultancy","lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"__typename":"Documentation","url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]}]},"path":[]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular_reconstructed.json index 47df7e194c..cb006baa1f 100644 --- a/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular_reconstructed.json +++ b/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular_reconstructed.json @@ -28,9 +28,11 @@ ], "productTypes": [ { + "__typename": "Cosmo", "upc": "cosmo" }, { + "__typename": "Consultancy", "lead": { "details": { "forename": "Jens" @@ -39,6 +41,7 @@ "name": "CONSULTANCY" }, { + "__typename": "Documentation", "url": "https://cosmo-docs.wundergraph.com/", "urls": [ "https://cal.com/stefan-avram-wundergraph/wundergraph-introduction", diff --git a/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.txt b/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.txt index 8ec825313b..8e7c33c70c 100644 --- a/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.txt +++ b/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"products":[{},{"name":"COSMO","lead":{"details":{"forename":"Dustin"}},"repositoryURL":"https://github.com/wundergraph/cosmo","upc":"cosmo"},{"owner":{"details":{"forename":"Jens"}},"clientLanguages":["RUST","TYPESCRIPT"],"unicode":"😀♥!\u0015\u0010🝥","upc":"sdk"}],"productTypes":[{"upc":"cosmo"},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"products":[{},{"name":"COSMO","lead":{"details":{"forename":"Dustin"}},"repositoryURL":"https://github.com/wundergraph/cosmo","upc":"cosmo"},{"owner":{"details":{"forename":"Jens"}},"clientLanguages":["RUST","TYPESCRIPT"],"unicode":"😀♥!\u0015\u0010🝥","upc":"sdk"}],"productTypes":[{"__typename":"Cosmo","upc":"cosmo"},{"__typename":"Consultancy","lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"__typename":"Documentation","url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]}]},"path":[]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred_reconstructed.json index 47df7e194c..cb006baa1f 100644 --- a/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred_reconstructed.json +++ b/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred_reconstructed.json @@ -28,9 +28,11 @@ ], "productTypes": [ { + "__typename": "Cosmo", "upc": "cosmo" }, { + "__typename": "Consultancy", "lead": { "details": { "forename": "Jens" @@ -39,6 +41,7 @@ "name": "CONSULTANCY" }, { + "__typename": "Documentation", "url": "https://cosmo-docs.wundergraph.com/", "urls": [ "https://cal.com/stefan-avram-wundergraph/wundergraph-introduction", diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.txt index c88212cae5..6fa88bc6dd 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"},"isLeadAvailable":false},"path":["products",0]}],"hasNext":false} +{"incremental":[{"data":{"lead":{"__typename":"Employee","id":1,"derivedMood":"HAPPY"},"isLeadAvailable":false},"path":["products",0]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer_reconstructed.json index f67601d48b..e984c43f01 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer_reconstructed.json @@ -4,6 +4,7 @@ { "__typename": "Consultancy", "lead": { + "__typename": "Employee", "id": 1, "derivedMood": "HAPPY" }, diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.txt index 568357bf74..e15cf7b9c9 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} +{"incremental":[{"data":{"lead":{"__typename":"Employee","id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular_reconstructed.json index 4df810f453..45f330ce49 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular_reconstructed.json @@ -5,6 +5,7 @@ "__typename": "Consultancy", "isLeadAvailable": false, "lead": { + "__typename": "Employee", "id": 1, "derivedMood": "HAPPY" } diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.txt index 8cc4e14159..e920efcbc5 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.txt @@ -12,7 +12,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} +{"incremental":[{"data":{"lead":{"__typename":"Employee","id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred_reconstructed.json index 4df810f453..45f330ce49 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred_reconstructed.json @@ -5,6 +5,7 @@ "__typename": "Consultancy", "isLeadAvailable": false, "lead": { + "__typename": "Employee", "id": 1, "derivedMood": "HAPPY" } diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.txt index d2012bcc03..488dc231e1 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"products":[{"lead":{"id":1,"derivedMood":"HAPPY"},"isLeadAvailable":false},{},{}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"products":[{"__typename":"Consultancy","lead":{"__typename":"Employee","id":1,"derivedMood":"HAPPY"},"isLeadAvailable":false},{"__typename":"Cosmo"},{"__typename":"SDK"}]},"path":[]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred_reconstructed.json index 5b8b823088..e984c43f01 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred_reconstructed.json @@ -2,14 +2,20 @@ "data": { "products": [ { + "__typename": "Consultancy", "lead": { + "__typename": "Employee", "id": 1, "derivedMood": "HAPPY" }, "isLeadAvailable": false }, - {}, - {} + { + "__typename": "Cosmo" + }, + { + "__typename": "SDK" + } ] } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.txt index a8cf2f2d2f..64df6dc3bb 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.txt @@ -7,12 +7,12 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"products":[{},{},{}]},"path":[]}],"hasNext":true} +{"incremental":[{"data":{"products":[{"__typename":"Consultancy"},{"__typename":"Cosmo"},{"__typename":"SDK"}]},"path":[]}],"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"},"isLeadAvailable":false},"path":["products",0]}],"hasNext":false} +{"incremental":[{"data":{"lead":{"__typename":"Employee","id":1,"derivedMood":"HAPPY"},"isLeadAvailable":false},"path":["products",0]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer_reconstructed.json index 5b8b823088..e984c43f01 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer_reconstructed.json @@ -2,14 +2,20 @@ "data": { "products": [ { + "__typename": "Consultancy", "lead": { + "__typename": "Employee", "id": 1, "derivedMood": "HAPPY" }, "isLeadAvailable": false }, - {}, - {} + { + "__typename": "Cosmo" + }, + { + "__typename": "SDK" + } ] } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt index 9e76df24b8..b09a2def55 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt @@ -7,12 +7,12 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"products":[{"isLeadAvailable":false},{},{}]},"path":[]}],"hasNext":true} +{"incremental":[{"data":{"products":[{"__typename":"Consultancy","isLeadAvailable":false},{"__typename":"Cosmo"},{"__typename":"SDK"}]},"path":[]}],"hasNext":true} --graphql Content-Type: application/json -{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} +{"incremental":[{"data":{"lead":{"__typename":"Employee","id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation_reconstructed.json index c33eca810d..45f330ce49 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation_reconstructed.json @@ -2,14 +2,20 @@ "data": { "products": [ { + "__typename": "Consultancy", "isLeadAvailable": false, "lead": { + "__typename": "Employee", "id": 1, "derivedMood": "HAPPY" } }, - {}, - {} + { + "__typename": "Cosmo" + }, + { + "__typename": "SDK" + } ] } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt index 8cc4e14159..e920efcbc5 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt @@ -12,7 +12,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} +{"incremental":[{"data":{"lead":{"__typename":"Employee","id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers_reconstructed.json index 4df810f453..45f330ce49 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers_reconstructed.json @@ -5,6 +5,7 @@ "__typename": "Consultancy", "isLeadAvailable": false, "lead": { + "__typename": "Employee", "id": 1, "derivedMood": "HAPPY" } diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt index 69710f8d26..05901b4b44 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"products":[{},{},{}]},"path":[]}],"hasNext":true} +{"incremental":[{"data":{"products":[{"__typename":"Consultancy"},{"__typename":"Cosmo"},{"__typename":"SDK"}]},"path":[]}],"hasNext":true} --graphql Content-Type: application/json @@ -17,7 +17,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"lead":{}},"path":["products",0]}],"hasNext":true} +{"incremental":[{"data":{"lead":{"__typename":"Employee"}},"path":["products",0]}],"hasNext":true} --graphql Content-Type: application/json diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json index 04889327af..b9a411b580 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json @@ -2,13 +2,19 @@ "data": { "products": [ { + "__typename": "Consultancy", "isLeadAvailable": false, "lead": { + "__typename": "Employee", "id": 1 } }, - {}, - {} + { + "__typename": "Cosmo" + }, + { + "__typename": "SDK" + } ] }, "errors": [ diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.txt index beb0af0d86..b6e1b67373 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"isLeadAvailable":false,"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} +{"incremental":[{"data":{"isLeadAvailable":false,"lead":{"__typename":"Employee","id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer_reconstructed.json index 4df810f453..45f330ce49 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer_reconstructed.json @@ -5,6 +5,7 @@ "__typename": "Consultancy", "isLeadAvailable": false, "lead": { + "__typename": "Employee", "id": 1, "derivedMood": "HAPPY" } diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.txt b/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.txt index 4e12ff81e1..10d60e5dc1 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} +{"incremental":[{"data":{"lead":{"__typename":"Employee","id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer_reconstructed.json index f87e954319..cf34d4bd9c 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer_reconstructed.json @@ -3,6 +3,7 @@ "products": [ { "lead": { + "__typename": "Employee", "id": 1, "derivedMood": "HAPPY" } diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.txt b/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.txt index 4e12ff81e1..10d60e5dc1 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} +{"incremental":[{"data":{"lead":{"__typename":"Employee","id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred_reconstructed.json index f87e954319..cf34d4bd9c 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred_reconstructed.json @@ -3,6 +3,7 @@ "products": [ { "lead": { + "__typename": "Employee", "id": 1, "derivedMood": "HAPPY" } diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.txt b/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.txt index 3322d49030..4fa6f36fe5 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"products":[{"lead":{"id":1,"derivedMood":"HAPPY"}},{},{}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"products":[{"lead":{"__typename":"Employee","id":1,"derivedMood":"HAPPY"}},{},{}]},"path":[]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred_reconstructed.json index f87e954319..cf34d4bd9c 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred_reconstructed.json @@ -3,6 +3,7 @@ "products": [ { "lead": { + "__typename": "Employee", "id": 1, "derivedMood": "HAPPY" } diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer.txt b/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer.txt index 6a5e2a52cc..036ad683a4 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer.txt @@ -12,7 +12,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} +{"incremental":[{"data":{"lead":{"__typename":"Employee","id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer_reconstructed.json index f87e954319..cf34d4bd9c 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer_reconstructed.json @@ -3,6 +3,7 @@ "products": [ { "lead": { + "__typename": "Employee", "id": 1, "derivedMood": "HAPPY" } diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.txt b/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.txt index 3322d49030..4fa6f36fe5 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"products":[{"lead":{"id":1,"derivedMood":"HAPPY"}},{},{}]},"path":[]}],"hasNext":false} +{"incremental":[{"data":{"products":[{"lead":{"__typename":"Employee","id":1,"derivedMood":"HAPPY"}},{},{}]},"path":[]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation_reconstructed.json index f87e954319..cf34d4bd9c 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation_reconstructed.json @@ -3,6 +3,7 @@ "products": [ { "lead": { + "__typename": "Employee", "id": 1, "derivedMood": "HAPPY" } diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.txt b/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.txt index 4e12ff81e1..10d60e5dc1 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} +{"incremental":[{"data":{"lead":{"__typename":"Employee","id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers_reconstructed.json index f87e954319..cf34d4bd9c 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers_reconstructed.json @@ -3,6 +3,7 @@ "products": [ { "lead": { + "__typename": "Employee", "id": 1, "derivedMood": "HAPPY" } diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt index 938cdd12b8..8d5713b68f 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt @@ -12,7 +12,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"lead":{}},"path":["products",0]}],"hasNext":true} +{"incremental":[{"data":{"lead":{"__typename":"Employee"}},"path":["products",0]}],"hasNext":true} --graphql Content-Type: application/json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel_reconstructed.json index 755a69add1..c340772506 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel_reconstructed.json @@ -3,6 +3,7 @@ "products": [ { "lead": { + "__typename": "Employee", "id": 1 } }, diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.txt b/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.txt index 4e12ff81e1..10d60e5dc1 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.txt @@ -7,7 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"lead":{"id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} +{"incremental":[{"data":{"lead":{"__typename":"Employee","id":1,"derivedMood":"HAPPY"}},"path":["products",0]}],"hasNext":false} --graphql --graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer_reconstructed.json index f87e954319..cf34d4bd9c 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer_reconstructed.json @@ -3,6 +3,7 @@ "products": [ { "lead": { + "__typename": "Employee", "id": 1, "derivedMood": "HAPPY" } From 911c0cde0322e5e31080d7f6fe0119944265ab62 Mon Sep 17 00:00:00 2001 From: spetrunin Date: Fri, 27 Mar 2026 02:25:14 +0200 Subject: [PATCH 12/23] fix fixtures for same ds requires chain --- ...ent_depth_defer_08_defer_nested_object.txt | 5 +++-- ..._08_defer_nested_object_reconstructed.json | 19 +++------------- ...defer_09_duplicated_field_across_defer.txt | 5 +++-- ...ated_field_across_defer_reconstructed.json | 22 +++++-------------- ...rent_depth_defer_10_extensive_parallel.txt | 5 +++-- ...r_10_extensive_parallel_reconstructed.json | 19 +++------------- ...th_defer_11_fragment_around_and_inside.txt | 5 +++-- ...gment_around_and_inside_reconstructed.json | 19 +++------------- ...ent_depth_defer_12_fragment_body_defer.txt | 5 +++-- ..._12_fragment_body_defer_reconstructed.json | 19 +++------------- ..._defer_02_single_defer_between_regular.txt | 5 +++-- ...e_defer_between_regular_reconstructed.json | 19 +++------------- ...ires_mood_defer_08_defer_nested_object.txt | 5 +++-- ..._08_defer_nested_object_reconstructed.json | 19 +++------------- ...defer_09_duplicated_field_across_defer.txt | 5 +++-- ...ated_field_across_defer_reconstructed.json | 19 +++------------- ...uires_mood_defer_10_extensive_parallel.txt | 5 +++-- ...r_10_extensive_parallel_reconstructed.json | 19 +++------------- ...od_defer_11_fragment_around_and_inside.txt | 5 +++-- ...gment_around_and_inside_reconstructed.json | 19 +++------------- ...ires_mood_defer_12_fragment_body_defer.txt | 5 +++-- ..._12_fragment_body_defer_reconstructed.json | 19 +++------------- 22 files changed, 68 insertions(+), 199 deletions(-) diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.txt index c70b157c4c..531dbedd25 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.txt @@ -7,6 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} +{"incremental":[{"data":{"derivedMood":"HAPPY"},"path":["products",0,"lead"]}],"hasNext":false} ---graphql \ No newline at end of file +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object_reconstructed.json index b9a411b580..45f330ce49 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object_reconstructed.json @@ -6,7 +6,8 @@ "isLeadAvailable": false, "lead": { "__typename": "Employee", - "id": 1 + "id": 1, + "derivedMood": "HAPPY" } }, { @@ -16,19 +17,5 @@ "__typename": "SDK" } ] - }, - "errors": [ - { - "message": "Enum \"Mood\" cannot represent value: \"\"", - "path": [ - "products", - 0, - "lead", - "derivedMood" - ], - "extensions": { - "code": "INTERNAL_SERVER_ERROR" - } - } - ] + } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.txt index 95b12f2de7..84e918035e 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.txt @@ -7,6 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":null,"path":["products",0],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} +{"incremental":[{"data":{"isLeadAvailable":false},"path":["products",0]},{"data":{"derivedMood":"HAPPY"},"path":["products",0,"lead"]}],"hasNext":false} ---graphql \ No newline at end of file +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer_reconstructed.json index 40fa3af72e..e984c43f01 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer_reconstructed.json @@ -5,8 +5,10 @@ "__typename": "Consultancy", "lead": { "__typename": "Employee", - "id": 1 - } + "id": 1, + "derivedMood": "HAPPY" + }, + "isLeadAvailable": false }, { "__typename": "Cosmo" @@ -15,19 +17,5 @@ "__typename": "SDK" } ] - }, - "errors": [ - { - "message": "Enum \"Mood\" cannot represent value: \"\"", - "path": [ - "products", - 0, - "lead", - "derivedMood" - ], - "extensions": { - "code": "INTERNAL_SERVER_ERROR" - } - } - ] + } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt index 05901b4b44..92e5e9b74f 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt @@ -27,6 +27,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} +{"incremental":[{"data":{"derivedMood":"HAPPY"},"path":["products",0,"lead"]}],"hasNext":false} ---graphql \ No newline at end of file +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json index b9a411b580..45f330ce49 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json @@ -6,7 +6,8 @@ "isLeadAvailable": false, "lead": { "__typename": "Employee", - "id": 1 + "id": 1, + "derivedMood": "HAPPY" } }, { @@ -16,19 +17,5 @@ "__typename": "SDK" } ] - }, - "errors": [ - { - "message": "Enum \"Mood\" cannot represent value: \"\"", - "path": [ - "products", - 0, - "lead", - "derivedMood" - ], - "extensions": { - "code": "INTERNAL_SERVER_ERROR" - } - } - ] + } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt index c70b157c4c..531dbedd25 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt @@ -7,6 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} +{"incremental":[{"data":{"derivedMood":"HAPPY"},"path":["products",0,"lead"]}],"hasNext":false} ---graphql \ No newline at end of file +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside_reconstructed.json index b9a411b580..45f330ce49 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside_reconstructed.json @@ -6,7 +6,8 @@ "isLeadAvailable": false, "lead": { "__typename": "Employee", - "id": 1 + "id": 1, + "derivedMood": "HAPPY" } }, { @@ -16,19 +17,5 @@ "__typename": "SDK" } ] - }, - "errors": [ - { - "message": "Enum \"Mood\" cannot represent value: \"\"", - "path": [ - "products", - 0, - "lead", - "derivedMood" - ], - "extensions": { - "code": "INTERNAL_SERVER_ERROR" - } - } - ] + } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.txt b/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.txt index c70b157c4c..531dbedd25 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.txt +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.txt @@ -7,6 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} +{"incremental":[{"data":{"derivedMood":"HAPPY"},"path":["products",0,"lead"]}],"hasNext":false} ---graphql \ No newline at end of file +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer_reconstructed.json index b9a411b580..45f330ce49 100644 --- a/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer_reconstructed.json @@ -6,7 +6,8 @@ "isLeadAvailable": false, "lead": { "__typename": "Employee", - "id": 1 + "id": 1, + "derivedMood": "HAPPY" } }, { @@ -16,19 +17,5 @@ "__typename": "SDK" } ] - }, - "errors": [ - { - "message": "Enum \"Mood\" cannot represent value: \"\"", - "path": [ - "products", - 0, - "lead", - "derivedMood" - ], - "extensions": { - "code": "INTERNAL_SERVER_ERROR" - } - } - ] + } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.txt b/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.txt index 1240695547..79830de216 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.txt @@ -7,6 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} +{"incremental":[{"data":{"derivedMood":"HAPPY"},"path":["products",0,"lead"]}],"hasNext":false} ---graphql \ No newline at end of file +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular_reconstructed.json index c340772506..cf34d4bd9c 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular_reconstructed.json @@ -4,25 +4,12 @@ { "lead": { "__typename": "Employee", - "id": 1 + "id": 1, + "derivedMood": "HAPPY" } }, {}, {} ] - }, - "errors": [ - { - "message": "Enum \"Mood\" cannot represent value: \"\"", - "path": [ - "products", - 0, - "lead", - "derivedMood" - ], - "extensions": { - "code": "INTERNAL_SERVER_ERROR" - } - } - ] + } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.txt b/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.txt index 1240695547..79830de216 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.txt @@ -7,6 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} +{"incremental":[{"data":{"derivedMood":"HAPPY"},"path":["products",0,"lead"]}],"hasNext":false} ---graphql \ No newline at end of file +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object_reconstructed.json index c340772506..cf34d4bd9c 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object_reconstructed.json @@ -4,25 +4,12 @@ { "lead": { "__typename": "Employee", - "id": 1 + "id": 1, + "derivedMood": "HAPPY" } }, {}, {} ] - }, - "errors": [ - { - "message": "Enum \"Mood\" cannot represent value: \"\"", - "path": [ - "products", - 0, - "lead", - "derivedMood" - ], - "extensions": { - "code": "INTERNAL_SERVER_ERROR" - } - } - ] + } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.txt b/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.txt index 1240695547..79830de216 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.txt @@ -7,6 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} +{"incremental":[{"data":{"derivedMood":"HAPPY"},"path":["products",0,"lead"]}],"hasNext":false} ---graphql \ No newline at end of file +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer_reconstructed.json index c340772506..cf34d4bd9c 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer_reconstructed.json @@ -4,25 +4,12 @@ { "lead": { "__typename": "Employee", - "id": 1 + "id": 1, + "derivedMood": "HAPPY" } }, {}, {} ] - }, - "errors": [ - { - "message": "Enum \"Mood\" cannot represent value: \"\"", - "path": [ - "products", - 0, - "lead", - "derivedMood" - ], - "extensions": { - "code": "INTERNAL_SERVER_ERROR" - } - } - ] + } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt index 8d5713b68f..582e5d3975 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt @@ -22,6 +22,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} +{"incremental":[{"data":{"derivedMood":"HAPPY"},"path":["products",0,"lead"]}],"hasNext":false} ---graphql \ No newline at end of file +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel_reconstructed.json index c340772506..cf34d4bd9c 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel_reconstructed.json @@ -4,25 +4,12 @@ { "lead": { "__typename": "Employee", - "id": 1 + "id": 1, + "derivedMood": "HAPPY" } }, {}, {} ] - }, - "errors": [ - { - "message": "Enum \"Mood\" cannot represent value: \"\"", - "path": [ - "products", - 0, - "lead", - "derivedMood" - ], - "extensions": { - "code": "INTERNAL_SERVER_ERROR" - } - } - ] + } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.txt b/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.txt index 1240695547..79830de216 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.txt @@ -7,6 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} +{"incremental":[{"data":{"derivedMood":"HAPPY"},"path":["products",0,"lead"]}],"hasNext":false} ---graphql \ No newline at end of file +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside_reconstructed.json index c340772506..cf34d4bd9c 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside_reconstructed.json @@ -4,25 +4,12 @@ { "lead": { "__typename": "Employee", - "id": 1 + "id": 1, + "derivedMood": "HAPPY" } }, {}, {} ] - }, - "errors": [ - { - "message": "Enum \"Mood\" cannot represent value: \"\"", - "path": [ - "products", - 0, - "lead", - "derivedMood" - ], - "extensions": { - "code": "INTERNAL_SERVER_ERROR" - } - } - ] + } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.txt b/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.txt index 1240695547..79830de216 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.txt +++ b/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.txt @@ -7,6 +7,7 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":null,"path":["products",0,"lead"],"errors":[{"message":"Enum \"Mood\" cannot represent value: \"\"","path":["products",0,"lead","derivedMood"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}]}],"hasNext":false} +{"incremental":[{"data":{"derivedMood":"HAPPY"},"path":["products",0,"lead"]}],"hasNext":false} ---graphql \ No newline at end of file +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer_reconstructed.json b/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer_reconstructed.json index c340772506..cf34d4bd9c 100644 --- a/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer_reconstructed.json @@ -4,25 +4,12 @@ { "lead": { "__typename": "Employee", - "id": 1 + "id": 1, + "derivedMood": "HAPPY" } }, {}, {} ] - }, - "errors": [ - { - "message": "Enum \"Mood\" cannot represent value: \"\"", - "path": [ - "products", - 0, - "lead", - "derivedMood" - ], - "extensions": { - "code": "INTERNAL_SERVER_ERROR" - } - } - ] + } } \ No newline at end of file From 9048150cccf26ee1e6809d1a39a1d3bd1f1764cf Mon Sep 17 00:00:00 2001 From: spetrunin Date: Fri, 27 Mar 2026 03:18:15 +0200 Subject: [PATCH 13/23] fix fixtures for defer sorting fix, fix fragment type condition --- .../products_defer_10_extensive_parallel.txt | 60 +++++++++++++++++- ...r_10_extensive_parallel_reconstructed.json | 50 ++++++++++++++- ...efer_11_fragment_around_and_inside.graphql | 2 +- ...ts_defer_11_fragment_around_and_inside.txt | 16 ++++- ...gment_around_and_inside_reconstructed.json | 61 ++++++++++++++++--- 5 files changed, 174 insertions(+), 15 deletions(-) diff --git a/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.txt index f365ccebe7..dc83d62d0f 100644 --- a/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.txt +++ b/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.txt @@ -12,6 +12,62 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[],"hasNext":false} +{"incremental":[{"data":{"upc":"cosmo"},"path":["products",1]},{"data":{"upc":"sdk"},"path":["products",2]}],"hasNext":true} ---graphql \ No newline at end of file +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"name":"COSMO"},"path":["products",1]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"repositoryURL":"https://github.com/wundergraph/cosmo"},"path":["products",1]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"details":{"forename":"Dustin"}}},"path":["products",1]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"clientLanguages":["RUST","TYPESCRIPT"]},"path":["products",2]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"unicode":"😀♥!\u0015\u0010🝥"},"path":["products",2]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"owner":{"details":{"forename":"Jens"}}},"path":["products",2]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"productTypes":[{"__typename":"Cosmo"},{"__typename":"Consultancy"},{"__typename":"Documentation"}]},"path":[]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"upc":"cosmo"},"path":["productTypes",0]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]},"path":["productTypes",2]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"name":"CONSULTANCY"},"path":["productTypes",1]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"details":{"forename":"Jens"}}},"path":["productTypes",1]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel_reconstructed.json index 9dee16282e..4ecb47963f 100644 --- a/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel_reconstructed.json +++ b/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel_reconstructed.json @@ -2,8 +2,54 @@ "data": { "products": [ {}, - {}, - {} + { + "upc": "cosmo", + "name": "COSMO", + "repositoryURL": "https://github.com/wundergraph/cosmo", + "lead": { + "details": { + "forename": "Dustin" + } + } + }, + { + "upc": "sdk", + "clientLanguages": [ + "RUST", + "TYPESCRIPT" + ], + "unicode": "😀♥!\u0015\u0010🝥", + "owner": { + "details": { + "forename": "Jens" + } + } + } + ], + "productTypes": [ + { + "__typename": "Cosmo", + "upc": "cosmo" + }, + { + "__typename": "Consultancy", + "name": "CONSULTANCY", + "lead": { + "details": { + "forename": "Jens" + } + } + }, + { + "__typename": "Documentation", + "url": "https://cosmo-docs.wundergraph.com/", + "urls": [ + "https://cal.com/stefan-avram-wundergraph/wundergraph-introduction", + "https://github.com/wundergraph/graphql-go-tools/blob/master/README.md", + "N/A", + "https://docs.wundergraph.com/" + ] + } ] } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql index 64f607663e..df06d2be28 100644 --- a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql +++ b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql @@ -10,7 +10,7 @@ fragment SDKDetails on SDK { owner { details { forename } } } -fragment ProductTypeDetails on ProductType { +fragment ProductTypeDetails on Products { ... on IProduct { upc } diff --git a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt index ff5f1e96d6..b58f64c082 100644 --- a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt +++ b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt @@ -2,5 +2,17 @@ --graphql Content-Type: application/json -{"errors":[{"message":"Unknown type \"ProductType\".","path":["ProductType"]}]} ---graphql-- \ No newline at end of file +{"data":{"products":[{},{"name":"COSMO","repositoryURL":"https://github.com/wundergraph/cosmo"},{"clientLanguages":["RUST","TYPESCRIPT"],"unicode":"😀♥!\u0015\u0010🝥","owner":{"details":{"forename":"Jens"}}}],"productTypes":[{"__typename":"Cosmo","upc":"cosmo"},{"__typename":"Consultancy","lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"__typename":"Documentation","url":"https://cosmo-docs.wundergraph.com/","urls":["https://cal.com/stefan-avram-wundergraph/wundergraph-introduction","https://github.com/wundergraph/graphql-go-tools/blob/master/README.md","N/A","https://docs.wundergraph.com/"]}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"upc":"cosmo"},"path":["products",1]},{"data":{"upc":"sdk"},"path":["products",2]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"lead":{"details":{"forename":"Dustin"}}},"path":["products",1]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside_reconstructed.json b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside_reconstructed.json index 064f21c64f..98e61bc62b 100644 --- a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside_reconstructed.json +++ b/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside_reconstructed.json @@ -1,10 +1,55 @@ { - "errors": [ - { - "message": "Unknown type \"ProductType\".", - "path": [ - "ProductType" - ] - } - ] + "data": { + "products": [ + {}, + { + "name": "COSMO", + "repositoryURL": "https://github.com/wundergraph/cosmo", + "upc": "cosmo", + "lead": { + "details": { + "forename": "Dustin" + } + } + }, + { + "clientLanguages": [ + "RUST", + "TYPESCRIPT" + ], + "unicode": "😀♥!\u0015\u0010🝥", + "owner": { + "details": { + "forename": "Jens" + } + }, + "upc": "sdk" + } + ], + "productTypes": [ + { + "__typename": "Cosmo", + "upc": "cosmo" + }, + { + "__typename": "Consultancy", + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "__typename": "Documentation", + "url": "https://cosmo-docs.wundergraph.com/", + "urls": [ + "https://cal.com/stefan-avram-wundergraph/wundergraph-introduction", + "https://github.com/wundergraph/graphql-go-tools/blob/master/README.md", + "N/A", + "https://docs.wundergraph.com/" + ] + } + ] + } } \ No newline at end of file From 826f031f33f0db68e3ca861d094b56b043977029 Mon Sep 17 00:00:00 2001 From: spetrunin Date: Fri, 27 Mar 2026 03:22:27 +0200 Subject: [PATCH 14/23] fix incorrect fragment type condition --- .../full_defer_10_extensive_parallel.txt | 65 +- ...r_10_extensive_parallel_reconstructed.json | 875 ++++++++++++++---- ...efer_11_fragment_around_and_inside.graphql | 2 +- ...ll_defer_11_fragment_around_and_inside.txt | 16 +- ...gment_around_and_inside_reconstructed.json | 736 ++++++++++++++- .../full_defer_12_fragment_body_defer.graphql | 2 +- .../full_defer_12_fragment_body_defer.txt | 11 +- ..._12_fragment_body_defer_reconstructed.json | 736 ++++++++++++++- ...ull_defer_13_fragment_spread_defer.graphql | 2 +- .../full_defer_13_fragment_spread_defer.txt | 11 +- ...3_fragment_spread_defer_reconstructed.json | 736 ++++++++++++++- 11 files changed, 2979 insertions(+), 213 deletions(-) diff --git a/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.txt b/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.txt index 2f3012285e..e56a829b4b 100644 --- a/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.txt +++ b/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.txt @@ -12,6 +12,67 @@ Content-Type: application/json --graphql Content-Type: application/json -{"incremental":[{"data":{"id":4},"path":["teammates",0],"errors":[{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",0,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",1,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",2,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",3,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",4,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",5,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",6,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",7,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",8,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",9,"role"]}]},{"data":{"id":11},"path":["teammates",1],"errors":[{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",0,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",1,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",2,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",3,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",4,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",5,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",6,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",7,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",8,"role"]},{"message":"Cannot return null for non-nullable field 'Query.employees.role'.","path":["employees",9,"role"]}]}],"hasNext":false} +{"incremental":[{"data":{"id":1},"path":["employees",0]},{"data":{"id":2},"path":["employees",1]},{"data":{"id":3},"path":["employees",2]},{"data":{"id":4},"path":["employees",3]},{"data":{"id":5},"path":["employees",4]},{"data":{"id":7},"path":["employees",5]},{"data":{"id":8},"path":["employees",6]},{"data":{"id":10},"path":["employees",7]},{"data":{"id":11},"path":["employees",8]},{"data":{"id":12},"path":["employees",9]}],"hasNext":true} ---graphql \ No newline at end of file +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"notes":"Jens notes resolved by products"},"path":["employees",0]},{"data":{"notes":"Dustin notes resolved by products"},"path":["employees",1]},{"data":{"notes":"Stefan notes resolved by products"},"path":["employees",2]},{"data":{"notes":"Björn notes resolved by products"},"path":["employees",3]},{"data":{"notes":"Sergiy notes resolved by products"},"path":["employees",4]},{"data":{"notes":"Suvij notes resolved by products"},"path":["employees",5]},{"data":{"notes":"Nithin notes resolved by products"},"path":["employees",6]},{"data":{"notes":"Eelco notes resolved by products"},"path":["employees",7]},{"data":{"notes":"Alexandra notes resolved by products"},"path":["employees",8]},{"data":{"notes":"David notes resolved by products"},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null}},"path":["employees",0]},{"data":{"details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null}},"path":["employees",1]},{"data":{"details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]}},"path":["employees",2]},{"data":{"details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]}},"path":["employees",3]},{"data":{"details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]}},"path":["employees",4]},{"data":{"details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null}},"path":["employees",5]},{"data":{"details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null}},"path":["employees",6]},{"data":{"details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]}},"path":["employees",7]},{"data":{"details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null}},"path":["employees",8]},{"data":{"details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]}},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"}},"path":["employees",0]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"}},"path":["employees",1]},{"data":{"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]}},"path":["employees",2]},{"data":{"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]}},"path":["employees",3]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"}},"path":["employees",4]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}},"path":["employees",5]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}},"path":["employees",6]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"}},"path":["employees",7]},{"data":{"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]}},"path":["employees",8]},{"data":{"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"German","key":{"name":"Germany"}}]}]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"Serbian","key":{"name":"Serbia"}}]}]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"German","key":{"name":"Germany"}}]}]},"path":["employees",3]},{"data":{"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German","key":{"name":"Germany"}},{"language":"Indonesian","key":{"name":"Indonesia"}},{"language":"Dutch","key":{"name":"Netherlands"}},{"language":"Portuguese","key":{"name":"Portugal"}},{"language":"Spanish","key":{"name":"Spain"}},{"language":"Thai","key":{"name":"Thailand"}}]}]},"path":["employees",7]},{"data":{"hobbies":[{"name":"Spending time with the family"}]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"Korean","key":{"name":"Korea"}},{"language":"Taiwanese","key":{"name":"Taiwan"}}]}]},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"products":["FINANCE"]},"path":["employees",8]},{"data":{"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"id":1},"path":["employee"]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Jens","location":{"language":"German"}}},"path":["employee"]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"id":4},"path":["teammates",0]},{"data":{"id":11},"path":["teammates",1]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Björn"}},"path":["teammates",0]},{"data":{"details":{"forename":"Alexandra"}},"path":["teammates",1]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["teammates",0]},{"data":{"products":["FINANCE"]},"path":["teammates",1]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Sergiy"}},"path":["a",0]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"details":{"forename":"Björn"}},"path":["b",0]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel_reconstructed.json b/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel_reconstructed.json index 22fd2a0b26..2198cb4313 100644 --- a/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel_reconstructed.json +++ b/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel_reconstructed.json @@ -1,24 +1,697 @@ { "data": { "employees": [ - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {} + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "Serbian", + "key": { + "name": "Serbia" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German", + "key": { + "name": "Germany" + } + }, + { + "language": "Indonesian", + "key": { + "name": "Indonesia" + } + }, + { + "language": "Dutch", + "key": { + "name": "Netherlands" + } + }, + { + "language": "Portuguese", + "key": { + "name": "Portugal" + } + }, + { + "language": "Spanish", + "key": { + "name": "Spain" + } + }, + { + "language": "Thai", + "key": { + "name": "Thailand" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "Korean", + "key": { + "name": "Korea" + } + }, + { + "language": "Taiwanese", + "key": { + "name": "Taiwan" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } ], - "employee": {}, + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + } + }, "teammates": [ { - "id": 4 + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] }, { - "id": 11 + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] } ], "productTypes": [ @@ -40,172 +713,18 @@ } ], "a": [ - {} + { + "details": { + "forename": "Sergiy" + } + } ], "b": [ - {} + { + "details": { + "forename": "Björn" + } + } ] - }, - "errors": [ - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 0, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 1, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 2, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 3, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 4, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 5, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 6, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 7, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 8, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 9, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 0, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 1, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 2, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 3, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 4, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 5, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 6, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 7, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 8, - "role" - ] - }, - { - "message": "Cannot return null for non-nullable field 'Query.employees.role'.", - "path": [ - "employees", - 9, - "role" - ] - } - ] + } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql b/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql index d4f14c8a82..84ebcce542 100644 --- a/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql +++ b/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql @@ -35,7 +35,7 @@ fragment EmployeesFields on Employee { } } -fragment ProductTypesFields on ProductType { +fragment ProductTypesFields on Products { ... on Documentation { url(product: SDK) urls(products: [COSMO, MARKETING]) diff --git a/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt b/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt index ff5f1e96d6..a5ee694819 100644 --- a/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt +++ b/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt @@ -2,5 +2,17 @@ --graphql Content-Type: application/json -{"errors":[{"message":"Unknown type \"ProductType\".","path":["ProductType"]}]} ---graphql-- \ No newline at end of file +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"}},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"}},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]}},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]}},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"}},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"}},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]}},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"Serbian","key":{"name":"Serbia"}}]}],"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German","key":{"name":"Germany"}},{"language":"Indonesian","key":{"name":"Indonesia"}},{"language":"Dutch","key":{"name":"Netherlands"}},{"language":"Portuguese","key":{"name":"Portugal"}},{"language":"Spanish","key":{"name":"Spain"}},{"language":"Thai","key":{"name":"Thailand"}}]}],"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"Korean","key":{"name":"Korea"}},{"language":"Taiwanese","key":{"name":"Taiwan"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]}],"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"productTypes":[{},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://docs.wundergraph.com/","urls":["https://cosmo-docs.wundergraph.com/","https://wundergraph.com/pricing"]}]},"path":[]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside_reconstructed.json b/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside_reconstructed.json index 064f21c64f..40f3103d03 100644 --- a/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside_reconstructed.json +++ b/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside_reconstructed.json @@ -1,10 +1,730 @@ { - "errors": [ - { - "message": "Unknown type \"ProductType\".", - "path": [ - "ProductType" - ] - } - ] + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "Serbian", + "key": { + "name": "Serbia" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German", + "key": { + "name": "Germany" + } + }, + { + "language": "Indonesian", + "key": { + "name": "Indonesia" + } + }, + { + "language": "Dutch", + "key": { + "name": "Netherlands" + } + }, + { + "language": "Portuguese", + "key": { + "name": "Portugal" + } + }, + { + "language": "Spanish", + "key": { + "name": "Spain" + } + }, + { + "language": "Thai", + "key": { + "name": "Thailand" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "Korean", + "key": { + "name": "Korea" + } + }, + { + "language": "Taiwanese", + "key": { + "name": "Taiwan" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ], + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + } + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ], + "a": [ + { + "details": { + "forename": "Sergiy" + } + } + ], + "b": [ + { + "details": { + "forename": "Björn" + } + } + ], + "productTypes": [ + {}, + { + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "url": "https://docs.wundergraph.com/", + "urls": [ + "https://cosmo-docs.wundergraph.com/", + "https://wundergraph.com/pricing" + ] + } + ] + } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql b/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql index 26499b2d8e..087194c021 100644 --- a/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql +++ b/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql @@ -35,7 +35,7 @@ fragment EmployeesFields on Employee { } } -fragment ProductTypesFields on ProductType { +fragment ProductTypesFields on Products { ... on Documentation { url(product: SDK) urls(products: [COSMO, MARKETING]) diff --git a/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.txt b/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.txt index ff5f1e96d6..48ce25d494 100644 --- a/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.txt +++ b/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.txt @@ -2,5 +2,12 @@ --graphql Content-Type: application/json -{"errors":[{"message":"Unknown type \"ProductType\".","path":["ProductType"]}]} ---graphql-- \ No newline at end of file +{"data":{"employees":[{"id":1,"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"}},{"id":2,"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"}},{"id":3,"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]}},{"id":4,"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]}},{"id":5,"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"}},{"id":7,"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}},{"id":8,"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}},{"id":10,"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"}},{"id":11,"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]}},{"id":12,"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"}}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"productTypes":[{},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://docs.wundergraph.com/","urls":["https://cosmo-docs.wundergraph.com/","https://wundergraph.com/pricing"]}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"Serbian","key":{"name":"Serbia"}}]}],"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German","key":{"name":"Germany"}},{"language":"Indonesian","key":{"name":"Indonesia"}},{"language":"Dutch","key":{"name":"Netherlands"}},{"language":"Portuguese","key":{"name":"Portugal"}},{"language":"Spanish","key":{"name":"Spain"}},{"language":"Thai","key":{"name":"Thailand"}}]}],"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},"path":["employees",8]},{"data":{"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"Korean","key":{"name":"Korea"}},{"language":"Taiwanese","key":{"name":"Taiwan"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer_reconstructed.json b/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer_reconstructed.json index 064f21c64f..2198cb4313 100644 --- a/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer_reconstructed.json @@ -1,10 +1,730 @@ { - "errors": [ - { - "message": "Unknown type \"ProductType\".", - "path": [ - "ProductType" - ] - } - ] + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "Serbian", + "key": { + "name": "Serbia" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German", + "key": { + "name": "Germany" + } + }, + { + "language": "Indonesian", + "key": { + "name": "Indonesia" + } + }, + { + "language": "Dutch", + "key": { + "name": "Netherlands" + } + }, + { + "language": "Portuguese", + "key": { + "name": "Portugal" + } + }, + { + "language": "Spanish", + "key": { + "name": "Spain" + } + }, + { + "language": "Thai", + "key": { + "name": "Thailand" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "Korean", + "key": { + "name": "Korea" + } + }, + { + "language": "Taiwanese", + "key": { + "name": "Taiwan" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ], + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + } + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ], + "productTypes": [ + {}, + { + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "url": "https://docs.wundergraph.com/", + "urls": [ + "https://cosmo-docs.wundergraph.com/", + "https://wundergraph.com/pricing" + ] + } + ], + "a": [ + { + "details": { + "forename": "Sergiy" + } + } + ], + "b": [ + { + "details": { + "forename": "Björn" + } + } + ] + } } \ No newline at end of file diff --git a/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql b/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql index 18fd7a5d04..b4948ee57d 100644 --- a/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql +++ b/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql @@ -33,7 +33,7 @@ fragment EmployeesFields on Employee { products } -fragment ProductTypesFields on ProductType { +fragment ProductTypesFields on Products { ... on Documentation { url(product: SDK) urls(products: [COSMO, MARKETING]) diff --git a/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt b/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt index ff5f1e96d6..ffb8e2c53d 100644 --- a/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt +++ b/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt @@ -2,5 +2,12 @@ --graphql Content-Type: application/json -{"errors":[{"message":"Unknown type \"ProductType\".","path":["ProductType"]}]} ---graphql-- \ No newline at end of file +{"data":{"employees":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":7},{"id":8},{"id":10},{"id":11},{"id":12}],"employee":{"id":1,"details":{"forename":"Jens","location":{"language":"German"}}},"teammates":[{"id":4,"details":{"forename":"Björn"},"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},{"id":11,"details":{"forename":"Alexandra"},"products":["FINANCE"]}],"productTypes":[{},{"lead":{"details":{"forename":"Jens"}},"name":"CONSULTANCY"},{"url":"https://docs.wundergraph.com/","urls":["https://cosmo-docs.wundergraph.com/","https://wundergraph.com/pricing"]}],"a":[{"details":{"forename":"Sergiy"}}],"b":[{"details":{"forename":"Björn"}}]},"hasNext":true} + +--graphql +Content-Type: application/json + +{"incremental":[{"data":{"notes":"Jens notes resolved by products","details":{"forename":"Jens","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING","MARKETING"],"title":["Founder","CEO"],"engineerType":"BACKEND"},"hobbies":[{"category":"SPORT"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":20},{"name":"WunderGraph"},{"languages":["GO","TYPESCRIPT"]},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","MARKETING","SDK"]},"path":["employees",0]},{"data":{"notes":"Dustin notes resolved by products","details":{"forename":"Dustin","surname":"Deus","location":{"language":"German"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"GERMAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Co-founder","Tech Lead"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["FPS"],"name":"Counter Strike","yearsOfExperience":0.5},{"languages":["GO","RUST"]}],"products":["COSMO","SDK"]},"path":["employees",1]},{"data":{"notes":"Stefan notes resolved by products","details":{"forename":"Stefan","surname":"Avram","location":{"language":"English"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"AMERICAN","pets":[{"class":"REPTILE","gender":"UNKNOWN","name":"Snappy","dangerous":"yes"}]},"role":{"departments":["MARKETING"],"title":["Co-founder","Head of Growth"]},"hobbies":[{"category":"HIKING"},{"category":"SPORT"},{"name":"Reading"},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"Serbian","key":{"name":"Serbia"}}]}],"products":["CONSULTANCY","MARKETING"]},"path":["employees",2]},{"data":{"notes":"Björn notes resolved by products","details":{"forename":"Björn","surname":"Schwenzer","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Abby","breed":"GOLDEN_RETRIEVER"},{"class":"MAMMAL","gender":"MALE","name":"Survivor"}]},"role":{"departments":["OPERATIONS","MARKETING"],"title":["Co-founder","COO"],"operatorType":["HUMAN_RESOURCES","FINANCE"]},"hobbies":[{"category":"HIKING"},{"planeModels":["Aquila AT01","Cessna C172","Cessna C206","Cirrus SR20","Cirrus SR22","Diamond DA40","Diamond HK36","Diamond DA20","Piper Cub","Pitts Special","Robin DR400"],"yearsOfExperience":20},{"countriesLived":[{"language":"English","key":{"name":"America"}},{"language":"German","key":{"name":"Germany"}}]}],"products":["FINANCE","HUMAN_RESOURCES","MARKETING"]},"path":["employees",3]},{"data":{"notes":"Sergiy notes resolved by products","details":{"forename":"Sergiy","surname":"Petrunin","location":{"language":"Ukrainian"},"hasChildren":false,"maritalStatus":"ENGAGED","nationality":"UKRAINIAN","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Blotch","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Grayone","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Rusty","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Manya","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Peach","type":"STREET"},{"class":"MAMMAL","gender":"MALE","name":"Panda","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Mommy","type":"STREET"},{"class":"MAMMAL","gender":"FEMALE","name":"Terry","type":"HOME"},{"class":"MAMMAL","gender":"FEMALE","name":"Tilda","type":"HOME"},{"class":"MAMMAL","gender":"MALE","name":"Vasya","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Senior GO Engineer"],"engineerType":"BACKEND"},"hobbies":[{"name":"Building a house"},{"name":"Forumla 1"},{"name":"Raising cats"}],"products":["ENGINE","SDK"]},"path":["employees",4]},{"data":{"notes":"Suvij notes resolved by products","details":{"forename":"Suvij","surname":"Surya","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"genres":["BOARD"],"name":"Chess","yearsOfExperience":9.5},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",5]},{"data":{"notes":"Nithin notes resolved by products","details":{"forename":"Nithin","surname":"Kumar","location":{"language":"Hindi"},"hasChildren":false,"maritalStatus":null,"nationality":"INDIAN","pets":null},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":17},{"name":"Watching anime"}],"products":["COSMO","SDK"]},"path":["employees",6]},{"data":{"notes":"Eelco notes resolved by products","details":{"forename":"Eelco","surname":"Wiersma","location":{"language":"Dutch"},"hasChildren":false,"maritalStatus":null,"nationality":"DUTCH","pets":[{"class":"MAMMAL","gender":"UNKNOWN","name":"Vanson"}]},"role":{"departments":["ENGINEERING"],"title":["Senior Frontend Engineer"],"engineerType":"FRONTEND"},"hobbies":[{"languages":["TYPESCRIPT"]},{"category":"CALISTHENICS"},{"category":"HIKING"},{"category":"STRENGTH_TRAINING"},{"name":"saas-ui"},{"countriesLived":[{"language":"German","key":{"name":"Germany"}},{"language":"Indonesian","key":{"name":"Indonesia"}},{"language":"Dutch","key":{"name":"Netherlands"}},{"language":"Portuguese","key":{"name":"Portugal"}},{"language":"Spanish","key":{"name":"Spain"}},{"language":"Thai","key":{"name":"Thailand"}}]}],"products":["CONSULTANCY","COSMO","SDK"]},"path":["employees",7]},{"data":{"notes":"Alexandra notes resolved by products","details":{"forename":"Alexandra","surname":"Neuse","location":{"language":"German"},"hasChildren":true,"maritalStatus":"MARRIED","nationality":"GERMAN","pets":null},"role":{"departments":["OPERATIONS"],"title":["Accounting & Finance"],"operatorType":["FINANCE"]},"hobbies":[{"name":"Spending time with the family"}],"products":["FINANCE"]},"path":["employees",8]},{"data":{"notes":"David notes resolved by products","details":{"forename":"David","surname":"Stutt","location":{"language":"English"},"hasChildren":false,"maritalStatus":"MARRIED","nationality":"ENGLISH","pets":[{"class":"MAMMAL","gender":"FEMALE","name":"Pepper","type":"HOME"}]},"role":{"departments":["ENGINEERING"],"title":["Software Engineer"],"engineerType":"FULLSTACK"},"hobbies":[{"languages":["CSHARP","GO","RUST","TYPESCRIPT"]},{"category":"STRENGTH_TRAINING"},{"genres":["ADVENTURE","BOARD","CARD","ROGUELITE","RPG","SIMULATION","STRATEGY"],"name":"Miscellaneous","yearsOfExperience":25.5},{"countriesLived":[{"language":"English","key":{"name":"England"}},{"language":"Korean","key":{"name":"Korea"}},{"language":"Taiwanese","key":{"name":"Taiwan"}}]}],"products":["CONSULTANCY","COSMO","ENGINE","SDK"]},"path":["employees",9]}],"hasNext":false} + +--graphql +--graphql-- diff --git a/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer_reconstructed.json b/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer_reconstructed.json index 064f21c64f..2198cb4313 100644 --- a/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer_reconstructed.json +++ b/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer_reconstructed.json @@ -1,10 +1,730 @@ { - "errors": [ - { - "message": "Unknown type \"ProductType\".", - "path": [ - "ProductType" - ] - } - ] + "data": { + "employees": [ + { + "id": 1, + "notes": "Jens notes resolved by products", + "details": { + "forename": "Jens", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING", + "MARKETING" + ], + "title": [ + "Founder", + "CEO" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "category": "SPORT" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 20 + }, + { + "name": "WunderGraph" + }, + { + "languages": [ + "GO", + "TYPESCRIPT" + ] + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "MARKETING", + "SDK" + ] + }, + { + "id": 2, + "notes": "Dustin notes resolved by products", + "details": { + "forename": "Dustin", + "surname": "Deus", + "location": { + "language": "German" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Co-founder", + "Tech Lead" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "FPS" + ], + "name": "Counter Strike", + "yearsOfExperience": 0.5 + }, + { + "languages": [ + "GO", + "RUST" + ] + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 3, + "notes": "Stefan notes resolved by products", + "details": { + "forename": "Stefan", + "surname": "Avram", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "AMERICAN", + "pets": [ + { + "class": "REPTILE", + "gender": "UNKNOWN", + "name": "Snappy", + "dangerous": "yes" + } + ] + }, + "role": { + "departments": [ + "MARKETING" + ], + "title": [ + "Co-founder", + "Head of Growth" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "category": "SPORT" + }, + { + "name": "Reading" + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "Serbian", + "key": { + "name": "Serbia" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "MARKETING" + ] + }, + { + "id": 4, + "notes": "Björn notes resolved by products", + "details": { + "forename": "Björn", + "surname": "Schwenzer", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Abby", + "breed": "GOLDEN_RETRIEVER" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Survivor" + } + ] + }, + "role": { + "departments": [ + "OPERATIONS", + "MARKETING" + ], + "title": [ + "Co-founder", + "COO" + ], + "operatorType": [ + "HUMAN_RESOURCES", + "FINANCE" + ] + }, + "hobbies": [ + { + "category": "HIKING" + }, + { + "planeModels": [ + "Aquila AT01", + "Cessna C172", + "Cessna C206", + "Cirrus SR20", + "Cirrus SR22", + "Diamond DA40", + "Diamond HK36", + "Diamond DA20", + "Piper Cub", + "Pitts Special", + "Robin DR400" + ], + "yearsOfExperience": 20 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "America" + } + }, + { + "language": "German", + "key": { + "name": "Germany" + } + } + ] + } + ], + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 5, + "notes": "Sergiy notes resolved by products", + "details": { + "forename": "Sergiy", + "surname": "Petrunin", + "location": { + "language": "Ukrainian" + }, + "hasChildren": false, + "maritalStatus": "ENGAGED", + "nationality": "UKRAINIAN", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Blotch", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Grayone", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Rusty", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Manya", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Peach", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Panda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Mommy", + "type": "STREET" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Terry", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Tilda", + "type": "HOME" + }, + { + "class": "MAMMAL", + "gender": "MALE", + "name": "Vasya", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior GO Engineer" + ], + "engineerType": "BACKEND" + }, + "hobbies": [ + { + "name": "Building a house" + }, + { + "name": "Forumla 1" + }, + { + "name": "Raising cats" + } + ], + "products": [ + "ENGINE", + "SDK" + ] + }, + { + "id": 7, + "notes": "Suvij notes resolved by products", + "details": { + "forename": "Suvij", + "surname": "Surya", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "genres": [ + "BOARD" + ], + "name": "Chess", + "yearsOfExperience": 9.5 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 8, + "notes": "Nithin notes resolved by products", + "details": { + "forename": "Nithin", + "surname": "Kumar", + "location": { + "language": "Hindi" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "INDIAN", + "pets": null + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 17 + }, + { + "name": "Watching anime" + } + ], + "products": [ + "COSMO", + "SDK" + ] + }, + { + "id": 10, + "notes": "Eelco notes resolved by products", + "details": { + "forename": "Eelco", + "surname": "Wiersma", + "location": { + "language": "Dutch" + }, + "hasChildren": false, + "maritalStatus": null, + "nationality": "DUTCH", + "pets": [ + { + "class": "MAMMAL", + "gender": "UNKNOWN", + "name": "Vanson" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Senior Frontend Engineer" + ], + "engineerType": "FRONTEND" + }, + "hobbies": [ + { + "languages": [ + "TYPESCRIPT" + ] + }, + { + "category": "CALISTHENICS" + }, + { + "category": "HIKING" + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "name": "saas-ui" + }, + { + "countriesLived": [ + { + "language": "German", + "key": { + "name": "Germany" + } + }, + { + "language": "Indonesian", + "key": { + "name": "Indonesia" + } + }, + { + "language": "Dutch", + "key": { + "name": "Netherlands" + } + }, + { + "language": "Portuguese", + "key": { + "name": "Portugal" + } + }, + { + "language": "Spanish", + "key": { + "name": "Spain" + } + }, + { + "language": "Thai", + "key": { + "name": "Thailand" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "SDK" + ] + }, + { + "id": 11, + "notes": "Alexandra notes resolved by products", + "details": { + "forename": "Alexandra", + "surname": "Neuse", + "location": { + "language": "German" + }, + "hasChildren": true, + "maritalStatus": "MARRIED", + "nationality": "GERMAN", + "pets": null + }, + "role": { + "departments": [ + "OPERATIONS" + ], + "title": [ + "Accounting & Finance" + ], + "operatorType": [ + "FINANCE" + ] + }, + "hobbies": [ + { + "name": "Spending time with the family" + } + ], + "products": [ + "FINANCE" + ] + }, + { + "id": 12, + "notes": "David notes resolved by products", + "details": { + "forename": "David", + "surname": "Stutt", + "location": { + "language": "English" + }, + "hasChildren": false, + "maritalStatus": "MARRIED", + "nationality": "ENGLISH", + "pets": [ + { + "class": "MAMMAL", + "gender": "FEMALE", + "name": "Pepper", + "type": "HOME" + } + ] + }, + "role": { + "departments": [ + "ENGINEERING" + ], + "title": [ + "Software Engineer" + ], + "engineerType": "FULLSTACK" + }, + "hobbies": [ + { + "languages": [ + "CSHARP", + "GO", + "RUST", + "TYPESCRIPT" + ] + }, + { + "category": "STRENGTH_TRAINING" + }, + { + "genres": [ + "ADVENTURE", + "BOARD", + "CARD", + "ROGUELITE", + "RPG", + "SIMULATION", + "STRATEGY" + ], + "name": "Miscellaneous", + "yearsOfExperience": 25.5 + }, + { + "countriesLived": [ + { + "language": "English", + "key": { + "name": "England" + } + }, + { + "language": "Korean", + "key": { + "name": "Korea" + } + }, + { + "language": "Taiwanese", + "key": { + "name": "Taiwan" + } + } + ] + } + ], + "products": [ + "CONSULTANCY", + "COSMO", + "ENGINE", + "SDK" + ] + } + ], + "employee": { + "id": 1, + "details": { + "forename": "Jens", + "location": { + "language": "German" + } + } + }, + "teammates": [ + { + "id": 4, + "details": { + "forename": "Björn" + }, + "products": [ + "FINANCE", + "HUMAN_RESOURCES", + "MARKETING" + ] + }, + { + "id": 11, + "details": { + "forename": "Alexandra" + }, + "products": [ + "FINANCE" + ] + } + ], + "productTypes": [ + {}, + { + "lead": { + "details": { + "forename": "Jens" + } + }, + "name": "CONSULTANCY" + }, + { + "url": "https://docs.wundergraph.com/", + "urls": [ + "https://cosmo-docs.wundergraph.com/", + "https://wundergraph.com/pricing" + ] + } + ], + "a": [ + { + "details": { + "forename": "Sergiy" + } + } + ], + "b": [ + { + "details": { + "forename": "Björn" + } + } + ] + } } \ No newline at end of file From 7eafeba46904587a6a7ee530592f00d4e29f511d Mon Sep 17 00:00:00 2001 From: spetrunin Date: Fri, 27 Mar 2026 03:27:44 +0200 Subject: [PATCH 15/23] save full structure of defer test --- router-tests/defer_test.go | 181 +++++++++++++++++++++++-------------- 1 file changed, 112 insertions(+), 69 deletions(-) diff --git a/router-tests/defer_test.go b/router-tests/defer_test.go index cab8c392a7..e0b8f04792 100644 --- a/router-tests/defer_test.go +++ b/router-tests/defer_test.go @@ -8,6 +8,7 @@ import ( "net/http" "os" "path/filepath" + "slices" "strings" "testing" @@ -27,6 +28,8 @@ func TestDeferTestDataQueries(t *testing.T) { entries, err := os.ReadDir(testDir) require.NoError(t, err) + groupQueries := map[string][]string{} + for _, entry := range entries { fileName := entry.Name() ext := filepath.Ext(fileName) @@ -42,89 +45,129 @@ func TestDeferTestDataQueries(t *testing.T) { continue } - t.Run(name, func(t *testing.T) { - t.Parallel() - - gMultipart := goldie.New( - t, - goldie.WithFixtureDir("testdata/queries_defer"), - goldie.WithNameSuffix(".txt"), - goldie.WithDiffEngine(goldie.ClassicDiff), - ) - gFull := goldie.New( - t, - goldie.WithFixtureDir("testdata/queries_defer"), - goldie.WithNameSuffix(".json"), - goldie.WithDiffEngine(goldie.ClassicDiff), - ) - - testenv.Run(t, &testenv.Config{ - NoRetryClient: true, - ModifyEngineExecutionConfiguration: func(cfg *config.EngineExecutionConfiguration) { - cfg.Debug.PrintIntermediateQueryPlans = true - }, - }, func(t *testing.T, xEnv *testenv.Environment) { - queryFilePath := filepath.Join(testDir, fmt.Sprintf("%s.graphql", name)) - t.Cleanup(func() { - if t.Failed() { - abs, _ := filepath.Abs(queryFilePath) - t.Logf("query file: %s", abs) - } - }) - - queryData, err := os.ReadFile(queryFilePath) - require.NoError(t, err) - - payload := map[string]any{"query": string(queryData)} - payloadData, err := json.Marshal(payload) - require.NoError(t, err) - - req := xEnv.MakeGraphQLDeferRequest(http.MethodPost, bytes.NewReader(payloadData)) - res, err := xEnv.RouterClient.Do(req) - require.NoError(t, err) - defer func() { require.NoError(t, res.Body.Close()) }() + groupQueries[source] = append(groupQueries[source], name) + } - assert.Equal(t, http.StatusOK, res.StatusCode) + groups := make([]string, 0, len(groupQueries)) + for k, _ := range groupQueries { + groups = append(groups, k) + } + slices.Sort(groups) + + for _, group := range groups { + t.Run(group, func(t *testing.T) { + for _, name := range groupQueries[group] { + t.Run(name, func(t *testing.T) { + // t.Parallel() + + gMultipart := goldie.New( + t, + goldie.WithFixtureDir("testdata/queries_defer"), + goldie.WithNameSuffix(".txt"), + goldie.WithDiffEngine(goldie.ClassicDiff), + ) + gFull := goldie.New( + t, + goldie.WithFixtureDir("testdata/queries_defer"), + goldie.WithNameSuffix(".json"), + goldie.WithDiffEngine(goldie.ClassicDiff), + ) + + testenv.Run(t, &testenv.Config{ + NoRetryClient: true, + ModifyEngineExecutionConfiguration: func(cfg *config.EngineExecutionConfiguration) { + cfg.Debug.PrintIntermediateQueryPlans = true + cfg.Debug.PrintPlanningPaths = true + // cfg.Debug.PrintNodeSuggestions = true + cfg.Debug.PrintOperationTransformations = true + }, + }, func(t *testing.T, xEnv *testenv.Environment) { + queryFilePath := filepath.Join(testDir, fmt.Sprintf("%s.graphql", name)) + t.Cleanup(func() { + if t.Failed() { + abs, _ := filepath.Abs(queryFilePath) + t.Logf("query file: %s", abs) + } + }) + + queryData, err := os.ReadFile(queryFilePath) + require.NoError(t, err) - // defer could be fully discarded in case query has duplicate field which are not deffered - isMultipart := strings.HasPrefix(res.Header.Get("Content-Type"), "multipart/mixed") + payload := map[string]any{"query": string(queryData)} + payloadData, err := json.Marshal(payload) + require.NoError(t, err) - body, err := io.ReadAll(res.Body) - require.NoError(t, err) + req := xEnv.MakeGraphQLDeferRequest(http.MethodPost, bytes.NewReader(payloadData)) + res, err := xEnv.RouterClient.Do(req) + require.NoError(t, err) + defer func() { require.NoError(t, res.Body.Close()) }() - t.Run("raw multipart body", func(t *testing.T) { - gMultipart.Assert(t, name, body) - }) + assert.Equal(t, http.StatusOK, res.StatusCode) - t.Run("full response", func(t *testing.T) { - var actual []byte + // defer could be fully discarded in case query has duplicate field which are not deffered + isMultipart := strings.HasPrefix(res.Header.Get("Content-Type"), "multipart/mixed") - if isMultipart { - // Reconstruct the full response from chunks - reconstructed, err := reconstructDeferResponse(body) + body, err := io.ReadAll(res.Body) require.NoError(t, err) - actual = normalizeJSON(t, reconstructed) - } else { - actual = normalizeJSON(t, body) - } - - gFull.Assert(t, name+"_reconstructed", actual) - // compare with original - if false { - expected, err := os.ReadFile(gFull.GoldenFileName(t, source+"_original")) - require.NoError(t, err) - // manually assert to never update the original when the update flag is specified - if diff := goldie.Diff(goldie.ClassicDiff, string(actual), string(expected)); diff != "" { - t.Fatal(diff) + update := false + + t.Run("raw multipart body", func(t *testing.T) { + if !update { + gMultipart.Assert(t, name, body) + } else { + gMultipart.Update(t, name, body) + } + }) + + var actual []byte + + if isMultipart { + // Reconstruct the full response from chunks + reconstructed, err := reconstructDeferResponse(body) + require.NoError(t, err) + actual = normalizeJSON(t, reconstructed) + } else { + actual = normalizeJSON(t, body) } - } + + t.Run("assert full response", func(t *testing.T) { + if !update { + gFull.Assert(t, name+"_reconstructed", actual) + } else { + gFull.Update(t, name+"_reconstructed", actual) + } + }) + + t.Run("compare with response without defer", func(t *testing.T) { + expected, err := os.ReadFile(gFull.GoldenFileName(t, group+"_original")) + require.NoError(t, err) + + expected = normalizeWithKeysSort(t, expected) + actual = normalizeWithKeysSort(t, actual) + + // manually assert to never update the original when the update flag is specified + if diff := goldie.Diff(goldie.ClassicDiff, string(actual), string(expected)); diff != "" { + t.Fatal(diff) + } + }) + }) }) - }) + } }) } } +func normalizeWithKeysSort(tb testing.TB, data []byte) []byte { + var val map[string]interface{} + require.NoError(tb, json.Unmarshal(data, &val)) + + out, err := json.MarshalIndent(val, "", " ") + require.NoError(tb, err) + + return out +} + // reconstructDeferResponse parses a multipart/mixed defer body, merges all // incremental patches onto the initial data using astjson, and returns // the complete JSON response (without transport fields like hasNext). From 5af29f403211a5d48a14d795b12916de693f61a5 Mon Sep 17 00:00:00 2001 From: spetrunin Date: Fri, 27 Mar 2026 03:28:41 +0200 Subject: [PATCH 16/23] TMP: always print query plan --- router/core/graphql_prehandler.go | 11 +++++++++++ router/core/operation_planner.go | 17 +++++++++++------ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/router/core/graphql_prehandler.go b/router/core/graphql_prehandler.go index 8c6bbb0af6..96dd178972 100644 --- a/router/core/graphql_prehandler.go +++ b/router/core/graphql_prehandler.go @@ -1147,6 +1147,17 @@ func (h *PreHandler) handleOperation(req *http.Request, httpOperation *httpOpera requestContext.telemetry.ReleaseAttributes(&planningAttrs) + var printedPlan string + switch p := requestContext.operation.preparedPlan.preparedPlan.(type) { + case *plan.SynchronousResponsePlan: + printedPlan = p.Response.Fetches.QueryPlan().PrettyPrint() + case *plan.SubscriptionResponsePlan: + printedPlan = p.Response.Response.Fetches.QueryPlan().PrettyPrint() + case *plan.DeferResponsePlan: + printedPlan = p.Response.QueryPlanString() + } + fmt.Println("response plan:", printedPlan) + // we could log the query plan only if query plans are calculated if (h.queryPlansEnabled && requestContext.operation.executionOptions.IncludeQueryPlanInResponse) || h.alwaysIncludeQueryPlan { diff --git a/router/core/operation_planner.go b/router/core/operation_planner.go index f9da57396f..195b026f9f 100644 --- a/router/core/operation_planner.go +++ b/router/core/operation_planner.go @@ -81,12 +81,17 @@ func (p *OperationPlanner) planOperation(content string, name string, includeQue return nil, err } - var preparedPlan plan.Plan - if includeQueryPlan { - preparedPlan = planner.Plan(&doc, p.executor.RouterSchema, name, &report, plan.IncludeQueryPlanInResponse()) - } else { - preparedPlan = planner.Plan(&doc, p.executor.RouterSchema, name, &report) - } + var ( + preparedPlan plan.Plan + ) + + // create and postprocess the plan + // planning uses the router schema + // if ctx.executionOptions.IncludeQueryPlanInResponse { + preparedPlan = planner.Plan(&doc, p.executor.RouterSchema, ctx.name, &report, plan.IncludeQueryPlanInResponse()) + // } else { + // preparedPlan = planner.Plan(&doc, p.executor.RouterSchema, ctx.name, &report) + // } if report.HasErrors() { return nil, &reportError{report: &report} } From ce9b7f524d1c48f76439dbd8bbea213218a87385 Mon Sep 17 00:00:00 2001 From: spetrunin Date: Fri, 27 Mar 2026 04:02:28 +0200 Subject: [PATCH 17/23] tmp: add plan wrapper to generate defer query plans --- router/core/plan_generator.go | 46 +++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/router/core/plan_generator.go b/router/core/plan_generator.go index 79465bd12e..76ddd08666 100644 --- a/router/core/plan_generator.go +++ b/router/core/plan_generator.go @@ -111,7 +111,7 @@ func (pl *Planner) PlanOperation(operationFilePath string, outputFormat PlanOutp case PlanOutputFormatText: return rawPlan.PrettyPrint(), opTimes, nil case PlanOutputFormatJSON: - marshal, err := json.Marshal(rawPlan) + marshal, err := rawPlan.Marshal() if err != nil { return "", opTimes, fmt.Errorf("failed to marshal raw plan: %w", err) } @@ -181,6 +181,7 @@ func (pl *Planner) normalizeOperation(operation *ast.Document, operationName []b astnormalization.WithInlineFragmentSpreads(), astnormalization.WithRemoveUnusedVariables(), astnormalization.WithIgnoreSkipInclude(), + astnormalization.WithInlineDefer(), ) normalizer.NormalizeNamedOperation(operation, pl.definition, operationName, &report) if report.HasErrors() { @@ -196,8 +197,40 @@ func (pl *Planner) normalizeOperation(operation *ast.Document, operationName []b return nil } +type PlanWrapper struct { + Plan plan.Plan +} + +func (p *PlanWrapper) PrettyPrint() string { + switch p := p.Plan.(type) { + case *plan.SynchronousResponsePlan: + + return p.Response.Fetches.QueryPlan().PrettyPrint() + case *plan.SubscriptionResponsePlan: + return p.Response.Response.Fetches.QueryPlan().PrettyPrint() + case *plan.DeferResponsePlan: + return p.Response.QueryPlanString() + } + + return "" +} + +func (p *PlanWrapper) Marshal() ([]byte, error) { + switch p := p.Plan.(type) { + case *plan.SynchronousResponsePlan: + + return json.Marshal(p.Response.Fetches.QueryPlan()) + case *plan.SubscriptionResponsePlan: + return json.Marshal(p.Response.Response.Fetches.QueryPlan()) + case *plan.DeferResponsePlan: + return nil, errors.New("defer marshal unsupported yet") + } + + return nil, nil +} + // PlanPreparedOperation creates a query plan from a normalized and validated operation -func (pl *Planner) PlanPreparedOperation(operation *ast.Document) (planNode *resolve.FetchTreeQueryPlanNode, opTimes OperationTimes, err error) { +func (pl *Planner) PlanPreparedOperation(operation *ast.Document) (planNode *PlanWrapper, opTimes OperationTimes, err error) { defer func() { if r := recover(); r != nil { err = fmt.Errorf("panic during plan generation: %v", r) @@ -225,14 +258,7 @@ func (pl *Planner) PlanPreparedOperation(operation *ast.Document) (planNode *res // measure postprocessing time as part of planning time opTimes.PlanTime = time.Since(start) - switch p := preparedPlan.(type) { - case *plan.SynchronousResponsePlan: - return p.Response.Fetches.QueryPlan(), opTimes, nil - case *plan.SubscriptionResponsePlan: - return p.Response.Response.Fetches.QueryPlan(), opTimes, nil - } - - return &resolve.FetchTreeQueryPlanNode{}, opTimes, nil + return &PlanWrapper{preparedPlan}, opTimes, nil } func (pl *Planner) validateOperation(operation *ast.Document) (err error) { From 0daa866c38a6d6e223d22d28bd0694185fa172d2 Mon Sep 17 00:00:00 2001 From: spetrunin Date: Tue, 7 Apr 2026 21:29:38 +0300 Subject: [PATCH 18/23] chore: fix syntax error after rebase --- router/core/operation_planner.go | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/router/core/operation_planner.go b/router/core/operation_planner.go index 195b026f9f..68c3426930 100644 --- a/router/core/operation_planner.go +++ b/router/core/operation_planner.go @@ -7,14 +7,15 @@ import ( "golang.org/x/sync/singleflight" - graphqlmetricsv1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/graphqlmetrics/v1" - "github.com/wundergraph/cosmo/router/pkg/graphqlschemausage" - "github.com/wundergraph/cosmo/router/pkg/slowplancache" "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" "github.com/wundergraph/graphql-go-tools/v2/pkg/astparser" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/postprocess" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" + + graphqlmetricsv1 "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/graphqlmetrics/v1" + "github.com/wundergraph/cosmo/router/pkg/graphqlschemausage" + "github.com/wundergraph/cosmo/router/pkg/slowplancache" ) type planWithMetaData struct { @@ -82,19 +83,21 @@ func (p *OperationPlanner) planOperation(content string, name string, includeQue } var ( - preparedPlan plan.Plan + plannerOptions []plan.Opts ) - // create and postprocess the plan - // planning uses the router schema - // if ctx.executionOptions.IncludeQueryPlanInResponse { - preparedPlan = planner.Plan(&doc, p.executor.RouterSchema, ctx.name, &report, plan.IncludeQueryPlanInResponse()) - // } else { - // preparedPlan = planner.Plan(&doc, p.executor.RouterSchema, ctx.name, &report) - // } + if includeQueryPlan || true { // TMP: always calculate query plans + plannerOptions = append(plannerOptions, plan.IncludeQueryPlanInResponse()) + } + + // create the raw query plan + // Note: planning uses the router schema as it needs access to all fields (including inaccessible), validation/introspection uses client schema + preparedPlan := planner.Plan(&doc, p.executor.RouterSchema, name, &report, plannerOptions...) if report.HasErrors() { return nil, &reportError{report: &report} } + + // postprocess query plan to get its final state post := postprocess.NewProcessor(postprocess.CollectDataSourceInfo()) post.Process(preparedPlan) From a723c001fd4c96e9eab5abca09f11aae05b22c30 Mon Sep 17 00:00:00 2001 From: spetrunin Date: Tue, 7 Apr 2026 21:32:08 +0300 Subject: [PATCH 19/23] update to latest defer engine version --- router-tests/go.mod | 2 +- router-tests/go.sum | 4 ++-- router/go.mod | 2 +- router/go.sum | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/router-tests/go.mod b/router-tests/go.mod index 43802d65a8..e854cb2e7b 100644 --- a/router-tests/go.mod +++ b/router-tests/go.mod @@ -28,7 +28,7 @@ require ( github.com/wundergraph/cosmo/demo/pkg/subgraphs/projects v0.0.0-20250715110703-10f2e5f9c79e github.com/wundergraph/cosmo/router v0.0.0-20260319123623-f186a0f724f6 github.com/wundergraph/cosmo/router-plugin v0.0.0-20250808194725-de123ba1c65e - github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267 + github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260407174232-081cac6b40ad go.opentelemetry.io/otel v1.39.0 go.opentelemetry.io/otel/sdk v1.39.0 go.opentelemetry.io/otel/sdk/metric v1.39.0 diff --git a/router-tests/go.sum b/router-tests/go.sum index 9bb30f878f..250114f512 100644 --- a/router-tests/go.sum +++ b/router-tests/go.sum @@ -357,8 +357,8 @@ github.com/wundergraph/astjson v1.1.0 h1:xORDosrZ87zQFJwNGe/HIHXqzpdHOFmqWgykCLV github.com/wundergraph/astjson v1.1.0/go.mod h1:h12D/dxxnedtLzsKyBLK7/Oe4TAoGpRVC9nDpDrZSWw= github.com/wundergraph/go-arena v1.1.0 h1:9+wSRkJAkA2vbYHp6s8tEGhPViRGQNGXqPHT0QzhdIc= github.com/wundergraph/go-arena v1.1.0/go.mod h1:ROOysEHWJjLQ8FSfNxZCziagb7Qw2nXY3/vgKRh7eWw= -github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267 h1:qMkYR0oq0Cw61aDZs9VsCCVwNVSxRxT13ytz6WqCwJg= -github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267/go.mod h1:HjTAO/cuICpu31IfHY9qmSPygx6Gza7Wt9hTSReTI+A= +github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260407174232-081cac6b40ad h1:/0C+lob5jeF4/J4BQCFyLyxq6KSovSOxdE/poP5en8o= +github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260407174232-081cac6b40ad/go.mod h1:HjTAO/cuICpu31IfHY9qmSPygx6Gza7Wt9hTSReTI+A= github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342 h1:FnBeRrxr7OU4VvAzt5X7s6266i6cSVkkFPS0TuXWbIg= github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= diff --git a/router/go.mod b/router/go.mod index a2b565e403..45b028834d 100644 --- a/router/go.mod +++ b/router/go.mod @@ -31,7 +31,7 @@ require ( github.com/tidwall/gjson v1.18.0 github.com/tidwall/sjson v1.2.5 github.com/twmb/franz-go v1.16.1 - github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267 + github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260407174232-081cac6b40ad // Do not upgrade, it renames attributes we rely on go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 go.opentelemetry.io/contrib/propagators/b3 v1.23.0 diff --git a/router/go.sum b/router/go.sum index 3af92643bc..60899bb173 100644 --- a/router/go.sum +++ b/router/go.sum @@ -329,8 +329,8 @@ github.com/wundergraph/astjson v1.1.0 h1:xORDosrZ87zQFJwNGe/HIHXqzpdHOFmqWgykCLV github.com/wundergraph/astjson v1.1.0/go.mod h1:h12D/dxxnedtLzsKyBLK7/Oe4TAoGpRVC9nDpDrZSWw= github.com/wundergraph/go-arena v1.1.0 h1:9+wSRkJAkA2vbYHp6s8tEGhPViRGQNGXqPHT0QzhdIc= github.com/wundergraph/go-arena v1.1.0/go.mod h1:ROOysEHWJjLQ8FSfNxZCziagb7Qw2nXY3/vgKRh7eWw= -github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267 h1:qMkYR0oq0Cw61aDZs9VsCCVwNVSxRxT13ytz6WqCwJg= -github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267/go.mod h1:HjTAO/cuICpu31IfHY9qmSPygx6Gza7Wt9hTSReTI+A= +github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260407174232-081cac6b40ad h1:/0C+lob5jeF4/J4BQCFyLyxq6KSovSOxdE/poP5en8o= +github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260407174232-081cac6b40ad/go.mod h1:HjTAO/cuICpu31IfHY9qmSPygx6Gza7Wt9hTSReTI+A= github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4= github.com/yuin/gopher-lua v1.1.1 h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M= From e3f0b849a1971e9f0bcc7edaeaac4026ee4db47b Mon Sep 17 00:00:00 2001 From: spetrunin Date: Tue, 7 Apr 2026 22:02:01 +0300 Subject: [PATCH 20/23] move defer tests to proper location --- router-tests/{ => protocol}/defer_test.go | 0 router-tests/{ => protocol}/testdata/queries_defer/README.md | 0 .../queries_defer/employeeDetails_defer_01_single_defer.graphql | 0 .../queries_defer/employeeDetails_defer_01_single_defer.txt | 0 .../employeeDetails_defer_01_single_defer_reconstructed.json | 0 .../employeeDetails_defer_02_single_defer_between_regular.graphql | 0 .../employeeDetails_defer_02_single_defer_between_regular.txt | 0 ...tails_defer_02_single_defer_between_regular_reconstructed.json | 0 .../employeeDetails_defer_03_multiple_fields_deferred.graphql | 0 .../employeeDetails_defer_03_multiple_fields_deferred.txt | 0 ...eeDetails_defer_03_multiple_fields_deferred_reconstructed.json | 0 .../employeeDetails_defer_04_all_fields_deferred.graphql | 0 .../employeeDetails_defer_04_all_fields_deferred.txt | 0 ...mployeeDetails_defer_04_all_fields_deferred_reconstructed.json | 0 .../queries_defer/employeeDetails_defer_05_nested_defer.graphql | 0 .../queries_defer/employeeDetails_defer_05_nested_defer.txt | 0 .../employeeDetails_defer_05_nested_defer_reconstructed.json | 0 .../employeeDetails_defer_06_nested_defer_variation.graphql | 0 .../employeeDetails_defer_06_nested_defer_variation.txt | 0 ...oyeeDetails_defer_06_nested_defer_variation_reconstructed.json | 0 .../employeeDetails_defer_07_parallel_defers.graphql | 0 .../queries_defer/employeeDetails_defer_07_parallel_defers.txt | 0 .../employeeDetails_defer_07_parallel_defers_reconstructed.json | 0 .../employeeDetails_defer_08_defer_nested_object.graphql | 0 .../employeeDetails_defer_08_defer_nested_object.txt | 0 ...mployeeDetails_defer_08_defer_nested_object_reconstructed.json | 0 ...employeeDetails_defer_09_duplicated_field_across_defer.graphql | 0 .../employeeDetails_defer_09_duplicated_field_across_defer.txt | 0 ...ails_defer_09_duplicated_field_across_defer_reconstructed.json | 0 .../employeeDetails_defer_10_extensive_parallel.graphql | 0 .../queries_defer/employeeDetails_defer_10_extensive_parallel.txt | 0 ...employeeDetails_defer_10_extensive_parallel_reconstructed.json | 0 .../testdata/queries_defer/employeeDetails_original.graphql | 0 .../testdata/queries_defer/employeeDetails_original.json | 0 .../testdata/queries_defer/employee_defer_01_single_defer.graphql | 0 .../testdata/queries_defer/employee_defer_01_single_defer.txt | 0 .../employee_defer_01_single_defer_reconstructed.json | 0 .../employee_defer_02_single_defer_between_regular.graphql | 0 .../employee_defer_02_single_defer_between_regular.txt | 0 ...loyee_defer_02_single_defer_between_regular_reconstructed.json | 0 .../employee_defer_03_multiple_fields_deferred.graphql | 0 .../queries_defer/employee_defer_03_multiple_fields_deferred.txt | 0 .../employee_defer_03_multiple_fields_deferred_reconstructed.json | 0 .../queries_defer/employee_defer_04_all_fields_deferred.graphql | 0 .../queries_defer/employee_defer_04_all_fields_deferred.txt | 0 .../employee_defer_04_all_fields_deferred_reconstructed.json | 0 .../testdata/queries_defer/employee_defer_05_nested_defer.graphql | 0 .../testdata/queries_defer/employee_defer_05_nested_defer.txt | 0 .../employee_defer_05_nested_defer_reconstructed.json | 0 .../employee_defer_06_nested_defer_variation.graphql | 0 .../queries_defer/employee_defer_06_nested_defer_variation.txt | 0 .../employee_defer_06_nested_defer_variation_reconstructed.json | 0 .../queries_defer/employee_defer_07_parallel_defers.graphql | 0 .../testdata/queries_defer/employee_defer_07_parallel_defers.txt | 0 .../employee_defer_07_parallel_defers_reconstructed.json | 0 .../queries_defer/employee_defer_08_defer_nested_object.graphql | 0 .../queries_defer/employee_defer_08_defer_nested_object.txt | 0 .../employee_defer_08_defer_nested_object_reconstructed.json | 0 .../employee_defer_09_duplicated_field_across_defer.graphql | 0 .../employee_defer_09_duplicated_field_across_defer.txt | 0 ...oyee_defer_09_duplicated_field_across_defer_reconstructed.json | 0 .../queries_defer/employee_defer_10_extensive_parallel.graphql | 0 .../queries_defer/employee_defer_10_extensive_parallel.txt | 0 .../employee_defer_10_extensive_parallel_reconstructed.json | 0 .../testdata/queries_defer/employee_original.graphql | 0 .../{ => protocol}/testdata/queries_defer/employee_original.json | 0 .../queries_defer/employees_defer_01_single_defer.graphql | 0 .../testdata/queries_defer/employees_defer_01_single_defer.txt | 0 .../employees_defer_01_single_defer_reconstructed.json | 0 .../employees_defer_02_single_defer_between_regular.graphql | 0 .../employees_defer_02_single_defer_between_regular.txt | 0 ...oyees_defer_02_single_defer_between_regular_reconstructed.json | 0 .../employees_defer_03_multiple_fields_deferred.graphql | 0 .../queries_defer/employees_defer_03_multiple_fields_deferred.txt | 0 ...employees_defer_03_multiple_fields_deferred_reconstructed.json | 0 .../queries_defer/employees_defer_04_all_fields_deferred.graphql | 0 .../queries_defer/employees_defer_04_all_fields_deferred.txt | 0 .../employees_defer_04_all_fields_deferred_reconstructed.json | 0 .../queries_defer/employees_defer_05_nested_defer.graphql | 0 .../testdata/queries_defer/employees_defer_05_nested_defer.txt | 0 .../employees_defer_05_nested_defer_reconstructed.json | 0 .../employees_defer_06_nested_defer_variation.graphql | 0 .../queries_defer/employees_defer_06_nested_defer_variation.txt | 0 .../employees_defer_06_nested_defer_variation_reconstructed.json | 0 .../queries_defer/employees_defer_07_parallel_defers.graphql | 0 .../testdata/queries_defer/employees_defer_07_parallel_defers.txt | 0 .../employees_defer_07_parallel_defers_reconstructed.json | 0 .../queries_defer/employees_defer_08_defer_nested_object.graphql | 0 .../queries_defer/employees_defer_08_defer_nested_object.txt | 0 .../employees_defer_08_defer_nested_object_reconstructed.json | 0 .../employees_defer_09_duplicated_field_across_defer.graphql | 0 .../employees_defer_09_duplicated_field_across_defer.txt | 0 ...yees_defer_09_duplicated_field_across_defer_reconstructed.json | 0 .../queries_defer/employees_defer_10_extensive_parallel.graphql | 0 .../queries_defer/employees_defer_10_extensive_parallel.txt | 0 .../employees_defer_10_extensive_parallel_reconstructed.json | 0 .../employees_defer_11_fragment_around_and_inside.graphql | 0 .../employees_defer_11_fragment_around_and_inside.txt | 0 ...ployees_defer_11_fragment_around_and_inside_reconstructed.json | 0 .../queries_defer/employees_defer_12_fragment_body_defer.graphql | 0 .../queries_defer/employees_defer_12_fragment_body_defer.txt | 0 .../employees_defer_12_fragment_body_defer_reconstructed.json | 0 .../employees_defer_13_fragment_spread_defer.graphql | 0 .../queries_defer/employees_defer_13_fragment_spread_defer.txt | 0 .../employees_defer_13_fragment_spread_defer_reconstructed.json | 0 .../testdata/queries_defer/employees_original.graphql | 0 .../{ => protocol}/testdata/queries_defer/employees_original.json | 0 .../findEmployeesNoCriteria_defer_01_single_defer.graphql | 0 .../findEmployeesNoCriteria_defer_01_single_defer.txt | 0 ...ndEmployeesNoCriteria_defer_01_single_defer_reconstructed.json | 0 ...loyeesNoCriteria_defer_02_single_defer_between_regular.graphql | 0 ...dEmployeesNoCriteria_defer_02_single_defer_between_regular.txt | 0 ...teria_defer_02_single_defer_between_regular_reconstructed.json | 0 ...dEmployeesNoCriteria_defer_03_multiple_fields_deferred.graphql | 0 .../findEmployeesNoCriteria_defer_03_multiple_fields_deferred.txt | 0 ...oCriteria_defer_03_multiple_fields_deferred_reconstructed.json | 0 .../findEmployeesNoCriteria_defer_04_all_fields_deferred.graphql | 0 .../findEmployeesNoCriteria_defer_04_all_fields_deferred.txt | 0 ...yeesNoCriteria_defer_04_all_fields_deferred_reconstructed.json | 0 .../findEmployeesNoCriteria_defer_05_nested_defer.graphql | 0 .../findEmployeesNoCriteria_defer_05_nested_defer.txt | 0 ...ndEmployeesNoCriteria_defer_05_nested_defer_reconstructed.json | 0 ...indEmployeesNoCriteria_defer_06_nested_defer_variation.graphql | 0 .../findEmployeesNoCriteria_defer_06_nested_defer_variation.txt | 0 ...sNoCriteria_defer_06_nested_defer_variation_reconstructed.json | 0 .../findEmployeesNoCriteria_defer_07_parallel_defers.graphql | 0 .../findEmployeesNoCriteria_defer_07_parallel_defers.txt | 0 ...mployeesNoCriteria_defer_07_parallel_defers_reconstructed.json | 0 .../findEmployeesNoCriteria_defer_08_defer_nested_object.graphql | 0 .../findEmployeesNoCriteria_defer_08_defer_nested_object.txt | 0 ...yeesNoCriteria_defer_08_defer_nested_object_reconstructed.json | 0 ...oyeesNoCriteria_defer_09_duplicated_field_across_defer.graphql | 0 ...EmployeesNoCriteria_defer_09_duplicated_field_across_defer.txt | 0 ...eria_defer_09_duplicated_field_across_defer_reconstructed.json | 0 .../findEmployeesNoCriteria_defer_10_extensive_parallel.graphql | 0 .../findEmployeesNoCriteria_defer_10_extensive_parallel.txt | 0 ...oyeesNoCriteria_defer_10_extensive_parallel_reconstructed.json | 0 .../queries_defer/findEmployeesNoCriteria_original.graphql | 0 .../testdata/queries_defer/findEmployeesNoCriteria_original.json | 0 .../queries_defer/findEmployees_defer_01_single_defer.graphql | 0 .../queries_defer/findEmployees_defer_01_single_defer.txt | 0 .../findEmployees_defer_01_single_defer_reconstructed.json | 0 .../findEmployees_defer_02_single_defer_between_regular.graphql | 0 .../findEmployees_defer_02_single_defer_between_regular.txt | 0 ...oyees_defer_02_single_defer_between_regular_reconstructed.json | 0 .../findEmployees_defer_03_multiple_fields_deferred.graphql | 0 .../findEmployees_defer_03_multiple_fields_deferred.txt | 0 ...Employees_defer_03_multiple_fields_deferred_reconstructed.json | 0 .../findEmployees_defer_04_all_fields_deferred.graphql | 0 .../queries_defer/findEmployees_defer_04_all_fields_deferred.txt | 0 .../findEmployees_defer_04_all_fields_deferred_reconstructed.json | 0 .../queries_defer/findEmployees_defer_05_nested_defer.graphql | 0 .../queries_defer/findEmployees_defer_05_nested_defer.txt | 0 .../findEmployees_defer_05_nested_defer_reconstructed.json | 0 .../findEmployees_defer_06_nested_defer_variation.graphql | 0 .../findEmployees_defer_06_nested_defer_variation.txt | 0 ...ndEmployees_defer_06_nested_defer_variation_reconstructed.json | 0 .../queries_defer/findEmployees_defer_07_parallel_defers.graphql | 0 .../queries_defer/findEmployees_defer_07_parallel_defers.txt | 0 .../findEmployees_defer_07_parallel_defers_reconstructed.json | 0 .../findEmployees_defer_08_defer_nested_object.graphql | 0 .../queries_defer/findEmployees_defer_08_defer_nested_object.txt | 0 .../findEmployees_defer_08_defer_nested_object_reconstructed.json | 0 .../findEmployees_defer_09_duplicated_field_across_defer.graphql | 0 .../findEmployees_defer_09_duplicated_field_across_defer.txt | 0 ...yees_defer_09_duplicated_field_across_defer_reconstructed.json | 0 .../findEmployees_defer_10_extensive_parallel.graphql | 0 .../queries_defer/findEmployees_defer_10_extensive_parallel.txt | 0 .../findEmployees_defer_10_extensive_parallel_reconstructed.json | 0 .../testdata/queries_defer/findEmployees_original.graphql | 0 .../testdata/queries_defer/findEmployees_original.json | 0 .../testdata/queries_defer/full_defer_01_single_defer.graphql | 0 .../testdata/queries_defer/full_defer_01_single_defer.txt | 0 .../queries_defer/full_defer_01_single_defer_reconstructed.json | 0 .../full_defer_02_single_defer_between_regular.graphql | 0 .../queries_defer/full_defer_02_single_defer_between_regular.txt | 0 .../full_defer_02_single_defer_between_regular_reconstructed.json | 0 .../queries_defer/full_defer_03_multiple_fields_deferred.graphql | 0 .../queries_defer/full_defer_03_multiple_fields_deferred.txt | 0 .../full_defer_03_multiple_fields_deferred_reconstructed.json | 0 .../queries_defer/full_defer_04_all_fields_deferred.graphql | 0 .../testdata/queries_defer/full_defer_04_all_fields_deferred.txt | 0 .../full_defer_04_all_fields_deferred_reconstructed.json | 0 .../testdata/queries_defer/full_defer_05_nested_defer.graphql | 0 .../testdata/queries_defer/full_defer_05_nested_defer.txt | 0 .../queries_defer/full_defer_05_nested_defer_reconstructed.json | 0 .../queries_defer/full_defer_06_nested_defer_variation.graphql | 0 .../queries_defer/full_defer_06_nested_defer_variation.txt | 0 .../full_defer_06_nested_defer_variation_reconstructed.json | 0 .../testdata/queries_defer/full_defer_07_parallel_defers.graphql | 0 .../testdata/queries_defer/full_defer_07_parallel_defers.txt | 0 .../full_defer_07_parallel_defers_reconstructed.json | 0 .../queries_defer/full_defer_08_defer_nested_object.graphql | 0 .../testdata/queries_defer/full_defer_08_defer_nested_object.txt | 0 .../full_defer_08_defer_nested_object_reconstructed.json | 0 .../full_defer_09_duplicated_field_across_defer.graphql | 0 .../queries_defer/full_defer_09_duplicated_field_across_defer.txt | 0 ...full_defer_09_duplicated_field_across_defer_reconstructed.json | 0 .../queries_defer/full_defer_10_extensive_parallel.graphql | 0 .../testdata/queries_defer/full_defer_10_extensive_parallel.txt | 0 .../full_defer_10_extensive_parallel_reconstructed.json | 0 .../full_defer_11_fragment_around_and_inside.graphql | 0 .../queries_defer/full_defer_11_fragment_around_and_inside.txt | 0 .../full_defer_11_fragment_around_and_inside_reconstructed.json | 0 .../queries_defer/full_defer_12_fragment_body_defer.graphql | 0 .../testdata/queries_defer/full_defer_12_fragment_body_defer.txt | 0 .../full_defer_12_fragment_body_defer_reconstructed.json | 0 .../queries_defer/full_defer_13_fragment_spread_defer.graphql | 0 .../queries_defer/full_defer_13_fragment_spread_defer.txt | 0 .../full_defer_13_fragment_spread_defer_reconstructed.json | 0 .../{ => protocol}/testdata/queries_defer/full_original.graphql | 0 .../{ => protocol}/testdata/queries_defer/full_original.json | 0 .../testdata/queries_defer/products_defer_01_single_defer.graphql | 0 .../testdata/queries_defer/products_defer_01_single_defer.txt | 0 .../products_defer_01_single_defer_reconstructed.json | 0 .../products_defer_02_single_defer_between_regular.graphql | 0 .../products_defer_02_single_defer_between_regular.txt | 0 ...ducts_defer_02_single_defer_between_regular_reconstructed.json | 0 .../products_defer_03_multiple_fields_deferred.graphql | 0 .../queries_defer/products_defer_03_multiple_fields_deferred.txt | 0 .../products_defer_03_multiple_fields_deferred_reconstructed.json | 0 .../queries_defer/products_defer_04_all_fields_deferred.graphql | 0 .../queries_defer/products_defer_04_all_fields_deferred.txt | 0 .../products_defer_04_all_fields_deferred_reconstructed.json | 0 .../testdata/queries_defer/products_defer_05_nested_defer.graphql | 0 .../testdata/queries_defer/products_defer_05_nested_defer.txt | 0 .../products_defer_05_nested_defer_reconstructed.json | 0 .../products_defer_06_nested_defer_variation.graphql | 0 .../queries_defer/products_defer_06_nested_defer_variation.txt | 0 .../products_defer_06_nested_defer_variation_reconstructed.json | 0 .../queries_defer/products_defer_07_parallel_defers.graphql | 0 .../testdata/queries_defer/products_defer_07_parallel_defers.txt | 0 .../products_defer_07_parallel_defers_reconstructed.json | 0 .../queries_defer/products_defer_08_defer_nested_object.graphql | 0 .../queries_defer/products_defer_08_defer_nested_object.txt | 0 .../products_defer_08_defer_nested_object_reconstructed.json | 0 .../products_defer_09_duplicated_field_across_defer.graphql | 0 .../products_defer_09_duplicated_field_across_defer.txt | 0 ...ucts_defer_09_duplicated_field_across_defer_reconstructed.json | 0 .../queries_defer/products_defer_10_extensive_parallel.graphql | 0 .../queries_defer/products_defer_10_extensive_parallel.txt | 0 .../products_defer_10_extensive_parallel_reconstructed.json | 0 .../products_defer_11_fragment_around_and_inside.graphql | 0 .../products_defer_11_fragment_around_and_inside.txt | 0 ...roducts_defer_11_fragment_around_and_inside_reconstructed.json | 0 .../queries_defer/products_defer_12_fragment_body_defer.graphql | 0 .../products_defer_12_fragment_body_defer.graphql.todo | 0 .../queries_defer/products_defer_12_fragment_body_defer.txt | 0 .../products_defer_12_fragment_body_defer_reconstructed.json | 0 .../queries_defer/products_defer_13_fragment_spread_defer.graphql | 0 .../queries_defer/products_defer_13_fragment_spread_defer.txt | 0 .../products_defer_13_fragment_spread_defer_reconstructed.json | 0 .../testdata/queries_defer/products_original.graphql | 0 .../{ => protocol}/testdata/queries_defer/products_original.json | 0 .../requires_different_depth_defer_01_single_defer.graphql | 0 .../requires_different_depth_defer_01_single_defer.txt | 0 ...uires_different_depth_defer_01_single_defer_reconstructed.json | 0 ..._different_depth_defer_02_single_defer_between_regular.graphql | 0 ...ires_different_depth_defer_02_single_defer_between_regular.txt | 0 ...depth_defer_02_single_defer_between_regular_reconstructed.json | 0 ...ires_different_depth_defer_03_multiple_fields_deferred.graphql | 0 ...requires_different_depth_defer_03_multiple_fields_deferred.txt | 0 ...ent_depth_defer_03_multiple_fields_deferred_reconstructed.json | 0 .../requires_different_depth_defer_04_all_fields_deferred.graphql | 0 .../requires_different_depth_defer_04_all_fields_deferred.txt | 0 ...ifferent_depth_defer_04_all_fields_deferred_reconstructed.json | 0 .../requires_different_depth_defer_05_nested_defer.graphql | 0 .../requires_different_depth_defer_05_nested_defer.txt | 0 ...uires_different_depth_defer_05_nested_defer_reconstructed.json | 0 ...quires_different_depth_defer_06_nested_defer_variation.graphql | 0 .../requires_different_depth_defer_06_nested_defer_variation.txt | 0 ...erent_depth_defer_06_nested_defer_variation_reconstructed.json | 0 .../requires_different_depth_defer_07_parallel_defers.graphql | 0 .../requires_different_depth_defer_07_parallel_defers.txt | 0 ...es_different_depth_defer_07_parallel_defers_reconstructed.json | 0 .../requires_different_depth_defer_08_defer_nested_object.graphql | 0 .../requires_different_depth_defer_08_defer_nested_object.txt | 0 ...ifferent_depth_defer_08_defer_nested_object_reconstructed.json | 0 ...different_depth_defer_09_duplicated_field_across_defer.graphql | 0 ...res_different_depth_defer_09_duplicated_field_across_defer.txt | 0 ...epth_defer_09_duplicated_field_across_defer_reconstructed.json | 0 .../requires_different_depth_defer_10_extensive_parallel.graphql | 0 .../requires_different_depth_defer_10_extensive_parallel.txt | 0 ...different_depth_defer_10_extensive_parallel_reconstructed.json | 0 ...es_different_depth_defer_11_fragment_around_and_inside.graphql | 0 ...quires_different_depth_defer_11_fragment_around_and_inside.txt | 0 ...t_depth_defer_11_fragment_around_and_inside_reconstructed.json | 0 .../requires_different_depth_defer_12_fragment_body_defer.graphql | 0 .../requires_different_depth_defer_12_fragment_body_defer.txt | 0 ...ifferent_depth_defer_12_fragment_body_defer_reconstructed.json | 0 ...equires_different_depth_defer_13_fragment_spread_defer.graphql | 0 .../requires_different_depth_defer_13_fragment_spread_defer.txt | 0 ...ferent_depth_defer_13_fragment_spread_defer_reconstructed.json | 0 .../queries_defer/requires_different_depth_original.graphql | 0 .../testdata/queries_defer/requires_different_depth_original.json | 0 .../queries_defer/requires_mood_defer_01_single_defer.graphql | 0 .../queries_defer/requires_mood_defer_01_single_defer.txt | 0 .../requires_mood_defer_01_single_defer_reconstructed.json | 0 .../requires_mood_defer_02_single_defer_between_regular.graphql | 0 .../requires_mood_defer_02_single_defer_between_regular.txt | 0 ..._mood_defer_02_single_defer_between_regular_reconstructed.json | 0 .../requires_mood_defer_03_multiple_fields_deferred.graphql | 0 .../requires_mood_defer_03_multiple_fields_deferred.txt | 0 ...ires_mood_defer_03_multiple_fields_deferred_reconstructed.json | 0 .../requires_mood_defer_04_all_fields_deferred.graphql | 0 .../queries_defer/requires_mood_defer_04_all_fields_deferred.txt | 0 .../requires_mood_defer_04_all_fields_deferred_reconstructed.json | 0 .../queries_defer/requires_mood_defer_05_nested_defer.graphql | 0 .../queries_defer/requires_mood_defer_05_nested_defer.txt | 0 .../requires_mood_defer_05_nested_defer_reconstructed.json | 0 .../requires_mood_defer_06_nested_defer_variation.graphql | 0 .../requires_mood_defer_06_nested_defer_variation.txt | 0 ...quires_mood_defer_06_nested_defer_variation_reconstructed.json | 0 .../queries_defer/requires_mood_defer_07_parallel_defers.graphql | 0 .../queries_defer/requires_mood_defer_07_parallel_defers.txt | 0 .../requires_mood_defer_07_parallel_defers_reconstructed.json | 0 .../requires_mood_defer_08_defer_nested_object.graphql | 0 .../queries_defer/requires_mood_defer_08_defer_nested_object.txt | 0 .../requires_mood_defer_08_defer_nested_object_reconstructed.json | 0 .../requires_mood_defer_09_duplicated_field_across_defer.graphql | 0 .../requires_mood_defer_09_duplicated_field_across_defer.txt | 0 ...mood_defer_09_duplicated_field_across_defer_reconstructed.json | 0 .../requires_mood_defer_10_extensive_parallel.graphql | 0 .../queries_defer/requires_mood_defer_10_extensive_parallel.txt | 0 .../requires_mood_defer_10_extensive_parallel_reconstructed.json | 0 .../requires_mood_defer_11_fragment_around_and_inside.graphql | 0 .../requires_mood_defer_11_fragment_around_and_inside.txt | 0 ...es_mood_defer_11_fragment_around_and_inside_reconstructed.json | 0 .../requires_mood_defer_12_fragment_body_defer.graphql | 0 .../queries_defer/requires_mood_defer_12_fragment_body_defer.txt | 0 .../requires_mood_defer_12_fragment_body_defer_reconstructed.json | 0 .../requires_mood_defer_13_fragment_spread_defer.graphql | 0 .../requires_mood_defer_13_fragment_spread_defer.txt | 0 ...equires_mood_defer_13_fragment_spread_defer_reconstructed.json | 0 .../testdata/queries_defer/requires_mood_original.graphql | 0 .../testdata/queries_defer/requires_mood_original.json | 0 336 files changed, 0 insertions(+), 0 deletions(-) rename router-tests/{ => protocol}/defer_test.go (100%) rename router-tests/{ => protocol}/testdata/queries_defer/README.md (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_01_single_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_01_single_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_05_nested_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_05_nested_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_05_nested_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_07_parallel_defers_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_original.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employeeDetails_original.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_01_single_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_01_single_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_01_single_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_02_single_defer_between_regular.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_02_single_defer_between_regular_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_03_multiple_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_04_all_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_04_all_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_04_all_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_05_nested_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_05_nested_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_05_nested_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_06_nested_defer_variation.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_06_nested_defer_variation.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_06_nested_defer_variation_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_07_parallel_defers.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_07_parallel_defers.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_07_parallel_defers_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_08_defer_nested_object.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_08_defer_nested_object.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_08_defer_nested_object_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_10_extensive_parallel.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_10_extensive_parallel.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_defer_10_extensive_parallel_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_original.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employee_original.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_01_single_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_01_single_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_01_single_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_02_single_defer_between_regular.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_02_single_defer_between_regular.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_02_single_defer_between_regular_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_03_multiple_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_04_all_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_04_all_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_04_all_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_05_nested_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_05_nested_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_05_nested_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_06_nested_defer_variation.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_06_nested_defer_variation.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_06_nested_defer_variation_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_07_parallel_defers.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_07_parallel_defers.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_07_parallel_defers_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_08_defer_nested_object.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_08_defer_nested_object.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_08_defer_nested_object_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_10_extensive_parallel.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_10_extensive_parallel.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_10_extensive_parallel_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_11_fragment_around_and_inside_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_12_fragment_body_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_12_fragment_body_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_12_fragment_body_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_13_fragment_spread_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_13_fragment_spread_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_defer_13_fragment_spread_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_original.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/employees_original.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_original.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployeesNoCriteria_original.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_01_single_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_01_single_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_01_single_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_05_nested_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_05_nested_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_05_nested_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_07_parallel_defers.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_07_parallel_defers.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_07_parallel_defers_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_08_defer_nested_object_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_defer_10_extensive_parallel_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_original.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/findEmployees_original.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_01_single_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_01_single_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_01_single_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_02_single_defer_between_regular.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_02_single_defer_between_regular.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_02_single_defer_between_regular_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_03_multiple_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_03_multiple_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_03_multiple_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_04_all_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_04_all_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_04_all_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_05_nested_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_05_nested_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_05_nested_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_06_nested_defer_variation.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_06_nested_defer_variation.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_06_nested_defer_variation_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_07_parallel_defers.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_07_parallel_defers.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_07_parallel_defers_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_08_defer_nested_object.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_08_defer_nested_object.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_08_defer_nested_object_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_09_duplicated_field_across_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_10_extensive_parallel.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_10_extensive_parallel.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_10_extensive_parallel_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_11_fragment_around_and_inside_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_12_fragment_body_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_12_fragment_body_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_defer_13_fragment_spread_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_original.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/full_original.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_01_single_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_01_single_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_01_single_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_02_single_defer_between_regular_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_03_multiple_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_03_multiple_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_04_all_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_04_all_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_05_nested_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_05_nested_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_05_nested_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_06_nested_defer_variation.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_06_nested_defer_variation_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_07_parallel_defers.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_07_parallel_defers.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_07_parallel_defers_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_08_defer_nested_object.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_08_defer_nested_object.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_08_defer_nested_object_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_09_duplicated_field_across_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_10_extensive_parallel.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_10_extensive_parallel.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_10_extensive_parallel_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_11_fragment_around_and_inside_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql.todo (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_12_fragment_body_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_12_fragment_body_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_defer_13_fragment_spread_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_original.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/products_original.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_01_single_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_01_single_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_01_single_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_05_nested_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_original.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_different_depth_original.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_01_single_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_01_single_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_01_single_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_05_nested_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_05_nested_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_05_nested_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_07_parallel_defers.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_07_parallel_defers.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_07_parallel_defers_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_08_defer_nested_object_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_10_extensive_parallel_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.txt (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer_reconstructed.json (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_original.graphql (100%) rename router-tests/{ => protocol}/testdata/queries_defer/requires_mood_original.json (100%) diff --git a/router-tests/defer_test.go b/router-tests/protocol/defer_test.go similarity index 100% rename from router-tests/defer_test.go rename to router-tests/protocol/defer_test.go diff --git a/router-tests/testdata/queries_defer/README.md b/router-tests/protocol/testdata/queries_defer/README.md similarity index 100% rename from router-tests/testdata/queries_defer/README.md rename to router-tests/protocol/testdata/queries_defer/README.md diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.graphql b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_01_single_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.graphql rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_01_single_defer.graphql diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_01_single_defer.txt diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_01_single_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_01_single_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_01_single_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.graphql b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.graphql rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.graphql diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.txt b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.txt similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.txt rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular.txt diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_02_single_defer_between_regular_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_03_multiple_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_04_all_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.graphql b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_05_nested_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.graphql rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_05_nested_defer.graphql diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.txt b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_05_nested_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer.txt rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_05_nested_defer.txt diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_05_nested_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_05_nested_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_05_nested_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.graphql b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.graphql rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.graphql diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.txt b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.txt similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.txt rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation.txt diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_06_nested_defer_variation_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.graphql b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.graphql rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.graphql diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.txt b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.txt similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.txt rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_07_parallel_defers.txt diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_07_parallel_defers_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_07_parallel_defers_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_07_parallel_defers_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.graphql b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.graphql rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.graphql diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.txt b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.txt similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.txt rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object.txt diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_08_defer_nested_object_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.graphql b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.graphql rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.graphql diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.txt b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.txt rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer.txt diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_09_duplicated_field_across_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.graphql b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.graphql rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.graphql diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.txt b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.txt similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.txt rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel.txt diff --git a/router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employeeDetails_defer_10_extensive_parallel_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employeeDetails_original.graphql b/router-tests/protocol/testdata/queries_defer/employeeDetails_original.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_original.graphql rename to router-tests/protocol/testdata/queries_defer/employeeDetails_original.graphql diff --git a/router-tests/testdata/queries_defer/employeeDetails_original.json b/router-tests/protocol/testdata/queries_defer/employeeDetails_original.json similarity index 100% rename from router-tests/testdata/queries_defer/employeeDetails_original.json rename to router-tests/protocol/testdata/queries_defer/employeeDetails_original.json diff --git a/router-tests/testdata/queries_defer/employee_defer_01_single_defer.graphql b/router-tests/protocol/testdata/queries_defer/employee_defer_01_single_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_01_single_defer.graphql rename to router-tests/protocol/testdata/queries_defer/employee_defer_01_single_defer.graphql diff --git a/router-tests/testdata/queries_defer/employee_defer_01_single_defer.txt b/router-tests/protocol/testdata/queries_defer/employee_defer_01_single_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_01_single_defer.txt rename to router-tests/protocol/testdata/queries_defer/employee_defer_01_single_defer.txt diff --git a/router-tests/testdata/queries_defer/employee_defer_01_single_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employee_defer_01_single_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_01_single_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employee_defer_01_single_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.graphql b/router-tests/protocol/testdata/queries_defer/employee_defer_02_single_defer_between_regular.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.graphql rename to router-tests/protocol/testdata/queries_defer/employee_defer_02_single_defer_between_regular.graphql diff --git a/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt b/router-tests/protocol/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt rename to router-tests/protocol/testdata/queries_defer/employee_defer_02_single_defer_between_regular.txt diff --git a/router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employee_defer_02_single_defer_between_regular_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_02_single_defer_between_regular_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employee_defer_02_single_defer_between_regular_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/employee_defer_03_multiple_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employee_defer_03_multiple_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_03_multiple_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employee_defer_03_multiple_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/employee_defer_04_all_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/employee_defer_04_all_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/employee_defer_04_all_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/employee_defer_04_all_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employee_defer_04_all_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_04_all_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employee_defer_04_all_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employee_defer_05_nested_defer.graphql b/router-tests/protocol/testdata/queries_defer/employee_defer_05_nested_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_05_nested_defer.graphql rename to router-tests/protocol/testdata/queries_defer/employee_defer_05_nested_defer.graphql diff --git a/router-tests/testdata/queries_defer/employee_defer_05_nested_defer.txt b/router-tests/protocol/testdata/queries_defer/employee_defer_05_nested_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_05_nested_defer.txt rename to router-tests/protocol/testdata/queries_defer/employee_defer_05_nested_defer.txt diff --git a/router-tests/testdata/queries_defer/employee_defer_05_nested_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employee_defer_05_nested_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_05_nested_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employee_defer_05_nested_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.graphql b/router-tests/protocol/testdata/queries_defer/employee_defer_06_nested_defer_variation.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.graphql rename to router-tests/protocol/testdata/queries_defer/employee_defer_06_nested_defer_variation.graphql diff --git a/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.txt b/router-tests/protocol/testdata/queries_defer/employee_defer_06_nested_defer_variation.txt similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation.txt rename to router-tests/protocol/testdata/queries_defer/employee_defer_06_nested_defer_variation.txt diff --git a/router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employee_defer_06_nested_defer_variation_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_06_nested_defer_variation_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employee_defer_06_nested_defer_variation_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.graphql b/router-tests/protocol/testdata/queries_defer/employee_defer_07_parallel_defers.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.graphql rename to router-tests/protocol/testdata/queries_defer/employee_defer_07_parallel_defers.graphql diff --git a/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.txt b/router-tests/protocol/testdata/queries_defer/employee_defer_07_parallel_defers.txt similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_07_parallel_defers.txt rename to router-tests/protocol/testdata/queries_defer/employee_defer_07_parallel_defers.txt diff --git a/router-tests/testdata/queries_defer/employee_defer_07_parallel_defers_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employee_defer_07_parallel_defers_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_07_parallel_defers_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employee_defer_07_parallel_defers_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.graphql b/router-tests/protocol/testdata/queries_defer/employee_defer_08_defer_nested_object.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.graphql rename to router-tests/protocol/testdata/queries_defer/employee_defer_08_defer_nested_object.graphql diff --git a/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.txt b/router-tests/protocol/testdata/queries_defer/employee_defer_08_defer_nested_object.txt similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object.txt rename to router-tests/protocol/testdata/queries_defer/employee_defer_08_defer_nested_object.txt diff --git a/router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employee_defer_08_defer_nested_object_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_08_defer_nested_object_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employee_defer_08_defer_nested_object_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.graphql b/router-tests/protocol/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.graphql rename to router-tests/protocol/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.graphql diff --git a/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.txt b/router-tests/protocol/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.txt rename to router-tests/protocol/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer.txt diff --git a/router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employee_defer_09_duplicated_field_across_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.graphql b/router-tests/protocol/testdata/queries_defer/employee_defer_10_extensive_parallel.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.graphql rename to router-tests/protocol/testdata/queries_defer/employee_defer_10_extensive_parallel.graphql diff --git a/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.txt b/router-tests/protocol/testdata/queries_defer/employee_defer_10_extensive_parallel.txt similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel.txt rename to router-tests/protocol/testdata/queries_defer/employee_defer_10_extensive_parallel.txt diff --git a/router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employee_defer_10_extensive_parallel_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employee_defer_10_extensive_parallel_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employee_defer_10_extensive_parallel_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employee_original.graphql b/router-tests/protocol/testdata/queries_defer/employee_original.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employee_original.graphql rename to router-tests/protocol/testdata/queries_defer/employee_original.graphql diff --git a/router-tests/testdata/queries_defer/employee_original.json b/router-tests/protocol/testdata/queries_defer/employee_original.json similarity index 100% rename from router-tests/testdata/queries_defer/employee_original.json rename to router-tests/protocol/testdata/queries_defer/employee_original.json diff --git a/router-tests/testdata/queries_defer/employees_defer_01_single_defer.graphql b/router-tests/protocol/testdata/queries_defer/employees_defer_01_single_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_01_single_defer.graphql rename to router-tests/protocol/testdata/queries_defer/employees_defer_01_single_defer.graphql diff --git a/router-tests/testdata/queries_defer/employees_defer_01_single_defer.txt b/router-tests/protocol/testdata/queries_defer/employees_defer_01_single_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_01_single_defer.txt rename to router-tests/protocol/testdata/queries_defer/employees_defer_01_single_defer.txt diff --git a/router-tests/testdata/queries_defer/employees_defer_01_single_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employees_defer_01_single_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_01_single_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employees_defer_01_single_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.graphql b/router-tests/protocol/testdata/queries_defer/employees_defer_02_single_defer_between_regular.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.graphql rename to router-tests/protocol/testdata/queries_defer/employees_defer_02_single_defer_between_regular.graphql diff --git a/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.txt b/router-tests/protocol/testdata/queries_defer/employees_defer_02_single_defer_between_regular.txt similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular.txt rename to router-tests/protocol/testdata/queries_defer/employees_defer_02_single_defer_between_regular.txt diff --git a/router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employees_defer_02_single_defer_between_regular_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_02_single_defer_between_regular_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employees_defer_02_single_defer_between_regular_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/employees_defer_03_multiple_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employees_defer_03_multiple_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_03_multiple_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employees_defer_03_multiple_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/employees_defer_04_all_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/employees_defer_04_all_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/employees_defer_04_all_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/employees_defer_04_all_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employees_defer_04_all_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_04_all_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employees_defer_04_all_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employees_defer_05_nested_defer.graphql b/router-tests/protocol/testdata/queries_defer/employees_defer_05_nested_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_05_nested_defer.graphql rename to router-tests/protocol/testdata/queries_defer/employees_defer_05_nested_defer.graphql diff --git a/router-tests/testdata/queries_defer/employees_defer_05_nested_defer.txt b/router-tests/protocol/testdata/queries_defer/employees_defer_05_nested_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_05_nested_defer.txt rename to router-tests/protocol/testdata/queries_defer/employees_defer_05_nested_defer.txt diff --git a/router-tests/testdata/queries_defer/employees_defer_05_nested_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employees_defer_05_nested_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_05_nested_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employees_defer_05_nested_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.graphql b/router-tests/protocol/testdata/queries_defer/employees_defer_06_nested_defer_variation.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.graphql rename to router-tests/protocol/testdata/queries_defer/employees_defer_06_nested_defer_variation.graphql diff --git a/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.txt b/router-tests/protocol/testdata/queries_defer/employees_defer_06_nested_defer_variation.txt similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation.txt rename to router-tests/protocol/testdata/queries_defer/employees_defer_06_nested_defer_variation.txt diff --git a/router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employees_defer_06_nested_defer_variation_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_06_nested_defer_variation_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employees_defer_06_nested_defer_variation_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.graphql b/router-tests/protocol/testdata/queries_defer/employees_defer_07_parallel_defers.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.graphql rename to router-tests/protocol/testdata/queries_defer/employees_defer_07_parallel_defers.graphql diff --git a/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.txt b/router-tests/protocol/testdata/queries_defer/employees_defer_07_parallel_defers.txt similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_07_parallel_defers.txt rename to router-tests/protocol/testdata/queries_defer/employees_defer_07_parallel_defers.txt diff --git a/router-tests/testdata/queries_defer/employees_defer_07_parallel_defers_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employees_defer_07_parallel_defers_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_07_parallel_defers_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employees_defer_07_parallel_defers_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.graphql b/router-tests/protocol/testdata/queries_defer/employees_defer_08_defer_nested_object.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.graphql rename to router-tests/protocol/testdata/queries_defer/employees_defer_08_defer_nested_object.graphql diff --git a/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.txt b/router-tests/protocol/testdata/queries_defer/employees_defer_08_defer_nested_object.txt similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object.txt rename to router-tests/protocol/testdata/queries_defer/employees_defer_08_defer_nested_object.txt diff --git a/router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employees_defer_08_defer_nested_object_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_08_defer_nested_object_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employees_defer_08_defer_nested_object_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.graphql b/router-tests/protocol/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.graphql rename to router-tests/protocol/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.graphql diff --git a/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.txt b/router-tests/protocol/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.txt rename to router-tests/protocol/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer.txt diff --git a/router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employees_defer_09_duplicated_field_across_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.graphql b/router-tests/protocol/testdata/queries_defer/employees_defer_10_extensive_parallel.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.graphql rename to router-tests/protocol/testdata/queries_defer/employees_defer_10_extensive_parallel.graphql diff --git a/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.txt b/router-tests/protocol/testdata/queries_defer/employees_defer_10_extensive_parallel.txt similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel.txt rename to router-tests/protocol/testdata/queries_defer/employees_defer_10_extensive_parallel.txt diff --git a/router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employees_defer_10_extensive_parallel_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_10_extensive_parallel_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employees_defer_10_extensive_parallel_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.graphql b/router-tests/protocol/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.graphql rename to router-tests/protocol/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.graphql diff --git a/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.txt b/router-tests/protocol/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.txt similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.txt rename to router-tests/protocol/testdata/queries_defer/employees_defer_11_fragment_around_and_inside.txt diff --git a/router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employees_defer_11_fragment_around_and_inside_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_11_fragment_around_and_inside_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employees_defer_11_fragment_around_and_inside_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.graphql b/router-tests/protocol/testdata/queries_defer/employees_defer_12_fragment_body_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.graphql rename to router-tests/protocol/testdata/queries_defer/employees_defer_12_fragment_body_defer.graphql diff --git a/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.txt b/router-tests/protocol/testdata/queries_defer/employees_defer_12_fragment_body_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer.txt rename to router-tests/protocol/testdata/queries_defer/employees_defer_12_fragment_body_defer.txt diff --git a/router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employees_defer_12_fragment_body_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_12_fragment_body_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employees_defer_12_fragment_body_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.graphql b/router-tests/protocol/testdata/queries_defer/employees_defer_13_fragment_spread_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.graphql rename to router-tests/protocol/testdata/queries_defer/employees_defer_13_fragment_spread_defer.graphql diff --git a/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.txt b/router-tests/protocol/testdata/queries_defer/employees_defer_13_fragment_spread_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer.txt rename to router-tests/protocol/testdata/queries_defer/employees_defer_13_fragment_spread_defer.txt diff --git a/router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/employees_defer_13_fragment_spread_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/employees_defer_13_fragment_spread_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/employees_defer_13_fragment_spread_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/employees_original.graphql b/router-tests/protocol/testdata/queries_defer/employees_original.graphql similarity index 100% rename from router-tests/testdata/queries_defer/employees_original.graphql rename to router-tests/protocol/testdata/queries_defer/employees_original.graphql diff --git a/router-tests/testdata/queries_defer/employees_original.json b/router-tests/protocol/testdata/queries_defer/employees_original.json similarity index 100% rename from router-tests/testdata/queries_defer/employees_original.json rename to router-tests/protocol/testdata/queries_defer/employees_original.json diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.graphql b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.graphql diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.txt b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.txt rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer.txt diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_01_single_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.graphql b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.graphql diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.txt b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.txt rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular.txt diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_02_single_defer_between_regular_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_03_multiple_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_04_all_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.graphql b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.graphql diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.txt b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.txt rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer.txt diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_05_nested_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.graphql b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.graphql diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.txt b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.txt rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation.txt diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_06_nested_defer_variation_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.graphql b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.graphql diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.txt b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.txt rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers.txt diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_07_parallel_defers_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.graphql b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.graphql diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.txt b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.txt rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object.txt diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_08_defer_nested_object_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.graphql b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.graphql diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.txt b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.txt rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer.txt diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_09_duplicated_field_across_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.graphql b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.graphql diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.txt b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.txt rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel.txt diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_defer_10_extensive_parallel_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_original.graphql b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_original.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_original.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_original.graphql diff --git a/router-tests/testdata/queries_defer/findEmployeesNoCriteria_original.json b/router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_original.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployeesNoCriteria_original.json rename to router-tests/protocol/testdata/queries_defer/findEmployeesNoCriteria_original.json diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer.graphql b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_01_single_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_01_single_defer.graphql diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer.txt b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_01_single_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer.txt rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_01_single_defer.txt diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_01_single_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_01_single_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_01_single_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.graphql b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.graphql diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.txt b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.txt rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular.txt diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_02_single_defer_between_regular_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_03_multiple_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_04_all_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer.graphql b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_05_nested_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_05_nested_defer.graphql diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer.txt b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_05_nested_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer.txt rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_05_nested_defer.txt diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_05_nested_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_05_nested_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_05_nested_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.graphql b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.graphql diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.txt b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.txt rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation.txt diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_06_nested_defer_variation_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers.graphql b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_07_parallel_defers.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_07_parallel_defers.graphql diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers.txt b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_07_parallel_defers.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers.txt rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_07_parallel_defers.txt diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_07_parallel_defers_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_07_parallel_defers_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_07_parallel_defers_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.graphql b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.graphql diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.txt b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.txt rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_08_defer_nested_object.txt diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_08_defer_nested_object_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_08_defer_nested_object_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_08_defer_nested_object_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.graphql b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.graphql diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.txt b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.txt rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer.txt diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_09_duplicated_field_across_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.graphql b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.graphql diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.txt b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.txt similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.txt rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_10_extensive_parallel.txt diff --git a/router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel_reconstructed.json b/router-tests/protocol/testdata/queries_defer/findEmployees_defer_10_extensive_parallel_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_defer_10_extensive_parallel_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/findEmployees_defer_10_extensive_parallel_reconstructed.json diff --git a/router-tests/testdata/queries_defer/findEmployees_original.graphql b/router-tests/protocol/testdata/queries_defer/findEmployees_original.graphql similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_original.graphql rename to router-tests/protocol/testdata/queries_defer/findEmployees_original.graphql diff --git a/router-tests/testdata/queries_defer/findEmployees_original.json b/router-tests/protocol/testdata/queries_defer/findEmployees_original.json similarity index 100% rename from router-tests/testdata/queries_defer/findEmployees_original.json rename to router-tests/protocol/testdata/queries_defer/findEmployees_original.json diff --git a/router-tests/testdata/queries_defer/full_defer_01_single_defer.graphql b/router-tests/protocol/testdata/queries_defer/full_defer_01_single_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_01_single_defer.graphql rename to router-tests/protocol/testdata/queries_defer/full_defer_01_single_defer.graphql diff --git a/router-tests/testdata/queries_defer/full_defer_01_single_defer.txt b/router-tests/protocol/testdata/queries_defer/full_defer_01_single_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_01_single_defer.txt rename to router-tests/protocol/testdata/queries_defer/full_defer_01_single_defer.txt diff --git a/router-tests/testdata/queries_defer/full_defer_01_single_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/full_defer_01_single_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_01_single_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/full_defer_01_single_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.graphql b/router-tests/protocol/testdata/queries_defer/full_defer_02_single_defer_between_regular.graphql similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.graphql rename to router-tests/protocol/testdata/queries_defer/full_defer_02_single_defer_between_regular.graphql diff --git a/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.txt b/router-tests/protocol/testdata/queries_defer/full_defer_02_single_defer_between_regular.txt similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular.txt rename to router-tests/protocol/testdata/queries_defer/full_defer_02_single_defer_between_regular.txt diff --git a/router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/protocol/testdata/queries_defer/full_defer_02_single_defer_between_regular_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_02_single_defer_between_regular_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/full_defer_02_single_defer_between_regular_reconstructed.json diff --git a/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/full_defer_03_multiple_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/full_defer_03_multiple_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/full_defer_03_multiple_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/full_defer_03_multiple_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/full_defer_03_multiple_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_03_multiple_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/full_defer_03_multiple_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/full_defer_04_all_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/full_defer_04_all_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/full_defer_04_all_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/full_defer_04_all_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/full_defer_04_all_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_04_all_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/full_defer_04_all_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/full_defer_05_nested_defer.graphql b/router-tests/protocol/testdata/queries_defer/full_defer_05_nested_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_05_nested_defer.graphql rename to router-tests/protocol/testdata/queries_defer/full_defer_05_nested_defer.graphql diff --git a/router-tests/testdata/queries_defer/full_defer_05_nested_defer.txt b/router-tests/protocol/testdata/queries_defer/full_defer_05_nested_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_05_nested_defer.txt rename to router-tests/protocol/testdata/queries_defer/full_defer_05_nested_defer.txt diff --git a/router-tests/testdata/queries_defer/full_defer_05_nested_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/full_defer_05_nested_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_05_nested_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/full_defer_05_nested_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.graphql b/router-tests/protocol/testdata/queries_defer/full_defer_06_nested_defer_variation.graphql similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.graphql rename to router-tests/protocol/testdata/queries_defer/full_defer_06_nested_defer_variation.graphql diff --git a/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.txt b/router-tests/protocol/testdata/queries_defer/full_defer_06_nested_defer_variation.txt similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation.txt rename to router-tests/protocol/testdata/queries_defer/full_defer_06_nested_defer_variation.txt diff --git a/router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation_reconstructed.json b/router-tests/protocol/testdata/queries_defer/full_defer_06_nested_defer_variation_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_06_nested_defer_variation_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/full_defer_06_nested_defer_variation_reconstructed.json diff --git a/router-tests/testdata/queries_defer/full_defer_07_parallel_defers.graphql b/router-tests/protocol/testdata/queries_defer/full_defer_07_parallel_defers.graphql similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_07_parallel_defers.graphql rename to router-tests/protocol/testdata/queries_defer/full_defer_07_parallel_defers.graphql diff --git a/router-tests/testdata/queries_defer/full_defer_07_parallel_defers.txt b/router-tests/protocol/testdata/queries_defer/full_defer_07_parallel_defers.txt similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_07_parallel_defers.txt rename to router-tests/protocol/testdata/queries_defer/full_defer_07_parallel_defers.txt diff --git a/router-tests/testdata/queries_defer/full_defer_07_parallel_defers_reconstructed.json b/router-tests/protocol/testdata/queries_defer/full_defer_07_parallel_defers_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_07_parallel_defers_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/full_defer_07_parallel_defers_reconstructed.json diff --git a/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.graphql b/router-tests/protocol/testdata/queries_defer/full_defer_08_defer_nested_object.graphql similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.graphql rename to router-tests/protocol/testdata/queries_defer/full_defer_08_defer_nested_object.graphql diff --git a/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.txt b/router-tests/protocol/testdata/queries_defer/full_defer_08_defer_nested_object.txt similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_08_defer_nested_object.txt rename to router-tests/protocol/testdata/queries_defer/full_defer_08_defer_nested_object.txt diff --git a/router-tests/testdata/queries_defer/full_defer_08_defer_nested_object_reconstructed.json b/router-tests/protocol/testdata/queries_defer/full_defer_08_defer_nested_object_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_08_defer_nested_object_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/full_defer_08_defer_nested_object_reconstructed.json diff --git a/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.graphql b/router-tests/protocol/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.graphql rename to router-tests/protocol/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.graphql diff --git a/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.txt b/router-tests/protocol/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.txt rename to router-tests/protocol/testdata/queries_defer/full_defer_09_duplicated_field_across_defer.txt diff --git a/router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/full_defer_09_duplicated_field_across_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_09_duplicated_field_across_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/full_defer_09_duplicated_field_across_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.graphql b/router-tests/protocol/testdata/queries_defer/full_defer_10_extensive_parallel.graphql similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.graphql rename to router-tests/protocol/testdata/queries_defer/full_defer_10_extensive_parallel.graphql diff --git a/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.txt b/router-tests/protocol/testdata/queries_defer/full_defer_10_extensive_parallel.txt similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_10_extensive_parallel.txt rename to router-tests/protocol/testdata/queries_defer/full_defer_10_extensive_parallel.txt diff --git a/router-tests/testdata/queries_defer/full_defer_10_extensive_parallel_reconstructed.json b/router-tests/protocol/testdata/queries_defer/full_defer_10_extensive_parallel_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_10_extensive_parallel_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/full_defer_10_extensive_parallel_reconstructed.json diff --git a/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql b/router-tests/protocol/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql rename to router-tests/protocol/testdata/queries_defer/full_defer_11_fragment_around_and_inside.graphql diff --git a/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt b/router-tests/protocol/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt rename to router-tests/protocol/testdata/queries_defer/full_defer_11_fragment_around_and_inside.txt diff --git a/router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside_reconstructed.json b/router-tests/protocol/testdata/queries_defer/full_defer_11_fragment_around_and_inside_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_11_fragment_around_and_inside_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/full_defer_11_fragment_around_and_inside_reconstructed.json diff --git a/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql b/router-tests/protocol/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql rename to router-tests/protocol/testdata/queries_defer/full_defer_12_fragment_body_defer.graphql diff --git a/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.txt b/router-tests/protocol/testdata/queries_defer/full_defer_12_fragment_body_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer.txt rename to router-tests/protocol/testdata/queries_defer/full_defer_12_fragment_body_defer.txt diff --git a/router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/full_defer_12_fragment_body_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_12_fragment_body_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/full_defer_12_fragment_body_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql b/router-tests/protocol/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql rename to router-tests/protocol/testdata/queries_defer/full_defer_13_fragment_spread_defer.graphql diff --git a/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt b/router-tests/protocol/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt rename to router-tests/protocol/testdata/queries_defer/full_defer_13_fragment_spread_defer.txt diff --git a/router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/full_defer_13_fragment_spread_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/full_defer_13_fragment_spread_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/full_defer_13_fragment_spread_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/full_original.graphql b/router-tests/protocol/testdata/queries_defer/full_original.graphql similarity index 100% rename from router-tests/testdata/queries_defer/full_original.graphql rename to router-tests/protocol/testdata/queries_defer/full_original.graphql diff --git a/router-tests/testdata/queries_defer/full_original.json b/router-tests/protocol/testdata/queries_defer/full_original.json similarity index 100% rename from router-tests/testdata/queries_defer/full_original.json rename to router-tests/protocol/testdata/queries_defer/full_original.json diff --git a/router-tests/testdata/queries_defer/products_defer_01_single_defer.graphql b/router-tests/protocol/testdata/queries_defer/products_defer_01_single_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_01_single_defer.graphql rename to router-tests/protocol/testdata/queries_defer/products_defer_01_single_defer.graphql diff --git a/router-tests/testdata/queries_defer/products_defer_01_single_defer.txt b/router-tests/protocol/testdata/queries_defer/products_defer_01_single_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_01_single_defer.txt rename to router-tests/protocol/testdata/queries_defer/products_defer_01_single_defer.txt diff --git a/router-tests/testdata/queries_defer/products_defer_01_single_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/products_defer_01_single_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_01_single_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/products_defer_01_single_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql b/router-tests/protocol/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql rename to router-tests/protocol/testdata/queries_defer/products_defer_02_single_defer_between_regular.graphql diff --git a/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt b/router-tests/protocol/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt rename to router-tests/protocol/testdata/queries_defer/products_defer_02_single_defer_between_regular.txt diff --git a/router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/protocol/testdata/queries_defer/products_defer_02_single_defer_between_regular_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_02_single_defer_between_regular_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/products_defer_02_single_defer_between_regular_reconstructed.json diff --git a/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/products_defer_03_multiple_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/products_defer_03_multiple_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/products_defer_03_multiple_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/products_defer_03_multiple_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_03_multiple_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/products_defer_03_multiple_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/products_defer_04_all_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/products_defer_04_all_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/products_defer_04_all_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/products_defer_04_all_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_04_all_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/products_defer_04_all_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/products_defer_05_nested_defer.graphql b/router-tests/protocol/testdata/queries_defer/products_defer_05_nested_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_05_nested_defer.graphql rename to router-tests/protocol/testdata/queries_defer/products_defer_05_nested_defer.graphql diff --git a/router-tests/testdata/queries_defer/products_defer_05_nested_defer.txt b/router-tests/protocol/testdata/queries_defer/products_defer_05_nested_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_05_nested_defer.txt rename to router-tests/protocol/testdata/queries_defer/products_defer_05_nested_defer.txt diff --git a/router-tests/testdata/queries_defer/products_defer_05_nested_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/products_defer_05_nested_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_05_nested_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/products_defer_05_nested_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql b/router-tests/protocol/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql rename to router-tests/protocol/testdata/queries_defer/products_defer_06_nested_defer_variation.graphql diff --git a/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.txt b/router-tests/protocol/testdata/queries_defer/products_defer_06_nested_defer_variation.txt similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation.txt rename to router-tests/protocol/testdata/queries_defer/products_defer_06_nested_defer_variation.txt diff --git a/router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation_reconstructed.json b/router-tests/protocol/testdata/queries_defer/products_defer_06_nested_defer_variation_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_06_nested_defer_variation_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/products_defer_06_nested_defer_variation_reconstructed.json diff --git a/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.graphql b/router-tests/protocol/testdata/queries_defer/products_defer_07_parallel_defers.graphql similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_07_parallel_defers.graphql rename to router-tests/protocol/testdata/queries_defer/products_defer_07_parallel_defers.graphql diff --git a/router-tests/testdata/queries_defer/products_defer_07_parallel_defers.txt b/router-tests/protocol/testdata/queries_defer/products_defer_07_parallel_defers.txt similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_07_parallel_defers.txt rename to router-tests/protocol/testdata/queries_defer/products_defer_07_parallel_defers.txt diff --git a/router-tests/testdata/queries_defer/products_defer_07_parallel_defers_reconstructed.json b/router-tests/protocol/testdata/queries_defer/products_defer_07_parallel_defers_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_07_parallel_defers_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/products_defer_07_parallel_defers_reconstructed.json diff --git a/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.graphql b/router-tests/protocol/testdata/queries_defer/products_defer_08_defer_nested_object.graphql similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.graphql rename to router-tests/protocol/testdata/queries_defer/products_defer_08_defer_nested_object.graphql diff --git a/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.txt b/router-tests/protocol/testdata/queries_defer/products_defer_08_defer_nested_object.txt similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_08_defer_nested_object.txt rename to router-tests/protocol/testdata/queries_defer/products_defer_08_defer_nested_object.txt diff --git a/router-tests/testdata/queries_defer/products_defer_08_defer_nested_object_reconstructed.json b/router-tests/protocol/testdata/queries_defer/products_defer_08_defer_nested_object_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_08_defer_nested_object_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/products_defer_08_defer_nested_object_reconstructed.json diff --git a/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql b/router-tests/protocol/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql rename to router-tests/protocol/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.graphql diff --git a/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.txt b/router-tests/protocol/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.txt rename to router-tests/protocol/testdata/queries_defer/products_defer_09_duplicated_field_across_defer.txt diff --git a/router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/products_defer_09_duplicated_field_across_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_09_duplicated_field_across_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/products_defer_09_duplicated_field_across_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.graphql b/router-tests/protocol/testdata/queries_defer/products_defer_10_extensive_parallel.graphql similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.graphql rename to router-tests/protocol/testdata/queries_defer/products_defer_10_extensive_parallel.graphql diff --git a/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.txt b/router-tests/protocol/testdata/queries_defer/products_defer_10_extensive_parallel.txt similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_10_extensive_parallel.txt rename to router-tests/protocol/testdata/queries_defer/products_defer_10_extensive_parallel.txt diff --git a/router-tests/testdata/queries_defer/products_defer_10_extensive_parallel_reconstructed.json b/router-tests/protocol/testdata/queries_defer/products_defer_10_extensive_parallel_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_10_extensive_parallel_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/products_defer_10_extensive_parallel_reconstructed.json diff --git a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql b/router-tests/protocol/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql rename to router-tests/protocol/testdata/queries_defer/products_defer_11_fragment_around_and_inside.graphql diff --git a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt b/router-tests/protocol/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt rename to router-tests/protocol/testdata/queries_defer/products_defer_11_fragment_around_and_inside.txt diff --git a/router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside_reconstructed.json b/router-tests/protocol/testdata/queries_defer/products_defer_11_fragment_around_and_inside_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_11_fragment_around_and_inside_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/products_defer_11_fragment_around_and_inside_reconstructed.json diff --git a/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql b/router-tests/protocol/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql rename to router-tests/protocol/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql diff --git a/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql.todo b/router-tests/protocol/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql.todo similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql.todo rename to router-tests/protocol/testdata/queries_defer/products_defer_12_fragment_body_defer.graphql.todo diff --git a/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.txt b/router-tests/protocol/testdata/queries_defer/products_defer_12_fragment_body_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer.txt rename to router-tests/protocol/testdata/queries_defer/products_defer_12_fragment_body_defer.txt diff --git a/router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/products_defer_12_fragment_body_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_12_fragment_body_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/products_defer_12_fragment_body_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql b/router-tests/protocol/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql rename to router-tests/protocol/testdata/queries_defer/products_defer_13_fragment_spread_defer.graphql diff --git a/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt b/router-tests/protocol/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt rename to router-tests/protocol/testdata/queries_defer/products_defer_13_fragment_spread_defer.txt diff --git a/router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/products_defer_13_fragment_spread_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/products_defer_13_fragment_spread_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/products_defer_13_fragment_spread_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/products_original.graphql b/router-tests/protocol/testdata/queries_defer/products_original.graphql similarity index 100% rename from router-tests/testdata/queries_defer/products_original.graphql rename to router-tests/protocol/testdata/queries_defer/products_original.graphql diff --git a/router-tests/testdata/queries_defer/products_original.json b/router-tests/protocol/testdata/queries_defer/products_original.json similarity index 100% rename from router-tests/testdata/queries_defer/products_original.json rename to router-tests/protocol/testdata/queries_defer/products_original.json diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.graphql b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_01_single_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.graphql rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_01_single_defer.graphql diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.txt b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_01_single_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer.txt rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_01_single_defer.txt diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_01_single_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_01_single_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_01_single_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.graphql b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.graphql rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.graphql diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.txt b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.txt rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular.txt diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_02_single_defer_between_regular_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_03_multiple_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_04_all_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.graphql b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.graphql rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.graphql diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.txt b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.txt rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_05_nested_defer.txt diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_05_nested_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_05_nested_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_05_nested_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.graphql b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.graphql rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.graphql diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation.txt diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_06_nested_defer_variation_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.graphql b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.graphql rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.graphql diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers.txt diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_07_parallel_defers_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.graphql b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.graphql rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.graphql diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.txt b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.txt rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object.txt diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_08_defer_nested_object_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.graphql b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.graphql rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.graphql diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.txt b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.txt rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer.txt diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_09_duplicated_field_across_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.graphql b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.graphql rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.graphql diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel.txt diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_10_extensive_parallel_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.graphql b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.graphql rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.graphql diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside.txt diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_11_fragment_around_and_inside_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.graphql b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.graphql rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.graphql diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.txt b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.txt rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer.txt diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_12_fragment_body_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.graphql b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.graphql rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.graphql diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.txt b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.txt rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer.txt diff --git a/router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_defer_13_fragment_spread_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_different_depth_original.graphql b/router-tests/protocol/testdata/queries_defer/requires_different_depth_original.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_original.graphql rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_original.graphql diff --git a/router-tests/testdata/queries_defer/requires_different_depth_original.json b/router-tests/protocol/testdata/queries_defer/requires_different_depth_original.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_different_depth_original.json rename to router-tests/protocol/testdata/queries_defer/requires_different_depth_original.json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.graphql b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_01_single_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.graphql rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_01_single_defer.graphql diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.txt b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_01_single_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer.txt rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_01_single_defer.txt diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_01_single_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_01_single_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_01_single_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.graphql b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.graphql rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.graphql diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.txt b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.txt rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular.txt diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_02_single_defer_between_regular_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_03_multiple_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.graphql b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.graphql rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.graphql diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.txt b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.txt rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred.txt diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_04_all_fields_deferred_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer.graphql b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_05_nested_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer.graphql rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_05_nested_defer.graphql diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer.txt b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_05_nested_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer.txt rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_05_nested_defer.txt diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_05_nested_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_05_nested_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_05_nested_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.graphql b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.graphql rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.graphql diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.txt b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.txt rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation.txt diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_06_nested_defer_variation_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.graphql b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_07_parallel_defers.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.graphql rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_07_parallel_defers.graphql diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.txt b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_07_parallel_defers.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers.txt rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_07_parallel_defers.txt diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_07_parallel_defers_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_07_parallel_defers_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_07_parallel_defers_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.graphql b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.graphql rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.graphql diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.txt b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.txt rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_08_defer_nested_object.txt diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_08_defer_nested_object_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_08_defer_nested_object_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_08_defer_nested_object_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.graphql b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.graphql rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.graphql diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.txt b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.txt rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer.txt diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_09_duplicated_field_across_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.graphql b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.graphql rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.graphql diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_10_extensive_parallel.txt diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_10_extensive_parallel_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_10_extensive_parallel_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_10_extensive_parallel_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.graphql b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.graphql rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.graphql diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.txt b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.txt rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside.txt diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_11_fragment_around_and_inside_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.graphql b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.graphql rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.graphql diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.txt b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.txt rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer.txt diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_12_fragment_body_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.graphql b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.graphql rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.graphql diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.txt b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.txt similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.txt rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer.txt diff --git a/router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer_reconstructed.json b/router-tests/protocol/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer_reconstructed.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer_reconstructed.json rename to router-tests/protocol/testdata/queries_defer/requires_mood_defer_13_fragment_spread_defer_reconstructed.json diff --git a/router-tests/testdata/queries_defer/requires_mood_original.graphql b/router-tests/protocol/testdata/queries_defer/requires_mood_original.graphql similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_original.graphql rename to router-tests/protocol/testdata/queries_defer/requires_mood_original.graphql diff --git a/router-tests/testdata/queries_defer/requires_mood_original.json b/router-tests/protocol/testdata/queries_defer/requires_mood_original.json similarity index 100% rename from router-tests/testdata/queries_defer/requires_mood_original.json rename to router-tests/protocol/testdata/queries_defer/requires_mood_original.json From 8721a19614a9b3045c20189c00808dab2ca928af Mon Sep 17 00:00:00 2001 From: spetrunin Date: Tue, 7 Apr 2026 22:04:54 +0300 Subject: [PATCH 21/23] fix build, disable debug logs --- router-tests/protocol/defer_test.go | 8 ++++---- router-tests/protocol/testdata/queries_defer/README.md | 4 ++-- router/core/plan_generator.go | 1 - 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/router-tests/protocol/defer_test.go b/router-tests/protocol/defer_test.go index e0b8f04792..3c94a3030f 100644 --- a/router-tests/protocol/defer_test.go +++ b/router-tests/protocol/defer_test.go @@ -58,7 +58,7 @@ func TestDeferTestDataQueries(t *testing.T) { t.Run(group, func(t *testing.T) { for _, name := range groupQueries[group] { t.Run(name, func(t *testing.T) { - // t.Parallel() + t.Parallel() gMultipart := goldie.New( t, @@ -76,10 +76,10 @@ func TestDeferTestDataQueries(t *testing.T) { testenv.Run(t, &testenv.Config{ NoRetryClient: true, ModifyEngineExecutionConfiguration: func(cfg *config.EngineExecutionConfiguration) { - cfg.Debug.PrintIntermediateQueryPlans = true - cfg.Debug.PrintPlanningPaths = true + // cfg.Debug.PrintIntermediateQueryPlans = true + // cfg.Debug.PrintPlanningPaths = true // cfg.Debug.PrintNodeSuggestions = true - cfg.Debug.PrintOperationTransformations = true + // cfg.Debug.PrintOperationTransformations = true }, }, func(t *testing.T, xEnv *testenv.Environment) { queryFilePath := filepath.Join(testDir, fmt.Sprintf("%s.graphql", name)) diff --git a/router-tests/protocol/testdata/queries_defer/README.md b/router-tests/protocol/testdata/queries_defer/README.md index 2c2e2aa3d9..248dfb5e93 100644 --- a/router-tests/protocol/testdata/queries_defer/README.md +++ b/router-tests/protocol/testdata/queries_defer/README.md @@ -5,7 +5,7 @@ along with their golden response fixtures (`.txt`). ## Naming Convention -``` +```text {source}_{number}_{description}.graphql ``` @@ -47,7 +47,7 @@ definitions, inline fragments are first promoted to named fragment definitions. ```bash cd router-tests -go test -v -run TestDeferTestdataQueries -update ./... +go test -v -run TestDeferTestDataQueries -update ./... ``` Fixtures are deterministic because defer resolution is sequential in this router implementation. diff --git a/router/core/plan_generator.go b/router/core/plan_generator.go index 76ddd08666..9a66d5fede 100644 --- a/router/core/plan_generator.go +++ b/router/core/plan_generator.go @@ -28,7 +28,6 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/datasource/introspection_datasource" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/postprocess" - "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/resolve" "github.com/wundergraph/graphql-go-tools/v2/pkg/operationreport" ) From 9be59390088154968aff1e7169b88268edfe6552 Mon Sep 17 00:00:00 2001 From: spetrunin Date: Tue, 7 Apr 2026 22:44:17 +0300 Subject: [PATCH 22/23] add forwarding headers for deferred queries --- router-tests/protocol/header_set_test.go | 31 ++++++++++++++-- router/core/context.go | 38 +++++++++++--------- router/core/graphql_prehandler.go | 4 +++ router/pkg/graphqlschemausage/schemausage.go | 2 ++ 4 files changed, 56 insertions(+), 19 deletions(-) diff --git a/router-tests/protocol/header_set_test.go b/router-tests/protocol/header_set_test.go index 0b973910d6..4f91fea774 100644 --- a/router-tests/protocol/header_set_test.go +++ b/router-tests/protocol/header_set_test.go @@ -1,23 +1,26 @@ package integration import ( - "github.com/wundergraph/cosmo/router-tests/testutils" - + "bytes" "fmt" + "io" "net/http" "strings" "testing" "time" + "github.com/wundergraph/cosmo/router-tests/testutils" + "github.com/MicahParks/jwkset" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.uber.org/zap" + "github.com/wundergraph/cosmo/router-tests/jwks" "github.com/wundergraph/cosmo/router-tests/testenv" "github.com/wundergraph/cosmo/router/core" "github.com/wundergraph/cosmo/router/pkg/authentication" "github.com/wundergraph/cosmo/router/pkg/config" - "go.uber.org/zap" ) func TestHeaderSet(t *testing.T) { @@ -76,6 +79,28 @@ func TestHeaderSet(t *testing.T) { require.Equal(t, fmt.Sprintf(`{"data":{"headerValue":"%s"}}`, employeeVal), res.Body) }) }) + + t.Run("global request rule sets header for defer", func(t *testing.T) { + t.Parallel() + testenv.Run(t, &testenv.Config{ + RouterOptions: global(customHeader, employeeVal), + }, func(t *testing.T, xEnv *testenv.Environment) { + payload := []byte(fmt.Sprintf(`{"query":"query { ... @defer { headerValue(name:\"%s\") } }"}`, customHeader)) + + req := xEnv.MakeGraphQLDeferRequest(http.MethodPost, bytes.NewReader(payload)) + res, err := xEnv.RouterClient.Do(req) + require.NoError(t, err) + defer func() { require.NoError(t, res.Body.Close()) }() + assert.Equal(t, http.StatusOK, res.StatusCode) + + body, err := io.ReadAll(res.Body) + require.NoError(t, err) + + bodyString := string(body) + assert.Contains(t, bodyString, `{"data":{},"hasNext":true}`) + assert.Contains(t, bodyString, fmt.Sprintf(`{"incremental":[{"data":{"headerValue":"%s"},"path":[]}],"hasNext":false}`, employeeVal)) + }) + }) }) t.Run("ResponseSet", func(t *testing.T) { diff --git a/router/core/context.go b/router/core/context.go index b29e8f9c3e..81da71bde5 100644 --- a/router/core/context.go +++ b/router/core/context.go @@ -17,6 +17,7 @@ import ( "go.uber.org/zap" "github.com/wundergraph/astjson" + graphqlmetrics "github.com/wundergraph/cosmo/router/gen/proto/wg/cosmo/graphqlmetrics/v1" rcontext "github.com/wundergraph/cosmo/router/internal/context" "github.com/wundergraph/cosmo/router/internal/expr" @@ -300,12 +301,10 @@ func SubgraphHeadersBuilder(ctx *requestContext, headerPropagation *HeaderPropag keyGen := xxhash.New() - switch p := executionPlan.(type) { - case *plan.SynchronousResponsePlan: - headers := make(map[string]*HeaderWithHash, len(p.Response.DataSources)) - for i := range p.Response.DataSources { - h, hh := headerPropagation.BuildRequestHeaderForSubgraph(p.Response.DataSources[i].Name, ctx) - headers[p.Response.DataSources[i].Name] = &HeaderWithHash{ + makeHeaders := func(headers map[string]*HeaderWithHash, dataSources []resolve.DataSourceInfo) { + for i := range dataSources { + h, hh := headerPropagation.BuildRequestHeaderForSubgraph(dataSources[i].Name, ctx) + headers[dataSources[i].Name] = &HeaderWithHash{ Header: h, Hash: hh, } @@ -313,22 +312,29 @@ func SubgraphHeadersBuilder(ctx *requestContext, headerPropagation *HeaderPropag binary.LittleEndian.PutUint64(b[:], hh) _, _ = keyGen.Write(b[:]) } + } + + switch p := executionPlan.(type) { + case *plan.SynchronousResponsePlan: + headers := make(map[string]*HeaderWithHash, len(p.Response.DataSources)) + makeHeaders(headers, p.Response.DataSources) + + return &headerBuilder{ + headers: headers, + allHash: keyGen.Sum64(), + } + case *plan.DeferResponsePlan: + headers := make(map[string]*HeaderWithHash, len(p.Response.Response.DataSources)) + makeHeaders(headers, p.Response.Response.DataSources) + return &headerBuilder{ headers: headers, allHash: keyGen.Sum64(), } case *plan.SubscriptionResponsePlan: headers := make(map[string]*HeaderWithHash, len(p.Response.Response.DataSources)+1) - for i := range p.Response.Response.DataSources { - h, hh := headerPropagation.BuildRequestHeaderForSubgraph(p.Response.Response.DataSources[i].Name, ctx) - headers[p.Response.Response.DataSources[i].Name] = &HeaderWithHash{ - Header: h, - Hash: hh, - } - var b [8]byte - binary.LittleEndian.PutUint64(b[:], hh) - _, _ = keyGen.Write(b[:]) - } + makeHeaders(headers, p.Response.Response.DataSources) + h, hh := headerPropagation.BuildRequestHeaderForSubgraph(p.Response.Trigger.SourceName, ctx) headers[p.Response.Trigger.SourceName] = &HeaderWithHash{ Header: h, diff --git a/router/core/graphql_prehandler.go b/router/core/graphql_prehandler.go index 96dd178972..38da922ce9 100644 --- a/router/core/graphql_prehandler.go +++ b/router/core/graphql_prehandler.go @@ -1165,6 +1165,8 @@ func (h *PreHandler) handleOperation(req *http.Request, httpOperation *httpOpera switch p := requestContext.operation.preparedPlan.preparedPlan.(type) { case *plan.SynchronousResponsePlan: p.Response.Fetches.NormalizedQuery = operationKit.parsedOperation.NormalizedRepresentation + case *plan.DeferResponsePlan: + // TODO: handle } if h.queryPlansLoggingEnabled { @@ -1174,6 +1176,8 @@ func (h *PreHandler) handleOperation(req *http.Request, httpOperation *httpOpera printedPlan = p.Response.Fetches.QueryPlan().PrettyPrint() case *plan.SubscriptionResponsePlan: printedPlan = p.Response.Response.Fetches.QueryPlan().PrettyPrint() + case *plan.DeferResponsePlan: + // TODO: handle } if h.developmentMode { h.log.Sugar().Debugf("Query Plan:\n%s", printedPlan) diff --git a/router/pkg/graphqlschemausage/schemausage.go b/router/pkg/graphqlschemausage/schemausage.go index f52bc7e6ec..69cc4ff50e 100644 --- a/router/pkg/graphqlschemausage/schemausage.go +++ b/router/pkg/graphqlschemausage/schemausage.go @@ -495,6 +495,8 @@ func buildFieldSubgraphIDMap(operationPlan plan.Plan) map[string][]string { switch p := operationPlan.(type) { case *plan.SynchronousResponsePlan: collector.collectFromNode(p.Response.Data) + case *plan.DeferResponsePlan: + // TODO: handle case *plan.SubscriptionResponsePlan: collector.collectFromNode(p.Response.Response.Data) } From 70cd5ba36de521c966cd2c7e7dd5ebbf21142e42 Mon Sep 17 00:00:00 2001 From: spetrunin Date: Thu, 9 Apr 2026 21:39:10 +0300 Subject: [PATCH 23/23] update engine --- router-tests/go.mod | 2 +- router-tests/go.sum | 4 ++-- router/go.mod | 2 +- router/go.sum | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/router-tests/go.mod b/router-tests/go.mod index e854cb2e7b..0e8314fb81 100644 --- a/router-tests/go.mod +++ b/router-tests/go.mod @@ -28,7 +28,7 @@ require ( github.com/wundergraph/cosmo/demo/pkg/subgraphs/projects v0.0.0-20250715110703-10f2e5f9c79e github.com/wundergraph/cosmo/router v0.0.0-20260319123623-f186a0f724f6 github.com/wundergraph/cosmo/router-plugin v0.0.0-20250808194725-de123ba1c65e - github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260407174232-081cac6b40ad + github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260409183305-e7151238827b go.opentelemetry.io/otel v1.39.0 go.opentelemetry.io/otel/sdk v1.39.0 go.opentelemetry.io/otel/sdk/metric v1.39.0 diff --git a/router-tests/go.sum b/router-tests/go.sum index 250114f512..032aa984dc 100644 --- a/router-tests/go.sum +++ b/router-tests/go.sum @@ -357,8 +357,8 @@ github.com/wundergraph/astjson v1.1.0 h1:xORDosrZ87zQFJwNGe/HIHXqzpdHOFmqWgykCLV github.com/wundergraph/astjson v1.1.0/go.mod h1:h12D/dxxnedtLzsKyBLK7/Oe4TAoGpRVC9nDpDrZSWw= github.com/wundergraph/go-arena v1.1.0 h1:9+wSRkJAkA2vbYHp6s8tEGhPViRGQNGXqPHT0QzhdIc= github.com/wundergraph/go-arena v1.1.0/go.mod h1:ROOysEHWJjLQ8FSfNxZCziagb7Qw2nXY3/vgKRh7eWw= -github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260407174232-081cac6b40ad h1:/0C+lob5jeF4/J4BQCFyLyxq6KSovSOxdE/poP5en8o= -github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260407174232-081cac6b40ad/go.mod h1:HjTAO/cuICpu31IfHY9qmSPygx6Gza7Wt9hTSReTI+A= +github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260409183305-e7151238827b h1:8qC1P3uSAyxD3qU0ne88xNjA08KAIyeCRuxKQQn7wa4= +github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260409183305-e7151238827b/go.mod h1:HjTAO/cuICpu31IfHY9qmSPygx6Gza7Wt9hTSReTI+A= github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342 h1:FnBeRrxr7OU4VvAzt5X7s6266i6cSVkkFPS0TuXWbIg= github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= diff --git a/router/go.mod b/router/go.mod index 45b028834d..9d28417163 100644 --- a/router/go.mod +++ b/router/go.mod @@ -31,7 +31,7 @@ require ( github.com/tidwall/gjson v1.18.0 github.com/tidwall/sjson v1.2.5 github.com/twmb/franz-go v1.16.1 - github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260407174232-081cac6b40ad + github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260409183305-e7151238827b // Do not upgrade, it renames attributes we rely on go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 go.opentelemetry.io/contrib/propagators/b3 v1.23.0 diff --git a/router/go.sum b/router/go.sum index 60899bb173..f0915fda8a 100644 --- a/router/go.sum +++ b/router/go.sum @@ -329,8 +329,8 @@ github.com/wundergraph/astjson v1.1.0 h1:xORDosrZ87zQFJwNGe/HIHXqzpdHOFmqWgykCLV github.com/wundergraph/astjson v1.1.0/go.mod h1:h12D/dxxnedtLzsKyBLK7/Oe4TAoGpRVC9nDpDrZSWw= github.com/wundergraph/go-arena v1.1.0 h1:9+wSRkJAkA2vbYHp6s8tEGhPViRGQNGXqPHT0QzhdIc= github.com/wundergraph/go-arena v1.1.0/go.mod h1:ROOysEHWJjLQ8FSfNxZCziagb7Qw2nXY3/vgKRh7eWw= -github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260407174232-081cac6b40ad h1:/0C+lob5jeF4/J4BQCFyLyxq6KSovSOxdE/poP5en8o= -github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260407174232-081cac6b40ad/go.mod h1:HjTAO/cuICpu31IfHY9qmSPygx6Gza7Wt9hTSReTI+A= +github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260409183305-e7151238827b h1:8qC1P3uSAyxD3qU0ne88xNjA08KAIyeCRuxKQQn7wa4= +github.com/wundergraph/graphql-go-tools/v2 v2.0.0-rc.267.0.20260409183305-e7151238827b/go.mod h1:HjTAO/cuICpu31IfHY9qmSPygx6Gza7Wt9hTSReTI+A= github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4= github.com/yuin/gopher-lua v1.1.1 h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M=