package catalog import ( "testing" "aigw/internal/domain" ) func TestCatalogReplaceSwapsModelSnapshot(t *testing.T) { openAI := domain.Provider{ID: "openai", Protocol: domain.ProtocolOpenAI} anthropic := domain.Provider{ID: "anthropic", Protocol: domain.ProtocolAnthropic} catalog := NewModels([]domain.Model{{ ID: "old", Routes: []domain.Route{{Provider: openAI, UpstreamModel: "old-upstream"}}, }}) catalog.Replace([]domain.Model{{ ID: "new", Routes: []domain.Route{{Provider: anthropic, UpstreamModel: "new-upstream"}}, }}) if _, err := catalog.Model("old"); err == nil { t.Fatal("old model remained after snapshot replacement") } model, err := catalog.Model("new") if err != nil || len(model.Routes) != 1 || model.Routes[0].Provider.ID != "anthropic" { t.Fatalf("new model was not loaded: model=%+v err=%v", model, err) } if got := catalog.Models(domain.ProtocolOpenAI); len(got) != 0 { t.Fatalf("unexpected OpenAI models after replacement: %+v", got) } } func TestCatalogReplaceCopiesRouteSlices(t *testing.T) { models := []domain.Model{{ID: "model", Routes: []domain.Route{{UpstreamModel: "before"}}}} catalog := NewModels(models) models[0].Routes[0].UpstreamModel = "after" model, err := catalog.Model("model") if err != nil { t.Fatal(err) } if model.Routes[0].UpstreamModel != "before" { t.Fatal("catalog snapshot aliases the caller's route slice") } }