Skip to content

Commit a8bedca

Browse files
authored
Test if the server context is available in batched queries (#3343)
1 parent 30baa7d commit a8bedca

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

packages/graphql-yoga/__integration-tests__/node-http.spec.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { createServer, IncomingMessage, ServerResponse, STATUS_CODES } from 'node:http';
22
import { AddressInfo } from 'node:net';
33
import { setTimeout as setTimeout$ } from 'node:timers/promises';
4+
import { ExecutionResult } from 'graphql';
45
import { fetch } from '@whatwg-node/fetch';
56
import { createDeferred } from '../../testing-utils/create-deferred.js';
67
import {
@@ -226,4 +227,50 @@ describe('node-http', () => {
226227
await new Promise<void>(resolve => server.close(() => resolve()));
227228
}
228229
});
230+
231+
it('`req: IncomingMessage` is available in batched requests', async () => {
232+
expect.assertions(8);
233+
const yoga = createYoga<{
234+
req: IncomingMessage;
235+
}>({
236+
schema: createSchema({
237+
typeDefs: /* GraphQL */ `
238+
type Query {
239+
isNode: Boolean!
240+
}
241+
`,
242+
resolvers: {
243+
Query: {
244+
isNode: (_, __, { req }) => req instanceof IncomingMessage,
245+
},
246+
},
247+
}),
248+
context: ({ req }) => ({ req }),
249+
batching: {
250+
limit: 3,
251+
},
252+
});
253+
const server = createServer(yoga);
254+
await new Promise<void>(resolve => server.listen(0, resolve));
255+
const port = (server.address() as AddressInfo).port;
256+
257+
try {
258+
const response = await fetch(`http://localhost:${port}/graphql`, {
259+
method: 'POST',
260+
headers: {
261+
'content-type': 'application/json',
262+
},
263+
body: JSON.stringify([{ query: '{isNode}' }, { query: '{isNode}' }, { query: '{isNode}' }]),
264+
});
265+
expect(response.status).toBe(200);
266+
const body: ExecutionResult[] = await response.json();
267+
expect(body).toHaveLength(3);
268+
for (const result of body) {
269+
expect(result.errors).toBeUndefined();
270+
expect(result.data?.isNode).toBe(true);
271+
}
272+
} finally {
273+
await new Promise<void>(resolve => server.close(() => resolve()));
274+
}
275+
});
229276
});

0 commit comments

Comments
 (0)