@@ -15,7 +15,7 @@ import { GraphQLBoolean, GraphQLInt, GraphQLString } from '../../type/scalars';
15
15
import { GraphQLSchema } from '../../type/schema' ;
16
16
17
17
import type { ExecutionArgs , ExecutionResult } from '../execute' ;
18
- import { createSourceEventStream , subscribe } from '../execute' ;
18
+ import { createSourceEventStream , execute , subscribe } from '../execute' ;
19
19
20
20
import { SimplePubSub } from './simplePubSub' ;
21
21
@@ -122,7 +122,7 @@ function createSubscription(pubsub: SimplePubSub<Email>) {
122
122
} ) ,
123
123
} ;
124
124
125
- return subscribe ( { schema : emailSchema , document, rootValue : data } ) ;
125
+ return execute ( { schema : emailSchema , document, rootValue : data } ) ;
126
126
}
127
127
128
128
// TODO: consider adding this method to testUtils (with tests)
@@ -150,22 +150,46 @@ function expectPromise(maybePromise: unknown) {
150
150
} ;
151
151
}
152
152
153
- // TODO: consider adding this method to testUtils (with tests)
153
+ // TODO: consider adding these method to testUtils (with tests)
154
154
function expectEqualPromisesOrValues < T > (
155
- value1 : PromiseOrValue < T > ,
156
- value2 : PromiseOrValue < T > ,
155
+ items : ReadonlyArray < PromiseOrValue < T > > ,
157
156
) : PromiseOrValue < T > {
158
- if ( isPromise ( value1 ) ) {
159
- assert ( isPromise ( value2 ) ) ;
160
- return Promise . all ( [ value1 , value2 ] ) . then ( ( resolved ) => {
161
- expectJSON ( resolved [ 1 ] ) . toDeepEqual ( resolved [ 0 ] ) ;
162
- return resolved [ 0 ] ;
163
- } ) ;
157
+ if ( isPromise ( items [ 0 ] ) ) {
158
+ if ( assertAllPromises ( items ) ) {
159
+ return Promise . all ( items ) . then ( expectMatchingValues ) ;
160
+ }
161
+ } else if ( assertNoPromises ( items ) ) {
162
+ return expectMatchingValues ( items ) ;
163
+ }
164
+ /* c8 ignore next 3 */
165
+ // Not reachable, all possible output types have been considered.
166
+ assert ( false , 'Receives mixture of promises and values.' ) ;
167
+ }
168
+
169
+ function expectMatchingValues < T > ( values : ReadonlyArray < T > ) : T {
170
+ const remainingValues = values . slice ( 1 ) ;
171
+ for ( const value of remainingValues ) {
172
+ expectJSON ( value ) . toDeepEqual ( values [ 0 ] ) ;
164
173
}
174
+ return values [ 0 ] ;
175
+ }
165
176
166
- assert ( ! isPromise ( value2 ) ) ;
167
- expectJSON ( value2 ) . toDeepEqual ( value1 ) ;
168
- return value1 ;
177
+ function assertAllPromises < T > (
178
+ items : ReadonlyArray < PromiseOrValue < T > > ,
179
+ ) : items is ReadonlyArray < Promise < T > > {
180
+ for ( const item of items ) {
181
+ assert ( isPromise ( item ) ) ;
182
+ }
183
+ return true ;
184
+ }
185
+
186
+ function assertNoPromises < T > (
187
+ items : ReadonlyArray < PromiseOrValue < T > > ,
188
+ ) : items is ReadonlyArray < T > {
189
+ for ( const item of items ) {
190
+ assert ( ! isPromise ( item ) ) ;
191
+ }
192
+ return true ;
169
193
}
170
194
171
195
const DummyQueryType = new GraphQLObjectType ( {
@@ -189,19 +213,21 @@ function subscribeWithBadFn(
189
213
} ) ;
190
214
const document = parse ( 'subscription { foo }' ) ;
191
215
192
- return expectEqualPromisesOrValues (
193
- subscribe ( { schema, document } ) ,
216
+ return expectEqualPromisesOrValues ( [
217
+ execute ( { schema, document } ) ,
194
218
createSourceEventStream ( { schema, document } ) ,
195
- ) ;
219
+ subscribe ( { schema, document } ) ,
220
+ ] ) ;
196
221
}
197
222
198
223
function subscribeWithBadArgs (
199
224
args : ExecutionArgs ,
200
225
) : PromiseOrValue < ExecutionResult | AsyncIterable < unknown > > {
201
- return expectEqualPromisesOrValues (
202
- subscribe ( args ) ,
226
+ return expectEqualPromisesOrValues ( [
227
+ execute ( args ) ,
203
228
createSourceEventStream ( args ) ,
204
- ) ;
229
+ subscribe ( args ) ,
230
+ ] ) ;
205
231
}
206
232
207
233
/* eslint-disable @typescript-eslint/require-await */
@@ -223,7 +249,7 @@ describe('Subscription Initialization Phase', () => {
223
249
yield { foo : 'FooValue' } ;
224
250
}
225
251
226
- const subscription = subscribe ( {
252
+ const subscription = execute ( {
227
253
schema,
228
254
document : parse ( 'subscription { foo }' ) ,
229
255
rootValue : { foo : fooGenerator } ,
@@ -259,7 +285,7 @@ describe('Subscription Initialization Phase', () => {
259
285
} ) ,
260
286
} ) ;
261
287
262
- const subscription = subscribe ( {
288
+ const subscription = execute ( {
263
289
schema,
264
290
document : parse ( 'subscription { foo }' ) ,
265
291
} ) ;
@@ -297,7 +323,7 @@ describe('Subscription Initialization Phase', () => {
297
323
} ) ,
298
324
} ) ;
299
325
300
- const promise = subscribe ( {
326
+ const promise = execute ( {
301
327
schema,
302
328
document : parse ( 'subscription { foo }' ) ,
303
329
} ) ;
@@ -332,7 +358,7 @@ describe('Subscription Initialization Phase', () => {
332
358
yield { foo : 'FooValue' } ;
333
359
}
334
360
335
- const subscription = subscribe ( {
361
+ const subscription = execute ( {
336
362
schema,
337
363
document : parse ( 'subscription { foo }' ) ,
338
364
rootValue : { customFoo : fooGenerator } ,
@@ -382,7 +408,7 @@ describe('Subscription Initialization Phase', () => {
382
408
} ) ,
383
409
} ) ;
384
410
385
- const subscription = subscribe ( {
411
+ const subscription = execute ( {
386
412
schema,
387
413
document : parse ( 'subscription { foo bar }' ) ,
388
414
} ) ;
@@ -533,7 +559,7 @@ describe('Subscription Initialization Phase', () => {
533
559
}
534
560
` ) ;
535
561
536
- // If we receive variables that cannot be coerced correctly, subscribe () will
562
+ // If we receive variables that cannot be coerced correctly, execute () will
537
563
// resolve to an ExecutionResult that contains an informative error description.
538
564
const result = subscribeWithBadArgs ( { schema, document, variableValues } ) ;
539
565
expectJSON ( result ) . toDeepEqual ( {
@@ -948,7 +974,7 @@ describe('Subscription Publish Phase', () => {
948
974
} ) ;
949
975
950
976
const document = parse ( 'subscription { newMessage }' ) ;
951
- const subscription = subscribe ( { schema, document } ) ;
977
+ const subscription = execute ( { schema, document } ) ;
952
978
assert ( isAsyncIterable ( subscription ) ) ;
953
979
954
980
expect ( await subscription . next ( ) ) . to . deep . equal ( {
@@ -1009,7 +1035,7 @@ describe('Subscription Publish Phase', () => {
1009
1035
} ) ;
1010
1036
1011
1037
const document = parse ( 'subscription { newMessage }' ) ;
1012
- const subscription = subscribe ( { schema, document } ) ;
1038
+ const subscription = execute ( { schema, document } ) ;
1013
1039
assert ( isAsyncIterable ( subscription ) ) ;
1014
1040
1015
1041
expect ( await subscription . next ( ) ) . to . deep . equal ( {
0 commit comments