@apollo/gateway 2.4.4 → 2.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/dist/__generated__/graphqlTypes.d.ts +178 -0
  2. package/dist/__generated__/graphqlTypes.d.ts.map +1 -0
  3. package/dist/__generated__/graphqlTypes.js +31 -0
  4. package/dist/__generated__/graphqlTypes.js.map +1 -0
  5. package/dist/config.d.ts +138 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +60 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/dataRewrites.d.ts +5 -0
  10. package/dist/dataRewrites.d.ts.map +1 -0
  11. package/dist/dataRewrites.js +103 -0
  12. package/dist/dataRewrites.js.map +1 -0
  13. package/dist/datasources/LocalGraphQLDataSource.d.ts +10 -0
  14. package/dist/datasources/LocalGraphQLDataSource.d.ts.map +1 -0
  15. package/dist/datasources/LocalGraphQLDataSource.js +31 -0
  16. package/dist/datasources/LocalGraphQLDataSource.js.map +1 -0
  17. package/dist/datasources/RemoteGraphQLDataSource.d.ts +24 -0
  18. package/dist/datasources/RemoteGraphQLDataSource.d.ts.map +1 -0
  19. package/dist/datasources/RemoteGraphQLDataSource.js +180 -0
  20. package/dist/datasources/RemoteGraphQLDataSource.js.map +1 -0
  21. package/dist/datasources/index.d.ts +4 -0
  22. package/dist/datasources/index.d.ts.map +1 -0
  23. package/dist/datasources/index.js +8 -0
  24. package/dist/datasources/index.js.map +1 -0
  25. package/dist/datasources/parseCacheControlHeader.d.ts +2 -0
  26. package/dist/datasources/parseCacheControlHeader.d.ts.map +1 -0
  27. package/dist/datasources/parseCacheControlHeader.js +16 -0
  28. package/dist/datasources/parseCacheControlHeader.js.map +1 -0
  29. package/dist/datasources/types.d.ts +23 -0
  30. package/dist/datasources/types.d.ts.map +1 -0
  31. package/dist/datasources/types.js +10 -0
  32. package/dist/datasources/types.js.map +1 -0
  33. package/dist/executeQueryPlan.d.ts +15 -0
  34. package/dist/executeQueryPlan.d.ts.map +1 -0
  35. package/dist/executeQueryPlan.js +539 -0
  36. package/dist/executeQueryPlan.js.map +1 -0
  37. package/dist/index.d.ts +113 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +590 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/logger.d.ts +3 -0
  42. package/dist/logger.d.ts.map +1 -0
  43. package/dist/logger.js +15 -0
  44. package/dist/logger.js.map +1 -0
  45. package/dist/operationContext.d.ts +17 -0
  46. package/dist/operationContext.d.ts.map +1 -0
  47. package/dist/operationContext.js +38 -0
  48. package/dist/operationContext.js.map +1 -0
  49. package/dist/resultShaping.d.ts +12 -0
  50. package/dist/resultShaping.d.ts.map +1 -0
  51. package/dist/resultShaping.js +229 -0
  52. package/dist/resultShaping.js.map +1 -0
  53. package/dist/schema-helper/addExtensions.d.ts +3 -0
  54. package/dist/schema-helper/addExtensions.d.ts.map +1 -0
  55. package/dist/schema-helper/addExtensions.js +23 -0
  56. package/dist/schema-helper/addExtensions.js.map +1 -0
  57. package/dist/supergraphManagers/IntrospectAndCompose/index.d.ts +31 -0
  58. package/dist/supergraphManagers/IntrospectAndCompose/index.d.ts.map +1 -0
  59. package/dist/supergraphManagers/IntrospectAndCompose/index.js +112 -0
  60. package/dist/supergraphManagers/IntrospectAndCompose/index.js.map +1 -0
  61. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.d.ts +12 -0
  62. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.d.ts.map +1 -0
  63. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.js +57 -0
  64. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.js.map +1 -0
  65. package/dist/supergraphManagers/LegacyFetcher/index.d.ts +33 -0
  66. package/dist/supergraphManagers/LegacyFetcher/index.d.ts.map +1 -0
  67. package/dist/supergraphManagers/LegacyFetcher/index.js +149 -0
  68. package/dist/supergraphManagers/LegacyFetcher/index.js.map +1 -0
  69. package/dist/supergraphManagers/LocalCompose/index.d.ts +19 -0
  70. package/dist/supergraphManagers/LocalCompose/index.d.ts.map +1 -0
  71. package/dist/supergraphManagers/LocalCompose/index.js +55 -0
  72. package/dist/supergraphManagers/LocalCompose/index.js.map +1 -0
  73. package/dist/supergraphManagers/UplinkSupergraphManager/index.d.ts +63 -0
  74. package/dist/supergraphManagers/UplinkSupergraphManager/index.d.ts.map +1 -0
  75. package/dist/supergraphManagers/UplinkSupergraphManager/index.js +210 -0
  76. package/dist/supergraphManagers/UplinkSupergraphManager/index.js.map +1 -0
  77. package/dist/supergraphManagers/UplinkSupergraphManager/loadSupergraphSdlFromStorage.d.ts +30 -0
  78. package/dist/supergraphManagers/UplinkSupergraphManager/loadSupergraphSdlFromStorage.d.ts.map +1 -0
  79. package/dist/supergraphManagers/UplinkSupergraphManager/loadSupergraphSdlFromStorage.js +145 -0
  80. package/dist/supergraphManagers/UplinkSupergraphManager/loadSupergraphSdlFromStorage.js.map +1 -0
  81. package/dist/supergraphManagers/UplinkSupergraphManager/outOfBandReporter.d.ts +14 -0
  82. package/dist/supergraphManagers/UplinkSupergraphManager/outOfBandReporter.d.ts.map +1 -0
  83. package/dist/supergraphManagers/UplinkSupergraphManager/outOfBandReporter.js +85 -0
  84. package/dist/supergraphManagers/UplinkSupergraphManager/outOfBandReporter.js.map +1 -0
  85. package/dist/supergraphManagers/index.d.ts +6 -0
  86. package/dist/supergraphManagers/index.d.ts.map +1 -0
  87. package/dist/supergraphManagers/index.js +27 -0
  88. package/dist/supergraphManagers/index.js.map +1 -0
  89. package/dist/typings/graphql.d.ts +11 -0
  90. package/dist/typings/graphql.d.ts.map +1 -0
  91. package/dist/typings/graphql.js +3 -0
  92. package/dist/typings/graphql.js.map +1 -0
  93. package/dist/utilities/array.d.ts +5 -0
  94. package/dist/utilities/array.d.ts.map +1 -0
  95. package/dist/utilities/array.js +46 -0
  96. package/dist/utilities/array.js.map +1 -0
  97. package/dist/utilities/assert.d.ts +2 -0
  98. package/dist/utilities/assert.d.ts.map +1 -0
  99. package/dist/utilities/assert.js +10 -0
  100. package/dist/utilities/assert.js.map +1 -0
  101. package/dist/utilities/deepMerge.d.ts +2 -0
  102. package/dist/utilities/deepMerge.d.ts.map +1 -0
  103. package/dist/utilities/deepMerge.js +34 -0
  104. package/dist/utilities/deepMerge.js.map +1 -0
  105. package/dist/utilities/graphql.d.ts +5 -0
  106. package/dist/utilities/graphql.d.ts.map +1 -0
  107. package/dist/utilities/graphql.js +28 -0
  108. package/dist/utilities/graphql.js.map +1 -0
  109. package/dist/utilities/opentelemetry.d.ts +10 -0
  110. package/dist/utilities/opentelemetry.d.ts.map +1 -0
  111. package/dist/utilities/opentelemetry.js +19 -0
  112. package/dist/utilities/opentelemetry.js.map +1 -0
  113. package/dist/utilities/predicates.d.ts +2 -0
  114. package/dist/utilities/predicates.d.ts.map +1 -0
  115. package/dist/utilities/predicates.js +11 -0
  116. package/dist/utilities/predicates.js.map +1 -0
  117. package/package.json +4 -4
  118. package/src/__generated__/graphqlTypes.ts +33 -2
  119. package/src/__mocks__/tsconfig.json +0 -7
  120. package/src/__tests__/.gitkeep +0 -0
  121. package/src/__tests__/CucumberREADME.md +0 -96
  122. package/src/__tests__/build-query-plan.feature +0 -1471
  123. package/src/__tests__/buildQueryPlan.test.ts +0 -1225
  124. package/src/__tests__/executeQueryPlan.conditions.test.ts +0 -1488
  125. package/src/__tests__/executeQueryPlan.introspection.test.ts +0 -140
  126. package/src/__tests__/executeQueryPlan.test.ts +0 -6140
  127. package/src/__tests__/execution-utils.ts +0 -124
  128. package/src/__tests__/gateway/__snapshots__/opentelemetry.test.ts.snap +0 -195
  129. package/src/__tests__/gateway/buildService.test.ts +0 -249
  130. package/src/__tests__/gateway/endToEnd.test.ts +0 -486
  131. package/src/__tests__/gateway/executor.test.ts +0 -96
  132. package/src/__tests__/gateway/extensions.test.ts +0 -37
  133. package/src/__tests__/gateway/lifecycle-hooks.test.ts +0 -239
  134. package/src/__tests__/gateway/opentelemetry.test.ts +0 -123
  135. package/src/__tests__/gateway/queryPlanCache.test.ts +0 -231
  136. package/src/__tests__/gateway/queryPlannerConfig.test.ts +0 -101
  137. package/src/__tests__/gateway/reporting.test.ts +0 -616
  138. package/src/__tests__/gateway/supergraphSdl.test.ts +0 -396
  139. package/src/__tests__/gateway/testUtils.ts +0 -89
  140. package/src/__tests__/integration/abstract-types.test.ts +0 -1861
  141. package/src/__tests__/integration/aliases.test.ts +0 -180
  142. package/src/__tests__/integration/boolean.test.ts +0 -279
  143. package/src/__tests__/integration/complex-key.test.ts +0 -197
  144. package/src/__tests__/integration/configuration.test.ts +0 -404
  145. package/src/__tests__/integration/custom-directives.test.ts +0 -174
  146. package/src/__tests__/integration/execution-style.test.ts +0 -35
  147. package/src/__tests__/integration/fragments.test.ts +0 -237
  148. package/src/__tests__/integration/list-key.test.ts +0 -128
  149. package/src/__tests__/integration/logger.test.ts +0 -122
  150. package/src/__tests__/integration/managed.test.ts +0 -319
  151. package/src/__tests__/integration/merge-arrays.test.ts +0 -34
  152. package/src/__tests__/integration/multiple-key.test.ts +0 -327
  153. package/src/__tests__/integration/mutations.test.ts +0 -287
  154. package/src/__tests__/integration/networkRequests.test.ts +0 -542
  155. package/src/__tests__/integration/nockMocks.ts +0 -157
  156. package/src/__tests__/integration/provides.test.ts +0 -77
  157. package/src/__tests__/integration/requires.test.ts +0 -359
  158. package/src/__tests__/integration/scope.test.ts +0 -557
  159. package/src/__tests__/integration/single-service.test.ts +0 -119
  160. package/src/__tests__/integration/unions.test.ts +0 -79
  161. package/src/__tests__/integration/value-types.test.ts +0 -382
  162. package/src/__tests__/integration/variables.test.ts +0 -120
  163. package/src/__tests__/nockAssertions.ts +0 -20
  164. package/src/__tests__/queryPlanCucumber.test.ts +0 -55
  165. package/src/__tests__/resultShaping.test.ts +0 -605
  166. package/src/__tests__/testSetup.ts +0 -1
  167. package/src/__tests__/tsconfig.json +0 -8
  168. package/src/core/__tests__/core.test.ts +0 -412
  169. package/src/datasources/__tests__/LocalGraphQLDataSource.test.ts +0 -51
  170. package/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts +0 -574
  171. package/src/schema-helper/__tests__/addExtensions.test.ts +0 -70
  172. package/src/supergraphManagers/IntrospectAndCompose/__tests__/IntrospectAndCompose.test.ts +0 -364
  173. package/src/supergraphManagers/IntrospectAndCompose/__tests__/loadServicesFromRemoteEndpoint.test.ts +0 -40
  174. package/src/supergraphManagers/UplinkSupergraphManager/__tests__/UplinkSupergraphManager.test.ts +0 -65
  175. package/src/supergraphManagers/UplinkSupergraphManager/__tests__/loadSupergraphSdlFromStorage.test.ts +0 -511
  176. package/src/utilities/__tests__/deepMerge.test.ts +0 -77
@@ -1,557 +0,0 @@
1
- import gql from 'graphql-tag';
2
- import { execute } from '../execution-utils';
3
-
4
- import {
5
- astSerializer,
6
- queryPlanSerializer,
7
- } from 'apollo-federation-integration-testsuite';
8
-
9
- expect.addSnapshotSerializer(astSerializer);
10
- expect.addSnapshotSerializer(queryPlanSerializer);
11
-
12
- describe('scope', () => {
13
- it("doesn't wrap inline fragments with the supertype when @include is used", async () => {
14
- const query = `#graphql
15
- query GetProducts {
16
- topProducts {
17
- name
18
- ... on Shoe @include(if: true) {
19
- rating
20
- }
21
- ... on Car {
22
- rating
23
- }
24
- }
25
- }
26
- `;
27
-
28
- const { queryPlan, errors } = await execute({ query }, [
29
- {
30
- name: 'products',
31
- typeDefs: gql`
32
- extend type Query {
33
- topProducts: [Product]
34
- }
35
-
36
- interface Product {
37
- name: String
38
- }
39
-
40
- type Shoe implements Product @key(fields: "upc") {
41
- upc: String
42
- name: String
43
- }
44
-
45
- type Car implements Product @key(fields: "upc") {
46
- upc: String
47
- name: String
48
- }
49
- `,
50
- },
51
- {
52
- name: 'reviews',
53
- typeDefs: gql`
54
- extend type Shoe @key(fields: "upc") {
55
- upc: String @external
56
- rating: Int
57
- }
58
-
59
- extend type Car @key(fields: "upc") {
60
- upc: String @external
61
- rating: Int
62
- }
63
- `,
64
- },
65
- ]);
66
-
67
- expect(errors).toBeUndefined();
68
- expect(queryPlan).toMatchInlineSnapshot(`
69
- QueryPlan {
70
- Sequence {
71
- Fetch(service: "products") {
72
- {
73
- topProducts {
74
- __typename
75
- name
76
- ... on Shoe @include(if: true) {
77
- __typename
78
- upc
79
- }
80
- ... on Car {
81
- __typename
82
- upc
83
- }
84
- }
85
- }
86
- },
87
- Flatten(path: "topProducts.@") {
88
- Fetch(service: "reviews") {
89
- {
90
- ... on Shoe {
91
- __typename
92
- upc
93
- }
94
- ... on Car {
95
- __typename
96
- upc
97
- }
98
- } =>
99
- {
100
- ... on Shoe @include(if: true) {
101
- rating
102
- }
103
- ... on Car {
104
- rating
105
- }
106
- }
107
- },
108
- },
109
- },
110
- }
111
- `);
112
- });
113
-
114
- it("doesn't merge conditions on the same type when one has a @include", async () => {
115
- const query = `#graphql
116
- query GetProducts {
117
- topProducts {
118
- name
119
- ... on Shoe {
120
- reviewsCount
121
- }
122
- ... on Shoe @include(if: true) {
123
- rating
124
- }
125
- ... on Car {
126
- rating
127
- }
128
- }
129
- }
130
- `;
131
-
132
- const { queryPlan, errors } = await execute({ query }, [
133
- {
134
- name: 'products',
135
- typeDefs: gql`
136
- extend type Query {
137
- topProducts: [Product]
138
- }
139
-
140
- interface Product {
141
- name: String
142
- }
143
-
144
- type Shoe implements Product @key(fields: "upc") {
145
- upc: String
146
- name: String
147
- }
148
-
149
- type Car implements Product @key(fields: "upc") {
150
- upc: String
151
- name: String
152
- }
153
- `,
154
- },
155
- {
156
- name: 'reviews',
157
- typeDefs: gql`
158
- extend type Shoe @key(fields: "upc") {
159
- upc: String @external
160
- rating: Int
161
- reviewsCount: Int
162
- }
163
-
164
- extend type Car @key(fields: "upc") {
165
- upc: String @external
166
- rating: Int
167
- }
168
- `,
169
- },
170
- ]);
171
-
172
- expect(errors).toBeUndefined();
173
- expect(queryPlan).toMatchInlineSnapshot(`
174
- QueryPlan {
175
- Sequence {
176
- Fetch(service: "products") {
177
- {
178
- topProducts {
179
- __typename
180
- name
181
- ... on Shoe {
182
- __typename
183
- upc
184
- }
185
- ... on Shoe @include(if: true) {
186
- __typename
187
- upc
188
- }
189
- ... on Car {
190
- __typename
191
- upc
192
- }
193
- }
194
- }
195
- },
196
- Flatten(path: "topProducts.@") {
197
- Fetch(service: "reviews") {
198
- {
199
- ... on Shoe {
200
- __typename
201
- upc
202
- }
203
- ... on Shoe {
204
- __typename
205
- upc
206
- }
207
- ... on Car {
208
- __typename
209
- upc
210
- }
211
- } =>
212
- {
213
- ... on Shoe {
214
- reviewsCount
215
- }
216
- ... on Shoe @include(if: true) {
217
- rating
218
- }
219
- ... on Car {
220
- rating
221
- }
222
- }
223
- },
224
- },
225
- },
226
- }
227
- `);
228
- });
229
-
230
- it("doesn't merge conditions on the same type when one has a @include even for the same selected field", async () => {
231
- const query = `#graphql
232
- query GetProducts {
233
- topProducts {
234
- name
235
- ... on Shoe {
236
- rating
237
- }
238
- ... on Shoe @include(if: true) {
239
- rating
240
- }
241
- ... on Car {
242
- rating
243
- }
244
- }
245
- }
246
- `;
247
-
248
- const { queryPlan, errors } = await execute({ query }, [
249
- {
250
- name: 'products',
251
- typeDefs: gql`
252
- extend type Query {
253
- topProducts: [Product]
254
- }
255
-
256
- interface Product {
257
- name: String
258
- }
259
-
260
- type Shoe implements Product @key(fields: "upc") {
261
- upc: String
262
- name: String
263
- }
264
-
265
- type Car implements Product @key(fields: "upc") {
266
- upc: String
267
- name: String
268
- }
269
- `,
270
- },
271
- {
272
- name: 'reviews',
273
- typeDefs: gql`
274
- extend type Shoe @key(fields: "upc") {
275
- upc: String @external
276
- rating: Int
277
- reviewsCount: Int
278
- }
279
-
280
- extend type Car @key(fields: "upc") {
281
- upc: String @external
282
- rating: Int
283
- }
284
- `,
285
- },
286
- ]);
287
-
288
- expect(errors).toBeUndefined();
289
- expect(queryPlan).toMatchInlineSnapshot(`
290
- QueryPlan {
291
- Sequence {
292
- Fetch(service: "products") {
293
- {
294
- topProducts {
295
- __typename
296
- name
297
- ... on Shoe {
298
- __typename
299
- upc
300
- }
301
- ... on Shoe @include(if: true) {
302
- __typename
303
- upc
304
- }
305
- ... on Car {
306
- __typename
307
- upc
308
- }
309
- }
310
- }
311
- },
312
- Flatten(path: "topProducts.@") {
313
- Fetch(service: "reviews") {
314
- {
315
- ... on Shoe {
316
- __typename
317
- upc
318
- }
319
- ... on Shoe {
320
- __typename
321
- upc
322
- }
323
- ... on Car {
324
- __typename
325
- upc
326
- }
327
- } =>
328
- {
329
- ... on Shoe {
330
- rating
331
- }
332
- ... on Shoe @include(if: true) {
333
- rating
334
- }
335
- ... on Car {
336
- rating
337
- }
338
- }
339
- },
340
- },
341
- },
342
- }
343
- `);
344
- });
345
-
346
- it("merges nested conditions when possible", async () => {
347
- const query = `#graphql
348
- query GetProducts {
349
- topProducts {
350
- name
351
- ... on Shoe @include(if: true) {
352
- ... on Shoe {
353
- rating
354
- }
355
- }
356
- ... on Car {
357
- rating
358
- }
359
- }
360
- }
361
- `;
362
-
363
- const { queryPlan, errors } = await execute({ query }, [
364
- {
365
- name: 'products',
366
- typeDefs: gql`
367
- extend type Query {
368
- topProducts: [Product]
369
- }
370
-
371
- interface Product {
372
- name: String
373
- }
374
-
375
- type Shoe implements Product @key(fields: "upc") {
376
- upc: String
377
- name: String
378
- }
379
-
380
- type Car implements Product @key(fields: "upc") {
381
- upc: String
382
- name: String
383
- }
384
- `,
385
- },
386
- {
387
- name: 'reviews',
388
- typeDefs: gql`
389
- extend type Shoe @key(fields: "upc") {
390
- upc: String @external
391
- rating: Int
392
- }
393
-
394
- extend type Car @key(fields: "upc") {
395
- upc: String @external
396
- rating: Int
397
- }
398
- `,
399
- },
400
- ]);
401
-
402
- expect(errors).toBeUndefined();
403
- expect(queryPlan).toMatchInlineSnapshot(`
404
- QueryPlan {
405
- Sequence {
406
- Fetch(service: "products") {
407
- {
408
- topProducts {
409
- __typename
410
- name
411
- ... on Shoe @include(if: true) {
412
- __typename
413
- upc
414
- }
415
- ... on Car {
416
- __typename
417
- upc
418
- }
419
- }
420
- }
421
- },
422
- Flatten(path: "topProducts.@") {
423
- Fetch(service: "reviews") {
424
- {
425
- ... on Shoe {
426
- __typename
427
- upc
428
- }
429
- ... on Car {
430
- __typename
431
- upc
432
- }
433
- } =>
434
- {
435
- ... on Shoe @include(if: true) {
436
- rating
437
- }
438
- ... on Car {
439
- rating
440
- }
441
- }
442
- },
443
- },
444
- },
445
- }
446
- `);
447
- });
448
-
449
- it("doesn't merge nested conditions when both have directives", async () => {
450
- const query = `#graphql
451
- query GetProducts {
452
- topProducts {
453
- name
454
- ... on Shoe @include(if: true) {
455
- ... on Shoe @skip(if: true) {
456
- rating
457
- }
458
- }
459
- ... on Car {
460
- rating
461
- }
462
- }
463
- }
464
- `;
465
-
466
- const { queryPlan, errors } = await execute({ query }, [
467
- {
468
- name: 'products',
469
- typeDefs: gql`
470
- extend type Query {
471
- topProducts: [Product]
472
- }
473
-
474
- interface Product {
475
- name: String
476
- }
477
-
478
- type Shoe implements Product @key(fields: "upc") {
479
- upc: String
480
- name: String
481
- }
482
-
483
- type Car implements Product @key(fields: "upc") {
484
- upc: String
485
- name: String
486
- }
487
- `,
488
- },
489
- {
490
- name: 'reviews',
491
- typeDefs: gql`
492
- extend type Shoe @key(fields: "upc") {
493
- upc: String @external
494
- rating: Int
495
- }
496
-
497
- extend type Car @key(fields: "upc") {
498
- upc: String @external
499
- rating: Int
500
- }
501
- `,
502
- },
503
- ]);
504
-
505
- expect(errors).toBeUndefined();
506
- expect(queryPlan).toMatchInlineSnapshot(`
507
- QueryPlan {
508
- Sequence {
509
- Fetch(service: "products") {
510
- {
511
- topProducts {
512
- __typename
513
- name
514
- ... on Shoe @include(if: true) {
515
- ... on Shoe @skip(if: true) {
516
- __typename
517
- upc
518
- }
519
- }
520
- ... on Car {
521
- __typename
522
- upc
523
- }
524
- }
525
- }
526
- },
527
- Flatten(path: "topProducts.@") {
528
- Fetch(service: "reviews") {
529
- {
530
- ... on Shoe {
531
- ... on Shoe {
532
- __typename
533
- upc
534
- }
535
- }
536
- ... on Car {
537
- __typename
538
- upc
539
- }
540
- } =>
541
- {
542
- ... on Shoe @include(if: true) {
543
- ... on Shoe @skip(if: true) {
544
- rating
545
- }
546
- }
547
- ... on Car {
548
- rating
549
- }
550
- }
551
- },
552
- },
553
- },
554
- }
555
- `);
556
- });
557
- });
@@ -1,119 +0,0 @@
1
- import gql from 'graphql-tag';
2
- import { execute, overrideResolversInService } from '../execution-utils';
3
-
4
- const accounts = {
5
- name: 'accounts',
6
- typeDefs: gql`
7
- type User @key(fields: "id") {
8
- id: Int!
9
- name: String
10
- account: Account
11
- }
12
- type Account {
13
- type: String
14
- }
15
- extend type Query {
16
- me: User
17
- }
18
- `,
19
- resolvers: {
20
- Query: {
21
- me: () => ({ id: 1, name: 'Me' }),
22
- },
23
- },
24
- };
25
-
26
- it('executes a query plan over concrete types', async () => {
27
- const me = jest.fn(() => ({ id: 1, name: 'James' }));
28
- const localAccounts = overrideResolversInService(accounts, {
29
- Query: { me },
30
- });
31
-
32
- const query = `#graphql
33
- query GetUser {
34
- me {
35
- id
36
- name
37
- }
38
- }
39
- `;
40
- const { data, queryPlan } = await execute(
41
- {
42
- query,
43
- },
44
- [localAccounts],
45
- );
46
-
47
- expect(data).toEqual({ me: { id: 1, name: 'James' } });
48
- expect(queryPlan).toCallService('accounts');
49
- expect(me).toBeCalled();
50
- });
51
-
52
- it('does not remove __typename on root types', async () => {
53
- const query = `#graphql
54
- query GetUser {
55
- __typename
56
- }
57
- `;
58
-
59
- const { data } = await execute(
60
- {
61
- query,
62
- },
63
- [accounts],
64
- );
65
-
66
- expect(data).toEqual({ __typename: 'Query' });
67
- });
68
-
69
- it('does not remove __typename if that is all that is requested on an entity', async () => {
70
- const me = jest.fn(() => ({ id: 1, name: 'James' }));
71
- const localAccounts = overrideResolversInService(accounts, {
72
- Query: { me },
73
- });
74
-
75
- const query = `#graphql
76
- query GetUser {
77
- me {
78
- __typename
79
- }
80
- }
81
- `;
82
- const { data, queryPlan } = await execute(
83
- {
84
- query,
85
- },
86
- [localAccounts],
87
- );
88
-
89
- expect(data).toEqual({ me: { __typename: 'User' } });
90
- expect(queryPlan).toCallService('accounts');
91
- expect(me).toBeCalled();
92
- });
93
-
94
- it('does not remove __typename if that is all that is requested on a value type', async () => {
95
- const me = jest.fn(() => ({ id: 1, name: 'James', account: {} }));
96
- const localAccounts = overrideResolversInService(accounts, {
97
- Query: { me },
98
- });
99
-
100
- const query = `#graphql
101
- query GetUser {
102
- me {
103
- account {
104
- __typename
105
- }
106
- }
107
- }
108
- `;
109
- const { data, queryPlan } = await execute(
110
- {
111
- query,
112
- },
113
- [localAccounts],
114
- );
115
-
116
- expect(data).toEqual({ me: { account: { __typename: 'Account' } } });
117
- expect(queryPlan).toCallService('accounts');
118
- expect(me).toBeCalled();
119
- });