package domain import ( "strings" "testing" ) func TestNormalizeSessionID(t *testing.T) { tests := []struct { name string raw string want string wantErrContains string }{ { name: "trims surrounding Unicode whitespace", raw: "\u2003 session-123 \u2003", want: "session-123", }, { name: "blank input is omitted", raw: " \t\u2003 ", want: "", }, { name: "maximum Unicode length is accepted", raw: strings.Repeat("界", SessionIDMaxLength), want: strings.Repeat("界", SessionIDMaxLength), }, { name: "one Unicode code point over maximum is rejected", raw: strings.Repeat("界", SessionIDMaxLength+1), wantErrContains: "exceeds maximum", }, {name: "invalid UTF-8 before valid content", raw: string([]byte{0xff}) + "session", wantErrContains: "valid UTF-8"}, {name: "invalid UTF-8 within valid content", raw: "ses" + string([]byte{0xff}) + "sion", wantErrContains: "valid UTF-8"}, {name: "invalid UTF-8 after valid content", raw: "session" + string([]byte{0xff}), wantErrContains: "valid UTF-8"}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := NormalizeSessionID(tt.raw) if tt.wantErrContains != "" { if err == nil { t.Fatal("expected normalization error") } if !strings.Contains(err.Error(), tt.wantErrContains) { t.Fatalf("expected diagnostic containing %q, got %v", tt.wantErrContains, err) } return } if err != nil { t.Fatalf("normalize session id: %v", err) } if got != tt.want { t.Fatalf("normalized session id = %q, want %q", got, tt.want) } }) } }