package services import ( "strings" "testing" ) func TestFormatearParaTelegram(t *testing.T) { cases := []struct { name string in string wantContains []string wantNotContains []string }{ { name: "encabezado y negrita", in: "## ✅ **¡Factura registrada exitosamente!**", wantContains: []string{"✅ ¡Factura registrada exitosamente!"}, wantNotContains: []string{"##", "**"}, }, { name: "lista con viñetas y negrita en cada línea", in: "- **Factura ID:** 3\n- **Cliente:** DOCUXER S.A.S.", wantContains: []string{"• Factura ID: 3", "• Cliente: DOCUXER S.A.S."}, wantNotContains: []string{"- **"}, }, { name: "separador horizontal se elimina", in: "Texto antes\n---\nTexto después", wantContains: []string{"Texto antes", "Texto después"}, wantNotContains: []string{"---"}, }, { name: "caracteres HTML literales se escapan", in: "El monto es < 1000 y > 500 & sigue", wantContains: []string{"< 1000", "> 500", "& sigue"}, }, { name: "código en línea se preserva sin escapar dos veces", in: "Usa el comando `git status` para ver el estado", wantContains: []string{"git status"}, }, { name: "bloque de código se convierte a pre", in: "```\nfunc main() {}\n```", wantContains: []string{"
func main() {}
"}, }, { name: "enlace markdown", in: "Mira [este link](https://u-site.app)", wantContains: []string{`este link`}, }, } for _, c := range cases { t.Run(c.name, func(t *testing.T) { got := FormatearParaTelegram(c.in) for _, want := range c.wantContains { if !strings.Contains(got, want) { t.Errorf("esperaba que el resultado contuviera %q\nresultado: %q", want, got) } } for _, notWant := range c.wantNotContains { if strings.Contains(got, notWant) { t.Errorf("no esperaba que el resultado contuviera %q\nresultado: %q", notWant, got) } } }) } }