internal/ingestion/pipeline/office_media_real_integration_test.go
Rama main · réplica de lectura del repositorio original.
//go:build cgo && integration
package pipeline
import (
"archive/zip"
"bytes"
"io"
"os"
"path/filepath"
"strings"
"testing"
"github.com/xuri/excelize/v2"
officeOxide "github.com/yfedoseev/office_oxide/go"
)
// TestOfficeMediaRealServices uses the production native/Excelize parsers and
// the ingestion canvas, never a parser or storage double.
func TestOfficeMediaRealServices(t *testing.T) {
if os.Getenv("RAGFLOW_REAL_OFFICE_MEDIA_TEST") != "1" {
t.Skip("set RAGFLOW_REAL_OFFICE_MEDIA_TEST=1 with configured MySQL, Kvrocks and MinIO")
}
docx, err := os.ReadFile(filepath.Join(repoRootFromPipelineTest(t), "internal/parser/parser/testdata/docx_table_image.docx"))
if err != nil {
t.Fatal(err)
}
archive, err := zip.NewReader(bytes.NewReader(docx), int64(len(docx)))
if err != nil {
t.Fatal(err)
}
var png []byte
for _, entry := range archive.File {
if !strings.HasPrefix(entry.Name, "word/media/") || !strings.HasSuffix(entry.Name, ".png") {
continue
}
f, err := entry.Open()
if err != nil {
t.Fatal(err)
}
png, err = io.ReadAll(f)
f.Close()
if err != nil {
t.Fatal(err)
}
break
}
if len(png) == 0 {
t.Fatal("DOCX fixture has no PNG")
}
t.Run("docx_table_image", func(t *testing.T) { runMediaRealServices(t, "docx", docx, png) })
t.Run("pptx_slide_image", func(t *testing.T) {
w := officeOxide.NewPptxWriter()
defer w.Close()
slide := w.AddSlide()
w.AddSlideText(slide, "Office media fixture")
w.AddSlideImage(slide, png, "png", 914400, 914400, 914400, 457200)
data, err := w.ToBytes()
if err != nil {
t.Fatal(err)
}
runMediaRealServices(t, "pptx", data, png)
})
t.Run("xlsx_cell_image", func(t *testing.T) {
f := excelize.NewFile()
defer f.Close()
if err := f.SetCellValue("Sheet1", "A1", "Office media fixture"); err != nil {
t.Fatal(err)
}
if err := f.AddPictureFromBytes("Sheet1", "C3", &excelize.Picture{Extension: ".png", File: png}); err != nil {
t.Fatal(err)
}
buf, err := f.WriteToBuffer()
if err != nil {
t.Fatal(err)
}
runMediaRealServices(t, "xlsx", buf.Bytes(), png)
})
}