package service import ( "context" "strings" "testing" "github.com/Tencent/WeKnora/internal/types" "github.com/stretchr/testify/require" ) type digitalHumanTestReader struct { request *types.ReadRequest result *types.ReadResult err error } func (r *digitalHumanTestReader) Read(_ context.Context, request *types.ReadRequest) (*types.ReadResult, error) { r.request = request return r.result, r.err } func TestDigitalHumanUploadPreservesSubtitleEvidence(t *testing.T) { service := &DigitalHumanService{} for _, ext := range []string{"TXT", "md", "markdown", "srt", "vtt"} { source, err := service.readDigitalHumanUpload(context.Background(), DigitalHumanUpload{Name: "source." + ext, Data: []byte("\ufeff1\n00:00:01,000 --> 00:00:02,000\nOriginal words\n")}) require.NoError(t, err) require.Equal(t, "1\n00:00:01,000 --> 00:00:02,000\nOriginal words", source.Text) } } func TestDigitalHumanUploadRejectsInvalidOrTruncatedMaterials(t *testing.T) { service := &DigitalHumanService{} for _, file := range []DigitalHumanUpload{ {Name: "source.exe", Data: []byte("text")}, {Name: "empty.pdf"}, {Name: "empty.txt", Data: []byte(" \n")}, {Name: "invalid.txt", Data: []byte{0xff}}, {Name: "large.pdf", Data: make([]byte, DigitalHumanFileLimit+1)}, {Name: "too-many-words.txt", Data: []byte(strings.Repeat("x", digitalHumanSourceLimit+1))}, } { _, err := service.readDigitalHumanUpload(context.Background(), file) require.Error(t, err, file.Name) } } func TestDigitalHumanUploadDispatchesDocumentsToReader(t *testing.T) { if types.DefaultParserEngine("pdf") == "anydoc" { t.Skip("linked builds exercise the local parser instead of the remote transport") } reader := &digitalHumanTestReader{result: &types.ReadResult{MarkdownContent: "# Source\nAll source evidence"}} service := &DigitalHumanService{reader: reader} for _, ext := range []string{"doc", "docx", "pdf", "ppt", "pptx", "rtf", "odt"} { source, err := service.readDigitalHumanUpload(context.Background(), DigitalHumanUpload{Name: "source." + ext, Data: []byte("document bytes")}) require.NoError(t, err, ext) require.Equal(t, "# Source\nAll source evidence", source.Text) require.Equal(t, ext, reader.request.FileType) require.Equal(t, "false", reader.request.ParserEngineOverrides["anydoc_extract_images"]) } reader.result = &types.ReadResult{} _, err := service.readDigitalHumanUpload(context.Background(), DigitalHumanUpload{Name: "scan.pdf", Data: []byte("scan")}) require.Error(t, err) }