44 * SPDX-License-Identifier: Apache-2.0
55 */
66import 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
1111describe ( '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+
267367describe ( '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