@@ -2211,6 +2211,161 @@ func TestGatewayRuntimePortBridgeSelectProviderModelSelectError(t *testing.T) {
22112211 }
22122212}
22132213
2214+ func TestGatewayRuntimePortBridgeSelectProviderModelSyncsWorkspaceSessions (t * testing.T ) {
2215+ updated := make ([]agentsession.UpdateSessionStateInput , 0 )
2216+ store := & bridgeSessionStoreWithLoader {
2217+ bridgeSessionStoreStub : bridgeSessionStoreStub {
2218+ updateFn : func (_ context.Context , input agentsession.UpdateSessionStateInput ) error {
2219+ updated = append (updated , input )
2220+ return nil
2221+ },
2222+ },
2223+ session : agentsession.Session {
2224+ ID : "session-1" ,
2225+ Title : "Session 1" ,
2226+ Provider : "openai" ,
2227+ Model : "gpt-4.1" ,
2228+ },
2229+ }
2230+ ps := & providerSelectionStub {
2231+ selectRes : configstate.Selection {ProviderID : "gemini" , ModelID : "gemini-2.5-pro" },
2232+ }
2233+ stub := & runtimeStub {
2234+ eventsCh : make (chan agentruntime.RuntimeEvent , 1 ),
2235+ sessionList : []agentsession.Summary {
2236+ {ID : "session-1" , Title : "Session 1" },
2237+ {ID : "session-2" , Title : "Session 2" },
2238+ },
2239+ }
2240+ bridge , _ := newGatewayRuntimePortBridge (context .Background (), stub , store , nil , ps )
2241+ defer bridge .Close ()
2242+
2243+ result , err := bridge .SelectProviderModel (context .Background (), gateway.SelectProviderModelInput {
2244+ SubjectID : testBridgeSubjectID ,
2245+ ProviderID : "gemini" ,
2246+ })
2247+ if err != nil {
2248+ t .Fatalf ("SelectProviderModel() error = %v" , err )
2249+ }
2250+ if result .ProviderID != "gemini" || result .ModelID != "gemini-2.5-pro" {
2251+ t .Fatalf ("result = %+v, want gemini/gemini-2.5-pro" , result )
2252+ }
2253+ if len (updated ) != 2 {
2254+ t .Fatalf ("updated len = %d, want 2" , len (updated ))
2255+ }
2256+ for _ , input := range updated {
2257+ if input .Head .Provider != "gemini" || input .Head .Model != "gemini-2.5-pro" {
2258+ t .Fatalf ("updated head = %+v, want gemini/gemini-2.5-pro" , input .Head )
2259+ }
2260+ }
2261+ }
2262+
2263+ func TestGatewayRuntimePortBridgeSelectProviderModelWithExplicitModelSyncsWorkspaceSessions (t * testing.T ) {
2264+ updated := make ([]agentsession.UpdateSessionStateInput , 0 )
2265+ store := & bridgeSessionStoreWithLoader {
2266+ bridgeSessionStoreStub : bridgeSessionStoreStub {
2267+ updateFn : func (_ context.Context , input agentsession.UpdateSessionStateInput ) error {
2268+ updated = append (updated , input )
2269+ return nil
2270+ },
2271+ },
2272+ session : agentsession.Session {
2273+ ID : "session-1" ,
2274+ Title : "Session 1" ,
2275+ Provider : "openai" ,
2276+ Model : "gpt-4.1" ,
2277+ },
2278+ }
2279+ ps := & providerSelectionStub {
2280+ selectRes : configstate.Selection {ProviderID : "openai" , ModelID : "gpt-4.1" },
2281+ setModelRes : configstate.Selection {ProviderID : "openai" , ModelID : "gpt-4o" },
2282+ }
2283+ stub := & runtimeStub {
2284+ eventsCh : make (chan agentruntime.RuntimeEvent , 1 ),
2285+ sessionList : []agentsession.Summary {
2286+ {ID : "session-1" , Title : "Session 1" },
2287+ },
2288+ }
2289+ bridge , _ := newGatewayRuntimePortBridge (context .Background (), stub , store , nil , ps )
2290+ defer bridge .Close ()
2291+
2292+ result , err := bridge .SelectProviderModel (context .Background (), gateway.SelectProviderModelInput {
2293+ SubjectID : testBridgeSubjectID ,
2294+ ProviderID : "openai" ,
2295+ ModelID : "gpt-4o" ,
2296+ })
2297+ if err != nil {
2298+ t .Fatalf ("SelectProviderModel() error = %v" , err )
2299+ }
2300+ if result .ProviderID != "openai" || result .ModelID != "gpt-4o" {
2301+ t .Fatalf ("result = %+v, want openai/gpt-4o" , result )
2302+ }
2303+ if len (updated ) != 1 {
2304+ t .Fatalf ("updated len = %d, want 1" , len (updated ))
2305+ }
2306+ if updated [0 ].Head .Provider != "openai" || updated [0 ].Head .Model != "gpt-4o" {
2307+ t .Fatalf ("updated head = %+v, want openai/gpt-4o" , updated [0 ].Head )
2308+ }
2309+ }
2310+
2311+ func TestGatewayRuntimePortBridgeSelectProviderModelSyncWorkspaceLoadError (t * testing.T ) {
2312+ store := & bridgeSessionStoreWithLoader {loadErr : errors .New ("load failed" )}
2313+ ps := & providerSelectionStub {
2314+ selectRes : configstate.Selection {ProviderID : "gemini" , ModelID : "gemini-2.5-pro" },
2315+ }
2316+ stub := & runtimeStub {
2317+ eventsCh : make (chan agentruntime.RuntimeEvent , 1 ),
2318+ sessionList : []agentsession.Summary {
2319+ {ID : "session-1" , Title : "Session 1" },
2320+ },
2321+ }
2322+ bridge , _ := newGatewayRuntimePortBridge (context .Background (), stub , store , nil , ps )
2323+ defer bridge .Close ()
2324+
2325+ _ , err := bridge .SelectProviderModel (context .Background (), gateway.SelectProviderModelInput {
2326+ SubjectID : testBridgeSubjectID ,
2327+ ProviderID : "gemini" ,
2328+ })
2329+ if err == nil || err .Error () != "load failed" {
2330+ t .Fatalf ("expected load failed, got %v" , err )
2331+ }
2332+ }
2333+
2334+ func TestGatewayRuntimePortBridgeSelectProviderModelSyncWorkspaceUpdateError (t * testing.T ) {
2335+ store := & bridgeSessionStoreWithLoader {
2336+ bridgeSessionStoreStub : bridgeSessionStoreStub {
2337+ updateFn : func (_ context.Context , _ agentsession.UpdateSessionStateInput ) error {
2338+ return errors .New ("update failed" )
2339+ },
2340+ },
2341+ session : agentsession.Session {
2342+ ID : "session-1" ,
2343+ Title : "Session 1" ,
2344+ Provider : "openai" ,
2345+ Model : "gpt-4.1" ,
2346+ },
2347+ }
2348+ ps := & providerSelectionStub {
2349+ selectRes : configstate.Selection {ProviderID : "gemini" , ModelID : "gemini-2.5-pro" },
2350+ }
2351+ stub := & runtimeStub {
2352+ eventsCh : make (chan agentruntime.RuntimeEvent , 1 ),
2353+ sessionList : []agentsession.Summary {
2354+ {ID : "session-1" , Title : "Session 1" },
2355+ },
2356+ }
2357+ bridge , _ := newGatewayRuntimePortBridge (context .Background (), stub , store , nil , ps )
2358+ defer bridge .Close ()
2359+
2360+ _ , err := bridge .SelectProviderModel (context .Background (), gateway.SelectProviderModelInput {
2361+ SubjectID : testBridgeSubjectID ,
2362+ ProviderID : "gemini" ,
2363+ })
2364+ if err == nil || err .Error () != "update failed" {
2365+ t .Fatalf ("expected update failed, got %v" , err )
2366+ }
2367+ }
2368+
22142369// ---- UpsertMCPServer ----
22152370
22162371func TestGatewayRuntimePortBridgeUpsertMCPServerNilConfigManager (t * testing.T ) {
0 commit comments