From 9e2ca13913bef397df1269fb306d26016a66c6fd Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 11 May 2026 00:13:58 +0100 Subject: [PATCH] test: tighten process input hint assertions --- .../bash-tools.process.input-hints.test.ts | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/agents/bash-tools.process.input-hints.test.ts b/src/agents/bash-tools.process.input-hints.test.ts index 78a88d6a29f..be68c18d9a4 100644 --- a/src/agents/bash-tools.process.input-hints.test.ts +++ b/src/agents/bash-tools.process.input-hints.test.ts @@ -28,6 +28,14 @@ function textOf(result: ProcessToolResult): string { return item?.type === "text" ? item.text : ""; } +function expectRecordFields(record: unknown, expected: Record) { + expect(record).toBeDefined(); + const actual = record as Record; + for (const [key, value] of Object.entries(expected)) { + expect(actual[key]).toEqual(value); + } +} + function installWritableStdin( session: ReturnType, state?: { writableEnded?: boolean; writableFinished?: boolean; destroyed?: boolean }, @@ -68,7 +76,7 @@ describe("process input-wait hints", () => { expect(text).toContain("Name? "); expect(text).toContain("No new output for 20s"); expect(text).toContain("Use process write, send-keys, submit, or paste to provide input."); - expect(result.details).toMatchObject({ + expectRecordFields(result.details, { status: "running", sessionId: "sess-log-hint", stdinWritable: true, @@ -98,7 +106,7 @@ describe("process input-wait hints", () => { expect(textOf(result)).toContain("(no new output)"); expect(textOf(result)).toContain("may be waiting for input"); - expect(result.details).toMatchObject({ + expectRecordFields(result.details, { status: "running", sessionId: "sess-poll", stdinWritable: true, @@ -126,7 +134,7 @@ describe("process input-wait hints", () => { expect(textOf(result)).toContain("sess-list"); expect(textOf(result)).toContain("[input-wait]"); const sessions = (result.details as { sessions?: Array> }).sessions; - expect(sessions?.[0]).toMatchObject({ + expectRecordFields(sessions?.[0], { sessionId: "sess-list", stdinWritable: true, waitingForInput: true, @@ -156,7 +164,7 @@ describe("process input-wait hints", () => { expect(textOf(result)).toContain("Password: "); expect(textOf(result)).toContain("No new output for 25s"); expect(textOf(result)).toContain("Use process write, send-keys, submit, or paste"); - expect(result.details).toMatchObject({ + expectRecordFields(result.details, { status: "running", sessionId: "sess-log", stdinWritable: true, @@ -183,7 +191,7 @@ describe("process input-wait hints", () => { sessionId: "sess-ended", }); expect(textOf(log)).not.toContain("provide input"); - expect(log.details).toMatchObject({ + expectRecordFields(log.details, { status: "running", stdinWritable: false, waitingForInput: false, @@ -195,7 +203,7 @@ describe("process input-wait hints", () => { data: "answer\n", }); expect(textOf(write)).toContain("stdin is not writable"); - expect(write.details).toMatchObject({ status: "failed" }); + expectRecordFields(write.details, { status: "failed" }); }); it("can read finished session logs without exposing input controls", async () => { @@ -216,7 +224,7 @@ describe("process input-wait hints", () => { expect(textOf(result)).toContain("done"); expect(textOf(result)).not.toContain("provide input"); - expect(result.details).toMatchObject({ + expectRecordFields(result.details, { status: "completed", sessionId: "sess-finished", exitCode: 0,