@@ -38,3 +38,75 @@ describe("mapFailoverReasonToProbeStatus", () => {
3838 expect ( mapFailoverReasonToProbeStatus ( "something_else" ) ) . toBe ( "unknown" ) ;
3939 } ) ;
4040} ) ;
41+
42+ describe ( "runAuthProbes" , ( ) => {
43+ it ( "runs Codex auth probes through raw OpenClaw model-run mode" , async ( ) => {
44+ const runEmbeddedAgent = vi . fn ( async ( ) => ( { text : "OK" } ) ) ;
45+ vi . doMock ( "../../agents/embedded-agent.js" , ( ) => ( { runEmbeddedAgent } ) ) ;
46+ vi . doMock ( "../../agents/auth-profiles.js" , ( ) => ( {
47+ externalCliDiscoveryScoped : ( ) => undefined ,
48+ ensureAuthProfileStore : ( ) => ( {
49+ version : 1 ,
50+ profiles : {
51+ "openai-codex:profile" : {
52+ type : "oauth" ,
53+ provider : "openai-codex" ,
54+ access : "access-token" ,
55+ refresh : "refresh-token" ,
56+ expires : Date . now ( ) + 60_000 ,
57+ } ,
58+ } ,
59+ order : { } ,
60+ } ) ,
61+ listProfilesForProvider : ( ) => [ "openai-codex:profile" ] ,
62+ resolveAuthProfileDisplayLabel : ( { profileId } : { profileId : string } ) => profileId ,
63+ resolveAuthProfileEligibility : ( ) => ( { eligible : true } ) ,
64+ resolveAuthProfileOrder : ( ) => [ "openai-codex:profile" ] ,
65+ } ) ) ;
66+ vi . doMock ( "../../agents/model-auth.js" , ( ) => ( {
67+ hasUsableCustomProviderApiKey : ( ) => false ,
68+ resolveEnvApiKey : ( ) => null ,
69+ } ) ) ;
70+ vi . doMock ( "../../agents/model-catalog.js" , ( ) => ( {
71+ loadModelCatalog : async ( ) => [ { provider : "openai-codex" , id : "gpt-5.5" } ] ,
72+ } ) ) ;
73+ try {
74+ const module = await importFreshModule < typeof import ( "./list.probe.js" ) > (
75+ import . meta. url ,
76+ `./list.probe.js?scope=${ Math . random ( ) . toString ( 36 ) . slice ( 2 ) } ` ,
77+ ) ;
78+ const result = await module . runAuthProbes ( {
79+ cfg : { } as never ,
80+ agentId : "probe-agent" ,
81+ agentDir : "/tmp/openclaw-probe-agent" ,
82+ workspaceDir : "/tmp/openclaw-probe-workspace" ,
83+ providers : [ "openai-codex" ] ,
84+ modelCandidates : [ "openai-codex/gpt-5.5" ] ,
85+ options : {
86+ provider : "openai-codex" ,
87+ profileIds : [ "openai-codex:profile" ] ,
88+ timeoutMs : 5_000 ,
89+ concurrency : 1 ,
90+ maxTokens : 8 ,
91+ } ,
92+ } ) ;
93+
94+ expect ( result . results [ 0 ] ?. status ) . toBe ( "ok" ) ;
95+ expect ( runEmbeddedAgent ) . toHaveBeenCalledWith (
96+ expect . objectContaining ( {
97+ agentHarnessId : "openclaw" ,
98+ agentHarnessRuntimeOverride : "openclaw" ,
99+ modelRun : true ,
100+ disableTools : true ,
101+ authProfileId : "openai-codex:profile" ,
102+ authProfileIdSource : "user" ,
103+ } ) ,
104+ ) ;
105+ } finally {
106+ vi . doUnmock ( "../../agents/embedded-agent.js" ) ;
107+ vi . doUnmock ( "../../agents/auth-profiles.js" ) ;
108+ vi . doUnmock ( "../../agents/model-auth.js" ) ;
109+ vi . doUnmock ( "../../agents/model-catalog.js" ) ;
110+ }
111+ } ) ;
112+ } ) ;
0 commit comments