Retain exact empty and computed literal keys in JavaScript observations. Bind CDP response bodies to request occurrences, account for late responses, and validate the target after final progress callbacks.
72 lines
2.0 KiB
TypeScript
72 lines
2.0 KiB
TypeScript
import { expect, it } from "vitest";
|
|
|
|
import { CdpCaptureEvents } from "./CdpCaptureEvents.js";
|
|
import { inspectWebPageInputSchema } from "../domain/browserObservation.js";
|
|
|
|
it("preserves an already captured response shape without marking it unavailable", () => {
|
|
const origin = "http://127.0.0.1:43127";
|
|
const events = new CdpCaptureEvents(
|
|
inspectWebPageInputSchema.parse({
|
|
cdp_endpoint: origin,
|
|
allowed_origins: [origin],
|
|
target_id: "allowed-page",
|
|
include_json_body_shapes: true,
|
|
}),
|
|
new Set([origin]),
|
|
);
|
|
events.ingest({
|
|
method: "Network.requestWillBeSent",
|
|
params: {
|
|
requestId: "request-1",
|
|
initiator: { type: "other" },
|
|
request: {
|
|
url: `${origin}/prior`,
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json" },
|
|
postData: '{"request":true}',
|
|
},
|
|
timestamp: 1,
|
|
},
|
|
});
|
|
events.ingest({
|
|
method: "Network.responseReceived",
|
|
params: {
|
|
requestId: "request-1",
|
|
response: {
|
|
url: `${origin}/prior`,
|
|
status: 200,
|
|
mimeType: "application/json",
|
|
},
|
|
},
|
|
});
|
|
const candidate = events.responseBodyRequests()[0];
|
|
expect(candidate).toBeDefined();
|
|
events.ingestResponseBody(candidate!, {
|
|
body: '{"response":true}',
|
|
base64Encoded: false,
|
|
});
|
|
const capturedShape = events.network.get("request-1")?.body_shapes.response;
|
|
expect(capturedShape).toBeDefined();
|
|
expect(capturedShape).not.toBeNull();
|
|
|
|
events.ingest({
|
|
method: "Network.requestWillBeSent",
|
|
params: {
|
|
requestId: "request-1",
|
|
request: { url: `${origin}/continuation`, method: "GET" },
|
|
initiator: { type: "other" },
|
|
redirectResponse: null,
|
|
timestamp: 2,
|
|
},
|
|
});
|
|
|
|
expect(events.network.get("request-1")?.body_shapes.response).toEqual(
|
|
capturedShape,
|
|
);
|
|
expect(events.network.get("request-1")?.body_shapes.status).toBe("included");
|
|
expect(events.responseBodyRequests()).toEqual([]);
|
|
expect(events.completeness.snapshot().unavailable_sections).not.toContain(
|
|
"json_body_shapes",
|
|
);
|
|
});
|