package service import ( "net/http" "testing" ) // ============================================================================= // Header Utility Functions Tests // ============================================================================= func TestResolveWireCasing(t *testing.T) { tests := []struct { name string key string expected string }{ {"lowercase key", "content-type", "Content-Type"}, {"already canonical", "Content-Type", "Content-Type"}, {"unknown key", "x-custom-header", "x-custom-header"}, {"anthropic-beta", "anthropic-beta", "anthropic-beta"}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result := resolveWireCasing(tt.key) // The expected result depends on the headerWireCasing map // We just verify the function doesn't panic and returns a string if result == "" && tt.key != "" { t.Errorf("resolveWireCasing(%q) returned empty string", tt.key) } }) } } func TestSortHeadersByWireOrder(t *testing.T) { t.Run("sort headers in wire order", func(t *testing.T) { h := make(http.Header) h.Set("Content-Type", "application/json") h.Set("X-Custom-Header", "value") h.Set("Authorization", "Bearer token") result := sortHeadersByWireOrder(h) if len(result) != 3 { t.Errorf("Expected 3 headers, got %d", len(result)) } }) t.Run("empty headers", func(t *testing.T) { h := make(http.Header) result := sortHeadersByWireOrder(h) if len(result) != 0 { t.Errorf("Expected 0 headers, got %d", len(result)) } }) } func TestSetHeaderRaw(t *testing.T) { t.Run("set header", func(t *testing.T) { h := make(http.Header) setHeaderRaw(h, "X-Custom-Header", "value1") if h.Get("X-Custom-Header") != "value1" { t.Errorf("Expected 'value1', got %q", h.Get("X-Custom-Header")) } }) t.Run("overwrite header", func(t *testing.T) { h := make(http.Header) setHeaderRaw(h, "X-Test", "value1") setHeaderRaw(h, "X-Test", "value2") if h.Get("X-Test") != "value2" { t.Errorf("Expected 'value2', got %q", h.Get("X-Test")) } }) } func TestAddHeaderRaw(t *testing.T) { t.Run("add single header", func(t *testing.T) { h := make(http.Header) addHeaderRaw(h, "X-Add-Header", "value1") if h.Get("X-Add-Header") != "value1" { t.Errorf("Expected 'value1', got %q", h.Get("X-Add-Header")) } }) t.Run("add multiple values", func(t *testing.T) { h := make(http.Header) addHeaderRaw(h, "X-Multi", "value1") addHeaderRaw(h, "X-Multi", "value2") values := h.Values("X-Multi") if len(values) != 2 { t.Errorf("Expected 2 values, got %d", len(values)) } }) } func TestGetHeaderRaw(t *testing.T) { t.Run("get existing header", func(t *testing.T) { h := make(http.Header) h.Set("X-Get-Test", "testvalue") result := getHeaderRaw(h, "X-Get-Test") if result != "testvalue" { t.Errorf("Expected 'testvalue', got %q", result) } }) t.Run("get non-existent header", func(t *testing.T) { h := make(http.Header) result := getHeaderRaw(h, "X-Nonexistent") if result != "" { t.Errorf("Expected empty string, got %q", result) } }) }