package services import ( "archive/zip" "bytes" "strings" "testing" ) func docxDePrueba(t *testing.T, documentXML string) []byte { t.Helper() var buf bytes.Buffer zw := zip.NewWriter(&buf) w, err := zw.Create("word/document.xml") if err != nil { t.Fatal(err) } if _, err := w.Write([]byte(documentXML)); err != nil { t.Fatal(err) } if err := zw.Close(); err != nil { t.Fatal(err) } return buf.Bytes() } func TestExtraerTextoDePlantillaDocx(t *testing.T) { xml := `` + `COTIZACIÓN` + `Cliente: Acme SAS` + `Total: $1.500.000` + `` got, err := ExtraerTextoDePlantilla("cotizacion.docx", docxDePrueba(t, xml)) if err != nil { t.Fatalf("ExtraerTextoDePlantilla: %v", err) } // Los runs de un mismo párrafo quedan pegados; los párrafos, en líneas. if !strings.Contains(got, "Cliente: Acme SAS") { t.Errorf("falta la línea del cliente en:\n%s", got) } if !strings.Contains(got, "Total: $1.500.000") { t.Errorf("falta el total en:\n%s", got) } if strings.Contains(got, "hola

\n```": "

hola

", "```\n

hola

\n```": "

hola

", "

hola

": "

hola

", } for in, want := range casos { if got := limpiarCercaDeCodigo(in); got != want { t.Errorf("limpiarCercaDeCodigo(%q) = %q, want %q", in, got, want) } } }