test/domains/headers-test.ts (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
import { describe, test } from "node:test";
import assert from "node:assert/strict";
import { Compile } from "typebox/compile";
import { clearHeadersTool, setHeadersTool } from "../../src/domains/headers";
import type { HandlerContext } from "../../src/util/tool";
import { createFakeClient, type FakeClient } from "./fake-client";
const ctxFor = (fake: FakeClient): HandlerContext => ({
client: fake.client,
signal: undefined,
onUpdate: () => {},
extensionCtx: undefined as never,
});
describe("browser_set_headers", () => {
test("sets headers on the current owned tab without echoing values", async () => {
const fake = await createFakeClient();
const result = await setHeadersTool.handler(
{
headers: {
"x-tt-env": "ppe_mini_game_rating_phase4",
"x-use-ppe": "1",
},
},
ctxFor(fake),
);
assert.equal(result.success, true);
if (!result.success) return;
assert.doesNotMatch(result.data.text, /ppe_mini_game_rating_phase4/);
assert.deepEqual(result.data.details, {
targetId: "t1",
headerNames: ["x-tt-env", "x-use-ppe"],
count: 2,
});
assert.deepEqual(fake.callsTo("Network.setExtraHTTPHeaders"), [
{
method: "Network.setExtraHTTPHeaders",
params: {
headers: {
"x-tt-env": "ppe_mini_game_rating_phase4",
"x-use-ppe": "1",
},
},
sessionId: "s1",
},
]);
});
test("refuses a current tab that is not owned by the harness", async () => {
const fake = await createFakeClient();
fake.ownership.remove("t1");
const result = await setHeadersTool.handler({ headers: { "x-test": "value" } }, ctxFor(fake));
assert.equal(result.success, false);
if (result.success) return;
assert.equal(result.error.kind, "invalid_state");
assert.match(result.error.message, /not owned/);
assert.equal(fake.callsTo("Network.setExtraHTTPHeaders").length, 0);
});
test("schema rejects empty or malformed header sets", () => {
const validate = Compile(setHeadersTool.parameters);
assert.equal(validate.Check({ headers: {} }), false);
assert.equal(validate.Check({ headers: { "x-test": "line one\nline two" } }), false);
assert.equal(validate.Check({ headers: { "x-test": "value" } }), true);
});
test("handler rejects invalid HTTP header names", async () => {
const fake = await createFakeClient();
const result = await setHeadersTool.handler({ headers: { "bad name": "value" } }, ctxFor(fake));
assert.equal(result.success, false);
if (result.success) return;
assert.equal(result.error.kind, "invalid_state");
assert.match(result.error.message, /Invalid HTTP header name/);
assert.equal(fake.callsTo("Network.setExtraHTTPHeaders").length, 0);
});
});
describe("browser_clear_headers", () => {
test("clears extra headers on the current owned tab", async () => {
const fake = await createFakeClient();
const result = await clearHeadersTool.handler({}, ctxFor(fake));
assert.equal(result.success, true);
assert.deepEqual(fake.callsTo("Network.setExtraHTTPHeaders"), [
{
method: "Network.setExtraHTTPHeaders",
params: { headers: {} },
sessionId: "s1",
},
]);
});
});
|