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)
}
}
})
}
}