package executor import ( "testing" "github.com/router-for-me/CLIProxyAPI/v6/internal/registry") func resetAntigravityPrimaryModelsCacheForTest() { antigravityPrimaryModelsCache.mu.Lock() antigravityPrimaryModelsCache.models = nil antigravityPrimaryModelsCache.mu.Unlock()} func TestStoreAntigravityPrimaryModels_EmptyDoesNotOverwrite(t *testing.T) { resetAntigravityPrimaryModelsCacheForTest() t.Cleanup(resetAntigravityPrimaryModelsCacheForTest) seed := []*registry.ModelInfo{ {ID: "claude-sonnet-4-5"}, {ID: "gemini-2.5-pro"}, } if updated := storeAntigravityPrimaryModels(seed); !updated { t.Fatal("expected non-empty model list to update primary cache") } if updated := storeAntigravityPrimaryModels(nil); updated { t.Fatal("expected nil model list not to overwrite primary cache") } if updated := storeAntigravityPrimaryModels([]*registry.ModelInfo{}); updated { t.Fatal("expected empty model list not to overwrite primary cache") } got := loadAntigravityPrimaryModels() if len(got) != 2 { t.Fatalf("expected cached model count 2, got %d", len(got)) } if got[0].ID != "claude-sonnet-4-5" || got[1].ID != "gemini-2.5-pro" { t.Fatalf("unexpected cached model ids: %q, %q", got[0].ID, got[1].ID) }} func TestLoadAntigravityPrimaryModels_ReturnsClone(t *testing.T) { resetAntigravityPrimaryModelsCacheForTest() t.Cleanup(resetAntigravityPrimaryModelsCacheForTest) if updated := storeAntigravityPrimaryModels([]*registry.ModelInfo{{ ID: "gpt-5", DisplayName: "GPT-5", SupportedGenerationMethods: []string{"generateContent"}, SupportedParameters: []string{"temperature"}, Thinking: ®istry.ThinkingSupport{ Levels: []string{"high"}, }, }}); !updated { t.Fatal("expected model cache update") } got := loadAntigravityPrimaryModels() if len(got) != 1 { t.Fatalf("expected one cached model, got %d", len(got)) } got[0].ID = "mutated-id" if len(got[0].SupportedGenerationMethods) > 0 { got[0].SupportedGenerationMethods[0] = "mutated-method" } if len(got[0].SupportedParameters) > 0 { got[0].SupportedParameters[0] = "mutated-parameter" } if got[0].Thinking != nil && len(got[0].Thinking.Levels) > 0 { got[0].Thinking.Levels[0] = "mutated-level" } again := loadAntigravityPrimaryModels() if len(again) != 1 { t.Fatalf("expected one cached model after mutation, got %d", len(again)) } if again[0].ID != "gpt-5" { t.Fatalf("expected cached model id to remain %q, got %q", "gpt-5", again[0].ID) } if len(again[0].SupportedGenerationMethods) == 0 || again[0].SupportedGenerationMethods[0] != "generateContent" { t.Fatalf("expected cached generation methods to be unmutated, got %v", again[0].SupportedGenerationMethods) } if len(again[0].SupportedParameters) == 0 || again[0].SupportedParameters[0] != "temperature" { t.Fatalf("expected cached supported parameters to be unmutated, got %v", again[0].SupportedParameters) } if again[0].Thinking == nil || len(again[0].Thinking.Levels) == 0 || again[0].Thinking.Levels[0] != "high" { t.Fatalf("expected cached model thinking levels to be unmutated, got %v", again[0].Thinking) }}
package executor
import (
"testing"
"github.com/router-for-me/CLIProxyAPI/v6/internal/registry"
)
func resetAntigravityPrimaryModelsCacheForTest() {
antigravityPrimaryModelsCache.mu.Lock()
antigravityPrimaryModelsCache.models = nil
antigravityPrimaryModelsCache.mu.Unlock()
}
func TestStoreAntigravityPrimaryModels_EmptyDoesNotOverwrite(t *testing.T) {
resetAntigravityPrimaryModelsCacheForTest()
t.Cleanup(resetAntigravityPrimaryModelsCacheForTest)
seed := []*registry.ModelInfo{
{ID: "claude-sonnet-4-5"},
{ID: "gemini-2.5-pro"},
}
if updated := storeAntigravityPrimaryModels(seed); !updated {
t.Fatal("expected non-empty model list to update primary cache")
}
if updated := storeAntigravityPrimaryModels(nil); updated {
t.Fatal("expected nil model list not to overwrite primary cache")
}
if updated := storeAntigravityPrimaryModels([]*registry.ModelInfo{}); updated {
t.Fatal("expected empty model list not to overwrite primary cache")
}
got := loadAntigravityPrimaryModels()
if len(got) != 2 {
t.Fatalf("expected cached model count 2, got %d", len(got))
}
if got[0].ID != "claude-sonnet-4-5" || got[1].ID != "gemini-2.5-pro" {
t.Fatalf("unexpected cached model ids: %q, %q", got[0].ID, got[1].ID)
}
}
func TestLoadAntigravityPrimaryModels_ReturnsClone(t *testing.T) {
resetAntigravityPrimaryModelsCacheForTest()
t.Cleanup(resetAntigravityPrimaryModelsCacheForTest)
if updated := storeAntigravityPrimaryModels([]*registry.ModelInfo{{
ID: "gpt-5",
DisplayName: "GPT-5",
SupportedGenerationMethods: []string{"generateContent"},
SupportedParameters: []string{"temperature"},
Thinking: ®istry.ThinkingSupport{
Levels: []string{"high"},
},
}}); !updated {
t.Fatal("expected model cache update")
}
got := loadAntigravityPrimaryModels()
if len(got) != 1 {
t.Fatalf("expected one cached model, got %d", len(got))
}
got[0].ID = "mutated-id"
if len(got[0].SupportedGenerationMethods) > 0 {
got[0].SupportedGenerationMethods[0] = "mutated-method"
}
if len(got[0].SupportedParameters) > 0 {
got[0].SupportedParameters[0] = "mutated-parameter"
}
if got[0].Thinking != nil && len(got[0].Thinking.Levels) > 0 {
got[0].Thinking.Levels[0] = "mutated-level"
}
again := loadAntigravityPrimaryModels()
if len(again) != 1 {
t.Fatalf("expected one cached model after mutation, got %d", len(again))
}
if again[0].ID != "gpt-5" {
t.Fatalf("expected cached model id to remain %q, got %q", "gpt-5", again[0].ID)
}
if len(again[0].SupportedGenerationMethods) == 0 || again[0].SupportedGenerationMethods[0] != "generateContent" {
t.Fatalf("expected cached generation methods to be unmutated, got %v", again[0].SupportedGenerationMethods)
}
if len(again[0].SupportedParameters) == 0 || again[0].SupportedParameters[0] != "temperature" {
t.Fatalf("expected cached supported parameters to be unmutated, got %v", again[0].SupportedParameters)
}
if again[0].Thinking == nil || len(again[0].Thinking.Levels) == 0 || again[0].Thinking.Levels[0] != "high" {
t.Fatalf("expected cached model thinking levels to be unmutated, got %v", again[0].Thinking)
}
}