Ctrl K
ComunidadGuías…

internal/ingestion/pipeline/office_media_real_integration_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
//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)
	})
}