Skip to content

Commit 7d9232a

Browse files
committed
test: dedupe codex command mock reads
1 parent 7723387 commit 7d9232a

1 file changed

Lines changed: 30 additions & 14 deletions

File tree

extensions/codex/src/commands.test.ts

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,26 @@ function requireRecord(value: unknown, message: string): Record<string, unknown>
146146
return value as Record<string, unknown>;
147147
}
148148

149+
function mockCall(mockFn: ReturnType<typeof vi.fn>, callIndex = 0): ReadonlyArray<unknown> {
150+
const call = mockFn.mock.calls[callIndex];
151+
if (!call) {
152+
throw new Error(`expected mock call ${callIndex + 1}`);
153+
}
154+
return call;
155+
}
156+
157+
function mockArg(mockFn: ReturnType<typeof vi.fn>, callIndex: number, argIndex: number) {
158+
return mockCall(mockFn, callIndex)[argIndex];
159+
}
160+
149161
function requireRequestParams(call: unknown[] | undefined): Record<string, unknown> {
150162
return requireRecord(call?.[2], "expected request params object");
151163
}
152164

165+
function requestParams(mockFn: ReturnType<typeof vi.fn>, callIndex = 0): Record<string, unknown> {
166+
return requireRecord(mockArg(mockFn, callIndex, 2), "expected request params object");
167+
}
168+
153169
function expectedDiagnosticsTargetBlock(params: {
154170
index?: number;
155171
channel?: string;
@@ -291,7 +307,7 @@ describe("codex command", () => {
291307
text: "Codex models:\n- gpt-5.4",
292308
});
293309
expect(deps.requestOptions).toHaveBeenCalledWith(undefined, 100, config);
294-
const modelsRequest = listCodexAppServerModels.mock.calls.at(0)?.[0];
310+
const modelsRequest = mockArg(listCodexAppServerModels, 0, 0) as { config?: unknown };
295311
expect(modelsRequest?.config).toBe(config);
296312
});
297313

@@ -1636,14 +1652,14 @@ describe("codex command", () => {
16361652
].join("\n"),
16371653
});
16381654
expect(safeCodexControlRequest).toHaveBeenCalledTimes(2);
1639-
expect(safeCodexControlRequest.mock.calls.at(0)?.[0]).toBeUndefined();
1640-
expect(safeCodexControlRequest.mock.calls.at(0)?.[1]).toBe(CODEX_CONTROL_METHODS.feedback);
1641-
const firstFeedbackParams = requireRequestParams(safeCodexControlRequest.mock.calls.at(0));
1655+
expect(mockArg(safeCodexControlRequest, 0, 0)).toBeUndefined();
1656+
expect(mockArg(safeCodexControlRequest, 0, 1)).toBe(CODEX_CONTROL_METHODS.feedback);
1657+
const firstFeedbackParams = requestParams(safeCodexControlRequest);
16421658
expect(firstFeedbackParams.threadId).toBe("thread-111");
16431659
expect(firstFeedbackParams.includeLogs).toBe(true);
1644-
expect(safeCodexControlRequest.mock.calls.at(1)?.[0]).toBeUndefined();
1645-
expect(safeCodexControlRequest.mock.calls.at(1)?.[1]).toBe(CODEX_CONTROL_METHODS.feedback);
1646-
const secondFeedbackParams = requireRequestParams(safeCodexControlRequest.mock.calls.at(1));
1660+
expect(mockArg(safeCodexControlRequest, 1, 0)).toBeUndefined();
1661+
expect(mockArg(safeCodexControlRequest, 1, 1)).toBe(CODEX_CONTROL_METHODS.feedback);
1662+
const secondFeedbackParams = requestParams(safeCodexControlRequest, 1);
16471663
expect(secondFeedbackParams.threadId).toBe("thread-222");
16481664
expect(secondFeedbackParams.includeLogs).toBe(true);
16491665
});
@@ -1865,9 +1881,9 @@ describe("codex command", () => {
18651881
"Included Codex logs and spawned Codex subthreads when available.",
18661882
].join("\n"),
18671883
});
1868-
expect(safeCodexControlRequest.mock.calls.at(0)?.[0]).toBeUndefined();
1869-
expect(safeCodexControlRequest.mock.calls.at(0)?.[1]).toBe(CODEX_CONTROL_METHODS.feedback);
1870-
const feedbackParams = requireRequestParams(safeCodexControlRequest.mock.calls.at(0));
1884+
expect(mockArg(safeCodexControlRequest, 0, 0)).toBeUndefined();
1885+
expect(mockArg(safeCodexControlRequest, 0, 1)).toBe(CODEX_CONTROL_METHODS.feedback);
1886+
const feedbackParams = requestParams(safeCodexControlRequest);
18711887
expect(feedbackParams.classification).toBe("bug");
18721888
expect(feedbackParams.threadId).toBe("thread-private");
18731889
expect(feedbackParams.includeLogs).toBe(true);
@@ -1940,9 +1956,9 @@ describe("codex command", () => {
19401956
const token = readDiagnosticsConfirmationToken(request);
19411957
await handleCodexCommand(createContext(`diagnostics confirm ${token}`, sessionFile), { deps });
19421958

1943-
expect(safeCodexControlRequest.mock.calls.at(0)?.[0]).toBeUndefined();
1944-
expect(safeCodexControlRequest.mock.calls.at(0)?.[1]).toBe(CODEX_CONTROL_METHODS.feedback);
1945-
const feedbackParams = requireRequestParams(safeCodexControlRequest.mock.calls.at(0));
1959+
expect(mockArg(safeCodexControlRequest, 0, 0)).toBeUndefined();
1960+
expect(mockArg(safeCodexControlRequest, 0, 1)).toBe(CODEX_CONTROL_METHODS.feedback);
1961+
const feedbackParams = requestParams(safeCodexControlRequest);
19461962
expect(feedbackParams.reason).toBe("x".repeat(2048));
19471963
});
19481964

@@ -2578,7 +2594,7 @@ describe("codex command", () => {
25782594
expect(result.text).toContain("/repo \uff3btrusted\uff3d\uff08https://evil\uff09");
25792595
expect(result.text).not.toContain("<@U123>");
25802596
expect(result.text).not.toContain("[trusted](https://evil)");
2581-
const bindingRequest = requestConversationBinding.mock.calls.at(0)?.[0];
2597+
const bindingRequest = mockArg(requestConversationBinding, 0, 0) as { summary?: string };
25822598
expect(bindingRequest?.summary).toBe(
25832599
"Codex app-server thread thread-123 &lt;\uff20U123&gt; in /repo \uff3btrusted\uff3d\uff08https://evil\uff09",
25842600
);

0 commit comments

Comments
 (0)