package diff import ( "testing" "github.com/router-for-me/CLIProxyAPI/v6/internal/config" ) func TestSummarizeExcludedModels_NormalizesAndDedupes(t *testing.T) { summary := SummarizeExcludedModels([]string{"A", " a ", "B", "b"}) if summary.count != 2 { t.Fatalf("expected 2 unique entries, got %d", summary.count) } if summary.hash == "" { t.Fatal("expected non-empty hash") } if empty := SummarizeExcludedModels(nil); empty.count != 0 || empty.hash != "" { t.Fatalf("expected empty summary for nil input, got %+v", empty) } } func TestDiffOAuthExcludedModelChanges(t *testing.T) { oldMap := map[string][]string{ "ProviderA": {"model-1", "model-2"}, "providerB": {"x"}, } newMap := map[string][]string{ "providerA": {"model-1", "model-3"}, "providerC": {"y"}, } changes, affected := DiffOAuthExcludedModelChanges(oldMap, newMap) expectContains(t, changes, "oauth-excluded-models[providera]: updated (2 -> 2 entries)") expectContains(t, changes, "oauth-excluded-models[providerb]: removed") expectContains(t, changes, "oauth-excluded-models[providerc]: added (1 entries)") if len(affected) != 3 { t.Fatalf("expected 3 affected providers, got %d", len(affected)) } } func TestSummarizeAmpModelMappings(t *testing.T) { summary := SummarizeAmpModelMappings([]config.AmpModelMapping{ {From: "a", To: "A"}, {From: "b", To: "B"}, {From: " ", To: " "}, // ignored }) if summary.count != 2 { t.Fatalf("expected 2 entries, got %d", summary.count) } if summary.hash == "" { t.Fatal("expected non-empty hash") } if empty := SummarizeAmpModelMappings(nil); empty.count != 0 || empty.hash != "" { t.Fatalf("expected empty summary for nil input, got %+v", empty) } if blank := SummarizeAmpModelMappings([]config.AmpModelMapping{{From: " ", To: " "}}); blank.count != 0 || blank.hash != "" { t.Fatalf("expected blank mappings ignored, got %+v", blank) } } func TestSummarizeOAuthExcludedModels_NormalizesKeys(t *testing.T) { out := SummarizeOAuthExcludedModels(map[string][]string{ "ProvA": {"X"}, "": {"ignored"}, }) if len(out) != 1 { t.Fatalf("expected only non-empty key summary, got %d", len(out)) } if _, ok := out["prova"]; !ok { t.Fatalf("expected normalized key 'prova', got keys %v", out) } if out["prova"].count != 1 || out["prova"].hash == "" { t.Fatalf("unexpected summary %+v", out["prova"]) } if outEmpty := SummarizeOAuthExcludedModels(nil); outEmpty != nil { t.Fatalf("expected nil map for nil input, got %v", outEmpty) } } func TestSummarizeVertexModels(t *testing.T) { summary := SummarizeVertexModels([]config.VertexCompatModel{ {Name: "m1"}, {Name: " ", Alias: "alias"}, {}, // ignored }) if summary.count != 2 { t.Fatalf("expected 2 vertex models, got %d", summary.count) } if summary.hash == "" { t.Fatal("expected non-empty hash") } if empty := SummarizeVertexModels(nil); empty.count != 0 || empty.hash != "" { t.Fatalf("expected empty summary for nil input, got %+v", empty) } if blank := SummarizeVertexModels([]config.VertexCompatModel{{Name: " "}}); blank.count != 0 || blank.hash != "" { t.Fatalf("expected blank model ignored, got %+v", blank) } } func expectContains(t *testing.T, list []string, target string) { t.Helper() for _, entry := range list { if entry == target { return } } t.Fatalf("expected list to contain %q, got %#v", target, list) }