@@ -3,6 +3,7 @@ import { resolve } from "node:path"
33
44import { BrowserArtifactSession } from "../packages/runtime-playground/src/browser-artifact-session.js"
55import { browserReviewSummary , type BrowserArtifact } from "../packages/runtime-playground/src/browser-artifacts.js"
6+ import { browserRequestCoverageArtifact } from "../packages/runtime-playground/src/browser-probe-support.js"
67import { assertJsonFile , assertTextFile , withTempDir } from "../scripts/test-kit.js"
78
89await withTempDir ( "wp-codebox-browser-artifact-session-" , async ( artifactRoot ) => {
@@ -13,6 +14,7 @@ assert.equal(session.path("/tmp/snapshot.html"), "files/browser/snapshot.html")
1314
1415await session . writeText ( "html" , "snapshot.html" , "<html><body>secret</body></html>" )
1516await session . writeJsonLines ( "console" , "console.jsonl" , [ { type : "log" , text : "visible" } ] )
17+ await session . writeJson ( "requestCoverage" , "request-coverage.json" , { schema : "wp-codebox/browser-request-coverage/v1" , totals : { requests : 1 } } )
1618await session . writeJson ( "waterfall" , "waterfall.json" , { schema : "wp-codebox/browser-waterfall/v1" , log : { entries : [ ] } } )
1719await session . writeJson ( "summary" , "summary.json" , { schema : "wp-codebox/browser-probe/v1" , ok : true } )
1820await session . writeBuffer ( "screenshot" , "screenshot.png" , Buffer . from ( [ 0 , 1 , 2 ] ) )
@@ -36,6 +38,10 @@ assert.equal(files.get("files/browser/console.jsonl")?.kind, "browser-console")
3638assert . equal ( files . get ( "files/browser/console.jsonl" ) ?. contentType , "application/x-ndjson" )
3739assert . equal ( files . get ( "files/browser/console.jsonl" ) ?. redaction ?. policy , "required" )
3840
41+ assert . equal ( files . get ( "files/browser/request-coverage.json" ) ?. kind , "browser-request-coverage" )
42+ assert . equal ( files . get ( "files/browser/request-coverage.json" ) ?. contentType , "application/json" )
43+ assert . equal ( files . get ( "files/browser/request-coverage.json" ) ?. redaction ?. policy , "required" )
44+
3945assert . equal ( files . get ( "files/browser/waterfall.json" ) ?. kind , "browser-waterfall" )
4046assert . equal ( files . get ( "files/browser/waterfall.json" ) ?. contentType , "application/json" )
4147assert . equal ( files . get ( "files/browser/waterfall.json" ) ?. redaction ?. policy , "required" )
@@ -65,3 +71,31 @@ const review = browserReviewSummary([{
6571} satisfies BrowserArtifact ] )
6672assert . equal ( review ?. probes [ 0 ] ?. waterfall , "files/browser/waterfall.json" )
6773} )
74+
75+ const requestCoverage = browserRequestCoverageArtifact ( [ {
76+ type : "response" ,
77+ method : "GET" ,
78+ url : "https://example.test/wp-json/wp/v2/posts?search=secret#hash" ,
79+ resourceType : "fetch" ,
80+ status : 200 ,
81+ ok : true ,
82+ transferSize : 120 ,
83+ responseBodySize : 80 ,
84+ timestamp : "2026-01-01T00:00:01.000Z" ,
85+ } , {
86+ type : "requestfailed" ,
87+ method : "POST" ,
88+ url : "https://api.example.test/submit?token=secret" ,
89+ resourceType : "xhr" ,
90+ timestamp : "2026-01-01T00:00:02.000Z" ,
91+ } ] , "2026-01-01T00:00:00.000Z" )
92+
93+ assert . equal ( requestCoverage . schema , "wp-codebox/browser-request-coverage/v1" )
94+ assert . equal ( requestCoverage . totals . requests , 2 )
95+ assert . equal ( requestCoverage . totals . responses , 1 )
96+ assert . equal ( requestCoverage . totals . failures , 1 )
97+ assert . equal ( requestCoverage . totals . hosts , 2 )
98+ assert . equal ( requestCoverage . byResourceType . fetch . responses , 1 )
99+ assert . equal ( requestCoverage . byMethod . POST . failures , 1 )
100+ assert . equal ( requestCoverage . requests [ 0 ] . url , "https://example.test/wp-json/wp/v2/posts?search=[redacted]#[redacted]" )
101+ assert . equal ( requestCoverage . requests [ 1 ] . url , "https://api.example.test/submit?token=[redacted]" )
0 commit comments