@@ -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+
149161function 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+
153169function 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 <\uff20U123> in /repo \uff3btrusted\uff3d\uff08https://evil\uff09" ,
25842600 ) ;
0 commit comments