package services import ( "strings" "testing" ) // El troceado es lo que decide qué puede encontrar el agente después. Un // fragmento cortado a la mitad de una frase o sin solape hace que la búsqueda // devuelva texto que no responde nada. func TestTrocearTexto(t *testing.T) { if got := trocearTexto(" "); got != nil { t.Errorf("texto vacío debería dar nil, dio %v", got) } corto := "Atendemos de 9 a 18." if got := trocearTexto(corto); len(got) != 1 || got[0] != corto { t.Errorf("un texto corto tiene que quedar en un solo fragmento: %v", got) } largo := strings.Repeat("palabra ", 900) chunks := trocearTexto(largo) if len(chunks) < 2 { t.Fatalf("un texto largo debería partirse, dio %d fragmento(s)", len(chunks)) } for i, c := range chunks { if strings.HasPrefix(c, " ") || strings.HasSuffix(c, " ") { t.Errorf("fragmento %d con espacios en los bordes: %q", i, c) } if c == "" { t.Errorf("fragmento %d vacío", i) } } // Sin solape, una frase que cae justo en el corte se pierde para siempre. if !strings.HasPrefix(chunks[1], "palabra") { t.Errorf("el segundo fragmento debería arrancar con contenido real: %q", chunks[1][:20]) } }