- Added support for parsing various file types (PDF, DOCX, PPTX) in the content processing pipeline, allowing for more flexible content extraction. - Implemented a new method to convert file attachments to raw text when content parsing is skipped, improving performance for internal calls. - Introduced loading message suppression for image processing to enhance user experience during PDF analysis. - Updated the PDF handler to cache processed text and manage loading messages effectively, ensuring smoother interactions during content retrieval. - Enhanced error handling and logging for PDF processing, improving traceability and debugging capabilities.
132 lines
3.2 KiB
Go
132 lines
3.2 KiB
Go
package pptx_test
|
|
|
|
import (
|
|
stdContext "context"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/yaoapp/gou/connector/openai"
|
|
"github.com/yaoapp/yao/agent/content/pptx"
|
|
contentTypes "github.com/yaoapp/yao/agent/content/types"
|
|
agentContext "github.com/yaoapp/yao/agent/context"
|
|
"github.com/yaoapp/yao/agent/output/message"
|
|
"github.com/yaoapp/yao/agent/testutils"
|
|
oauthTypes "github.com/yaoapp/yao/openapi/oauth/types"
|
|
)
|
|
|
|
const testFilesDir = "assistants/tests/vision-helper/tests"
|
|
|
|
func newTestContext() *agentContext.Context {
|
|
authorized := &oauthTypes.AuthorizedInfo{
|
|
Subject: "test-user",
|
|
ClientID: "test-client-id",
|
|
UserID: "test-user-123",
|
|
}
|
|
ctx := agentContext.New(stdContext.Background(), authorized, "test-chat")
|
|
ctx.AssistantID = "test-assistant"
|
|
ctx.Locale = "en-us"
|
|
ctx.IDGenerator = message.NewIDGenerator()
|
|
return ctx
|
|
}
|
|
|
|
func newTestOptions() *contentTypes.Options {
|
|
return &contentTypes.Options{
|
|
Capabilities: &openai.Capabilities{},
|
|
}
|
|
}
|
|
|
|
func getTestFilePath(filename string) string {
|
|
yaoRoot := os.Getenv("YAO_TEST_APPLICATION")
|
|
if yaoRoot == "" {
|
|
yaoRoot = os.Getenv("YAO_ROOT")
|
|
}
|
|
return filepath.Join(yaoRoot, testFilesDir, filename)
|
|
}
|
|
|
|
// TestParseWithMissingURL tests parsing PPTX with missing URL
|
|
func TestParseWithMissingURL(t *testing.T) {
|
|
if testing.Short() {
|
|
t.Skip("Skipping integration test")
|
|
}
|
|
|
|
testutils.Prepare(t)
|
|
defer testutils.Clean(t)
|
|
|
|
options := newTestOptions()
|
|
ctx := newTestContext()
|
|
|
|
content := agentContext.ContentPart{
|
|
Type: agentContext.ContentFile,
|
|
File: nil,
|
|
}
|
|
|
|
handler := pptx.New(options)
|
|
_, _, err := handler.Parse(ctx, content)
|
|
|
|
assert.Error(t, err)
|
|
assert.Contains(t, err.Error(), "missing URL")
|
|
}
|
|
|
|
// TestParseWithLocalPptx tests parsing a local PPTX file
|
|
func TestParseWithLocalPptx(t *testing.T) {
|
|
if testing.Short() {
|
|
t.Skip("Skipping integration test")
|
|
}
|
|
|
|
testutils.Prepare(t)
|
|
defer testutils.Clean(t)
|
|
|
|
pptxPath := getTestFilePath("pptx.pptx")
|
|
if _, err := os.Stat(pptxPath); os.IsNotExist(err) {
|
|
t.Skipf("Test PPTX file not found: %s", pptxPath)
|
|
}
|
|
|
|
options := newTestOptions()
|
|
ctx := newTestContext()
|
|
|
|
content := agentContext.ContentPart{
|
|
Type: agentContext.ContentFile,
|
|
File: &agentContext.FileAttachment{
|
|
URL: pptxPath,
|
|
Filename: "pptx.pptx",
|
|
},
|
|
}
|
|
|
|
handler := pptx.New(options)
|
|
result, refs, err := handler.Parse(ctx, content)
|
|
|
|
assert.NoError(t, err)
|
|
assert.Nil(t, refs)
|
|
assert.Equal(t, agentContext.ContentText, result.Type)
|
|
assert.NotEmpty(t, result.Text)
|
|
t.Logf("PPTX parse result (first 500 chars): %.500s...", result.Text)
|
|
}
|
|
|
|
// TestParseWithNonExistentFile tests parsing PPTX with non-existent file
|
|
func TestParseWithNonExistentFile(t *testing.T) {
|
|
if testing.Short() {
|
|
t.Skip("Skipping integration test")
|
|
}
|
|
|
|
testutils.Prepare(t)
|
|
defer testutils.Clean(t)
|
|
|
|
options := newTestOptions()
|
|
ctx := newTestContext()
|
|
|
|
content := agentContext.ContentPart{
|
|
Type: agentContext.ContentFile,
|
|
File: &agentContext.FileAttachment{
|
|
URL: "/non/existent/path/test.pptx",
|
|
Filename: "test.pptx",
|
|
},
|
|
}
|
|
|
|
handler := pptx.New(options)
|
|
_, _, err := handler.Parse(ctx, content)
|
|
|
|
assert.Error(t, err)
|
|
assert.Contains(t, err.Error(), "unsupported PPTX source")
|
|
}
|