|
1 | 1 | import { createServer, IncomingMessage, ServerResponse, STATUS_CODES } from 'node:http';
|
2 | 2 | import { AddressInfo } from 'node:net';
|
3 | 3 | import { setTimeout as setTimeout$ } from 'node:timers/promises';
|
| 4 | +import { ExecutionResult } from 'graphql'; |
4 | 5 | import { fetch } from '@whatwg-node/fetch';
|
5 | 6 | import { createDeferred } from '../../testing-utils/create-deferred.js';
|
6 | 7 | import {
|
@@ -226,4 +227,50 @@ describe('node-http', () => {
|
226 | 227 | await new Promise<void>(resolve => server.close(() => resolve()));
|
227 | 228 | }
|
228 | 229 | });
|
| 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 | + }); |
229 | 276 | });
|
0 commit comments