@@ -12,6 +12,7 @@ import { GraphQLList, GraphQLObjectType } from '../../type/definition';
12
12
import { GraphQLBoolean , GraphQLInt , GraphQLString } from '../../type/scalars' ;
13
13
import { GraphQLSchema } from '../../type/schema' ;
14
14
15
+ import type { ExecutionResult } from '../execute' ;
15
16
import { createSourceEventStream , subscribe } from '../subscribe' ;
16
17
17
18
import { SimplePubSub } from './simplePubSub' ;
@@ -151,6 +152,28 @@ const DummyQueryType = new GraphQLObjectType({
151
152
} ,
152
153
} ) ;
153
154
155
+ async function subscribeWithBadFn (
156
+ subscribeFn : ( ) => unknown ,
157
+ ) : Promise < ExecutionResult > {
158
+ const schema = new GraphQLSchema ( {
159
+ query : DummyQueryType ,
160
+ subscription : new GraphQLObjectType ( {
161
+ name : 'Subscription' ,
162
+ fields : {
163
+ foo : { type : GraphQLString , subscribe : subscribeFn } ,
164
+ } ,
165
+ } ) ,
166
+ } ) ;
167
+ const document = parse ( 'subscription { foo }' ) ;
168
+ const result = await subscribe ( { schema, document } ) ;
169
+
170
+ assert ( ! isAsyncIterable ( result ) ) ;
171
+ expectJSON ( await createSourceEventStream ( schema , document ) ) . toDeepEqual (
172
+ result ,
173
+ ) ;
174
+ return result ;
175
+ }
176
+
154
177
/* eslint-disable @typescript-eslint/require-await */
155
178
// Check all error cases when initializing the subscription.
156
179
describe ( 'Subscription Initialization Phase' , ( ) => {
@@ -431,46 +454,12 @@ describe('Subscription Initialization Phase', () => {
431
454
} ) ;
432
455
433
456
it ( 'throws an error if subscribe does not return an iterator' , async ( ) => {
434
- const schema = new GraphQLSchema ( {
435
- query : DummyQueryType ,
436
- subscription : new GraphQLObjectType ( {
437
- name : 'Subscription' ,
438
- fields : {
439
- foo : {
440
- type : GraphQLString ,
441
- subscribe : ( ) => 'test' ,
442
- } ,
443
- } ,
444
- } ) ,
445
- } ) ;
446
-
447
- const document = parse ( 'subscription { foo }' ) ;
448
-
449
- ( await expectPromise ( subscribe ( { schema, document } ) ) ) . toRejectWith (
457
+ ( await expectPromise ( subscribeWithBadFn ( ( ) => 'test' ) ) ) . toRejectWith (
450
458
'Subscription field must return Async Iterable. Received: "test".' ,
451
459
) ;
452
460
} ) ;
453
461
454
462
it ( 'resolves to an error for subscription resolver errors' , async ( ) => {
455
- async function subscribeWithFn ( subscribeFn : ( ) => unknown ) {
456
- const schema = new GraphQLSchema ( {
457
- query : DummyQueryType ,
458
- subscription : new GraphQLObjectType ( {
459
- name : 'Subscription' ,
460
- fields : {
461
- foo : { type : GraphQLString , subscribe : subscribeFn } ,
462
- } ,
463
- } ) ,
464
- } ) ;
465
- const document = parse ( 'subscription { foo }' ) ;
466
- const result = await subscribe ( { schema, document } ) ;
467
-
468
- expectJSON ( await createSourceEventStream ( schema , document ) ) . toDeepEqual (
469
- result ,
470
- ) ;
471
- return result ;
472
- }
473
-
474
463
const expectedResult = {
475
464
errors : [
476
465
{
@@ -483,24 +472,24 @@ describe('Subscription Initialization Phase', () => {
483
472
484
473
expectJSON (
485
474
// Returning an error
486
- await subscribeWithFn ( ( ) => new Error ( 'test error' ) ) ,
475
+ await subscribeWithBadFn ( ( ) => new Error ( 'test error' ) ) ,
487
476
) . toDeepEqual ( expectedResult ) ;
488
477
489
478
expectJSON (
490
479
// Throwing an error
491
- await subscribeWithFn ( ( ) => {
480
+ await subscribeWithBadFn ( ( ) => {
492
481
throw new Error ( 'test error' ) ;
493
482
} ) ,
494
483
) . toDeepEqual ( expectedResult ) ;
495
484
496
485
expectJSON (
497
486
// Resolving to an error
498
- await subscribeWithFn ( ( ) => Promise . resolve ( new Error ( 'test error' ) ) ) ,
487
+ await subscribeWithBadFn ( ( ) => Promise . resolve ( new Error ( 'test error' ) ) ) ,
499
488
) . toDeepEqual ( expectedResult ) ;
500
489
501
490
expectJSON (
502
491
// Rejecting with an error
503
- await subscribeWithFn ( ( ) => Promise . reject ( new Error ( 'test error' ) ) ) ,
492
+ await subscribeWithBadFn ( ( ) => Promise . reject ( new Error ( 'test error' ) ) ) ,
504
493
) . toDeepEqual ( expectedResult ) ;
505
494
} ) ;
506
495
0 commit comments