Skip to content

Commit 0dc8fc9

Browse files
committed
test(session): cover prompts raised while an approval decision is delivered
1 parent 8d6d4da commit 0dc8fc9

1 file changed

Lines changed: 28 additions & 0 deletions

File tree

‎src/session/approval-resume.test.ts‎

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
resolveSuspendedApprovalFromStore,
2424
} from "./approval-resume.js";
2525
import { createSessionOperationQueue } from "../tui/delivery-queue.js";
26+
import { createParkedOverlayAbortBinding } from "../tui/runner/parked-overlay-abort.js";
2627
import { defined } from "../../testkit/defined.js";
2728
import { redactedCorrelationId } from "./redacted-correlation.js";
2829
import {
@@ -1222,3 +1223,30 @@ describe("approval resume retry re-await", () => {
12221223
expect(delivered).toHaveLength(1);
12231224
});
12241225
});
1226+
1227+
describe("parked overlay registration after the operator answers", () => {
1228+
// approve_worker_call raises a nested permission prompt as soon as its
1229+
// redispatched call starts, while the decision that resumed it is still being
1230+
// delivered. That prompt's abort signal merges the parked overlay controller.
1231+
test("a permission prompt raised while the decision is delivered is not pre-aborted", async () => {
1232+
const binding = createParkedOverlayAbortBinding();
1233+
const identity = new AbortController();
1234+
const { agent, gate } = createApprovalResumeHarness();
1235+
let promptSignal: AbortSignal | undefined;
1236+
const resume = createApprovalResume({
1237+
getAgent: () => agent,
1238+
gate,
1239+
resolveParkedCallId: () => "call-A",
1240+
registerOverlayAbort: binding.registerOverlayAbort,
1241+
deliver: async (message) => {
1242+
promptSignal = binding.identitySignal(identity.signal);
1243+
agent.deliver(message);
1244+
},
1245+
});
1246+
expect(
1247+
await resume.handle(suspension("corr-A", "git status --short")),
1248+
).toBe(true);
1249+
expect(promptSignal).toBeDefined();
1250+
expect(promptSignal?.aborted).toBe(false);
1251+
});
1252+
});

0 commit comments

Comments
 (0)