diff --git a/packages/rpc-subscriptions/src/__tests__/rpc-subscriptions-coalescer-test.ts b/packages/rpc-subscriptions/src/__tests__/rpc-subscriptions-coalescer-test.ts index f88dbce1855b..87ca87c3d77c 100644 --- a/packages/rpc-subscriptions/src/__tests__/rpc-subscriptions-coalescer-test.ts +++ b/packages/rpc-subscriptions/src/__tests__/rpc-subscriptions-coalescer-test.ts @@ -8,7 +8,7 @@ interface TestRpcSubscriptionNotifications { } describe('getRpcSubscriptionsWithSubscriptionCoalescing', () => { - let asyncGenerator: jest.Mock>; + let asyncGenerator: jest.Mock>; let createPendingSubscription: jest.Mock; let getDeduplicationKey: jest.Mock; let subscribe: jest.Mock; @@ -115,6 +115,21 @@ describe('getRpcSubscriptionsWithSubscriptionCoalescing', () => { await expect(messagePromiseA).resolves.toHaveProperty('value', 'hello'); await expect(messagePromiseB).resolves.toHaveProperty('value', 'hello'); }); + it('publishes the final message when the iterable returns', async () => { + expect.assertions(1); + asyncGenerator.mockImplementation( + // eslint-disable-next-line require-yield + async function* () { + return await Promise.resolve('hello'); + }, + ); + const iterable = await rpcSubscriptions + .thingNotifications({ payload: 'hello' }) + .subscribe({ abortSignal: new AbortController().signal }); + const iterator = iterable[Symbol.asyncIterator](); + const messagePromise = iterator.next(); + await expect(messagePromise).resolves.toHaveProperty('value', 'hello'); + }); it('aborting a subscription causes it to return', async () => { expect.assertions(1); asyncGenerator.mockImplementation(async function* () { diff --git a/packages/rpc-subscriptions/src/rpc-subscriptions-coalescer.ts b/packages/rpc-subscriptions/src/rpc-subscriptions-coalescer.ts index 1de90850b09e..bfcf66fa3448 100644 --- a/packages/rpc-subscriptions/src/rpc-subscriptions-coalescer.ts +++ b/packages/rpc-subscriptions/src/rpc-subscriptions-coalescer.ts @@ -108,7 +108,7 @@ export function getRpcSubscriptionsWithSubscriptionCoalescing