package utils import ( "errors" "strings" "testing" ) func TestSanitizeMessageText_TrimsWhitespace(t *testing.T) { got, err := SanitizeMessageText(" سلام دوست من ") if err != nil { t.Fatalf("unexpected error: %v", err) } if got != "سلام دوست من" { t.Fatalf("expected trimmed text, got %q", got) } } func TestSanitizeMessageText_EmptyAfterTrim(t *testing.T) { _, err := SanitizeMessageText(" ") if !errors.Is(err, ErrMessageEmpty) { t.Fatalf("expected ErrMessageEmpty, got %v", err) } } func TestSanitizeMessageText_StripsControlChars(t *testing.T) { got, err := SanitizeMessageText("سلام\x00\x07دنیا") if err != nil { t.Fatalf("unexpected error: %v", err) } if got != "سلامدنیا" { t.Fatalf("expected control chars stripped, got %q", got) } } func TestSanitizeMessageText_KeepsNewlinesAndTabs(t *testing.T) { got, err := SanitizeMessageText("خط اول\nخط دوم\tبا تب") if err != nil { t.Fatalf("unexpected error: %v", err) } if got != "خط اول\nخط دوم\tبا تب" { t.Fatalf("expected newline/tab preserved, got %q", got) } } func TestSanitizeMessageText_InvalidUTF8(t *testing.T) { invalid := string([]byte{0xff, 0xfe, 0xfd}) _, err := SanitizeMessageText(invalid) if !errors.Is(err, ErrInvalidMessageEncoding) { t.Fatalf("expected ErrInvalidMessageEncoding, got %v", err) } } func TestSanitizeMessageText_TooLong(t *testing.T) { long := strings.Repeat("a", MaxMessageLength+1) _, err := SanitizeMessageText(long) if !errors.Is(err, ErrMessageTooLong) { t.Fatalf("expected ErrMessageTooLong, got %v", err) } } func TestSanitizeMessageText_ExactlyMaxLength(t *testing.T) { exact := strings.Repeat("a", MaxMessageLength) got, err := SanitizeMessageText(exact) if err != nil { t.Fatalf("unexpected error at exact max length: %v", err) } if len(got) != MaxMessageLength { t.Fatalf("expected length %d, got %d", MaxMessageLength, len(got)) } }