| 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: " "}, |
| }) |
| 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"}, |
| {}, |
| }) |
| 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) |
| } |
|
|