From 3b87ceeeda764c3636e07a33618746d0c05af9d8 Mon Sep 17 00:00:00 2001 From: Laurin Quast Date: Fri, 8 Mar 2024 10:59:46 +0100 Subject: [PATCH] test: error in subscription source -> onSubscribeError invocation --- packages/core/test/subscribe.spec.ts | 47 ++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/packages/core/test/subscribe.spec.ts b/packages/core/test/subscribe.spec.ts index 813f57fba9..9cd6807f99 100644 --- a/packages/core/test/subscribe.spec.ts +++ b/packages/core/test/subscribe.spec.ts @@ -126,4 +126,51 @@ describe('subscribe', () => { expect(context.foo).toEqual('bar'); }); + + it('error in subscription source causes onSubscribeError hook invocation', async () => { + const subscribeSource = (async function* () { + for (const value of ['a', 'b']) { + yield { message: value }; + } + throw new Error('Hee Hoo!'); + })(); + + let isOnSubscribeErrorHookInvoked = false; + + const teskit = createTestkit( + [ + { + onSubscribe() { + return { + onSubscribeError: () => { + isOnSubscribeErrorHookInvoked = true; + }, + }; + }, + }, + ], + schema, + ); + + const result = await teskit.execute( + /* GraphQL */ ` + subscription { + message + } + `, + undefined, + { subscribeSource }, + ); + assertStreamExecutionValue(result); + try { + await collectAsyncIteratorValues(result); + } catch (err: unknown) { + if (!(err instanceof Error)) { + throw new Error('Expected error to be instance of Error'); + } + expect(err.message).toBe('Hee Hoo!'); + } + + expect(isOnSubscribeErrorHookInvoked).toBe(true); + }); });