Skip to content

Commit db218d2

Browse files
OzTamirOrKoN
authored andcommitted
feat: test network resource filtering
1 parent cdda8db commit db218d2

File tree

1 file changed

+110
-10
lines changed

1 file changed

+110
-10
lines changed

tests/McpResponse.test.ts

Lines changed: 110 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
* SPDX-License-Identifier: Apache-2.0
55
*/
66
import assert from 'node:assert';
7-
import {describe, it} from 'node:test';
7+
import { describe, it } from 'node:test';
88

9-
import {getMockRequest, html, withBrowser} from './utils.js';
9+
import { getMockRequest, html, withBrowser } from './utils.js';
1010

1111
describe('McpResponse', () => {
1212
it('list pages', async () => {
@@ -120,7 +120,7 @@ Navigation timeout set to 100000 ms`,
120120
});
121121
it('adds image when image is attached', async () => {
122122
await withBrowser(async (response, context) => {
123-
response.attachImage({data: 'imageBase64', mimeType: 'image/png'});
123+
response.attachImage({ data: 'imageBase64', mimeType: 'image/png' });
124124
const result = await response.handle('test', context);
125125
assert.strictEqual(result[0].text, `# test response`);
126126
assert.equal(result[1].type, 'image');
@@ -190,6 +190,7 @@ http://example.com GET [pending]`,
190190
);
191191
});
192192
});
193+
193194
it('does not include network requests when setting is false', async () => {
194195
await withBrowser(async (response, context) => {
195196
response.setIncludeNetworkRequests(false);
@@ -264,10 +265,109 @@ Log>`),
264265
});
265266
});
266267

268+
describe('McpResponse network request filtering', () => {
269+
it('filters network requests by resource type', async () => {
270+
await withBrowser(async (response, context) => {
271+
response.setIncludeNetworkRequests(true, {
272+
resourceTypes: ['script', 'stylesheet'],
273+
});
274+
context.getNetworkRequests = () => {
275+
return [
276+
getMockRequest({ resourceType: 'script' }),
277+
getMockRequest({ resourceType: 'image' }),
278+
getMockRequest({ resourceType: 'stylesheet' }),
279+
getMockRequest({ resourceType: 'document' }),
280+
];
281+
};
282+
const result = await response.handle('test', context);
283+
assert.strictEqual(
284+
result[0].text,
285+
`# test response
286+
## Network requests
287+
Showing 1-2 of 2 (Page 1 of 1).
288+
http://example.com GET [pending]
289+
http://example.com GET [pending]`,
290+
);
291+
});
292+
});
293+
294+
it('filters network requests by single resource type', async () => {
295+
await withBrowser(async (response, context) => {
296+
response.setIncludeNetworkRequests(true, {
297+
resourceTypes: ['image'],
298+
});
299+
context.getNetworkRequests = () => {
300+
return [
301+
getMockRequest({ resourceType: 'script' }),
302+
getMockRequest({ resourceType: 'image' }),
303+
getMockRequest({ resourceType: 'stylesheet' }),
304+
];
305+
};
306+
const result = await response.handle('test', context);
307+
assert.strictEqual(
308+
result[0].text,
309+
`# test response
310+
## Network requests
311+
Showing 1-1 of 1 (Page 1 of 1).
312+
http://example.com GET [pending]`,
313+
);
314+
});
315+
});
316+
317+
it('shows no requests when filter matches nothing', async () => {
318+
await withBrowser(async (response, context) => {
319+
response.setIncludeNetworkRequests(true, {
320+
resourceTypes: ['font'],
321+
});
322+
context.getNetworkRequests = () => {
323+
return [
324+
getMockRequest({ resourceType: 'script' }),
325+
getMockRequest({ resourceType: 'image' }),
326+
getMockRequest({ resourceType: 'stylesheet' }),
327+
];
328+
};
329+
const result = await response.handle('test', context);
330+
assert.strictEqual(
331+
result[0].text,
332+
`# test response
333+
## Network requests
334+
No requests found.`,
335+
);
336+
});
337+
});
338+
339+
it('shows all requests when no filters are provided', async () => {
340+
await withBrowser(async (response, context) => {
341+
response.setIncludeNetworkRequests(true);
342+
context.getNetworkRequests = () => {
343+
return [
344+
getMockRequest({ resourceType: 'script' }),
345+
getMockRequest({ resourceType: 'image' }),
346+
getMockRequest({ resourceType: 'stylesheet' }),
347+
getMockRequest({ resourceType: 'document' }),
348+
getMockRequest({ resourceType: 'font' }),
349+
];
350+
};
351+
const result = await response.handle('test', context);
352+
assert.strictEqual(
353+
result[0].text,
354+
`# test response
355+
## Network requests
356+
Showing 1-5 of 5 (Page 1 of 1).
357+
http://example.com GET [pending]
358+
http://example.com GET [pending]
359+
http://example.com GET [pending]
360+
http://example.com GET [pending]
361+
http://example.com GET [pending]`,
362+
);
363+
});
364+
});
365+
});
366+
267367
describe('McpResponse network pagination', () => {
268368
it('returns all requests when pagination is not provided', async () => {
269369
await withBrowser(async (response, context) => {
270-
const requests = Array.from({length: 5}, () => getMockRequest());
370+
const requests = Array.from({ length: 5 }, () => getMockRequest());
271371
context.getNetworkRequests = () => requests;
272372
response.setIncludeNetworkRequests(true);
273373
const result = await response.handle('test', context);
@@ -280,13 +380,13 @@ describe('McpResponse network pagination', () => {
280380

281381
it('returns first page by default', async () => {
282382
await withBrowser(async (response, context) => {
283-
const requests = Array.from({length: 30}, (_, idx) =>
284-
getMockRequest({method: `GET-${idx}`}),
383+
const requests = Array.from({ length: 30 }, (_, idx) =>
384+
getMockRequest({ method: `GET-${idx}` }),
285385
);
286386
context.getNetworkRequests = () => {
287387
return requests;
288388
};
289-
response.setIncludeNetworkRequests(true, {pageSize: 10});
389+
response.setIncludeNetworkRequests(true, { pageSize: 10 });
290390
const result = await response.handle('test', context);
291391
const text = (result[0].text as string).toString();
292392
assert.ok(text.includes('Showing 1-10 of 30 (Page 1 of 3).'));
@@ -297,8 +397,8 @@ describe('McpResponse network pagination', () => {
297397

298398
it('returns subsequent page when pageIdx provided', async () => {
299399
await withBrowser(async (response, context) => {
300-
const requests = Array.from({length: 25}, (_, idx) =>
301-
getMockRequest({method: `GET-${idx}`}),
400+
const requests = Array.from({ length: 25 }, (_, idx) =>
401+
getMockRequest({ method: `GET-${idx}` }),
302402
);
303403
context.getNetworkRequests = () => requests;
304404
response.setIncludeNetworkRequests(true, {
@@ -315,7 +415,7 @@ describe('McpResponse network pagination', () => {
315415

316416
it('handles invalid page number by showing first page', async () => {
317417
await withBrowser(async (response, context) => {
318-
const requests = Array.from({length: 5}, () => getMockRequest());
418+
const requests = Array.from({ length: 5 }, () => getMockRequest());
319419
context.getNetworkRequests = () => requests;
320420
response.setIncludeNetworkRequests(true, {
321421
pageSize: 2,

0 commit comments

Comments
 (0)