yao/sui/storages/agent/agent_test.go
Max ef63718941 Enhance Attachment Process with Plain Text and UTF-8 Support
- Added tests for saving plain text and Chinese text directly, ensuring proper handling of content without data URI encoding.
- Updated the `parseDataURI` function to support plain text storage, returning the correct content type and data bytes.
- Improved the `getAssistants` method to support nested assistants, enhancing directory scanning for assistant pages.
- Refactored the `Page` method to accommodate assistant IDs with nested structures, improving route handling for pages.
2026-01-25 17:32:50 +08:00

214 lines
5 KiB
Go

package agent
import (
"sort"
"testing"
"github.com/stretchr/testify/assert"
"github.com/yaoapp/yao/config"
"github.com/yaoapp/yao/sui/core"
"github.com/yaoapp/yao/test"
)
func TestAgentExists(t *testing.T) {
prepare(t)
defer clean()
exists := Exists()
assert.True(t, exists, "Agent template should exist")
}
func TestHasAssistantPages(t *testing.T) {
prepare(t)
defer clean()
hasPages := HasAssistantPages()
assert.True(t, hasPages, "Should have assistant pages")
}
func TestGetAssistants(t *testing.T) {
prepare(t)
defer clean()
agent := createAgent(t)
assistants, err := agent.getAssistants()
assert.Nil(t, err)
assert.NotEmpty(t, assistants)
// Sort for consistent comparison
sort.Strings(assistants)
// Should include both direct and nested assistants
// Direct: tests.sui-pages (has pages directly)
// Nested: tests.nested.demo (nested assistant with pages)
found := map[string]bool{}
for _, ast := range assistants {
found[ast] = true
}
assert.True(t, found["tests.sui-pages"], "Should find tests.sui-pages assistant")
assert.True(t, found["tests.nested.demo"], "Should find tests.nested.demo assistant")
}
func TestGetAssistantPagesRoot(t *testing.T) {
prepare(t)
defer clean()
agent := createAgent(t)
// Test direct assistant
root := agent.getAssistantPagesRoot("tests.sui-pages")
assert.Equal(t, "/assistants/tests/sui-pages/pages", root)
// Test nested assistant
root = agent.getAssistantPagesRoot("tests.nested.demo")
assert.Equal(t, "/assistants/tests/nested/demo/pages", root)
}
func TestGetTemplate(t *testing.T) {
prepare(t)
defer clean()
agent := createAgent(t)
tmpl, err := agent.GetTemplate("agent")
assert.Nil(t, err)
assert.NotNil(t, tmpl)
assert.Equal(t, "agent", tmpl.(*Template).ID)
}
func TestTemplatePages(t *testing.T) {
prepare(t)
defer clean()
agent := createAgent(t)
tmpl, err := agent.GetTemplate("agent")
assert.Nil(t, err)
pages, err := tmpl.Pages()
assert.Nil(t, err)
assert.NotEmpty(t, pages)
// Check that we have pages from nested assistants
routes := map[string]bool{}
for _, page := range pages {
routes[page.Get().Route] = true
}
// Should have pages from:
// 1. Agent global pages (/index)
// 2. Direct assistant (tests.sui-pages) -> /tests.sui-pages/dashboard
// 3. Nested assistant (tests.nested.demo) -> /tests.nested.demo/article
assert.True(t, routes["/index"], "Should have agent global page /index")
assert.True(t, routes["/tests.sui-pages/dashboard"], "Should have direct assistant page /tests.sui-pages/dashboard")
assert.True(t, routes["/tests.nested.demo/article"], "Should have nested assistant page /tests.nested.demo/article")
}
func TestTemplatePage(t *testing.T) {
prepare(t)
defer clean()
agent := createAgent(t)
tmpl, err := agent.GetTemplate("agent")
assert.Nil(t, err)
// Test getting agent global page
page, err := tmpl.Page("/index")
assert.Nil(t, err)
assert.NotNil(t, page)
assert.Equal(t, "/index", page.Get().Route)
// Test getting direct assistant page
page, err = tmpl.Page("/tests.sui-pages/dashboard")
assert.Nil(t, err)
assert.NotNil(t, page)
assert.Equal(t, "/tests.sui-pages/dashboard", page.Get().Route)
assert.Equal(t, "tests.sui-pages", page.(*Page).assistantID)
// Test getting nested assistant page
page, err = tmpl.Page("/tests.nested.demo/article")
assert.Nil(t, err)
assert.NotNil(t, page)
assert.Equal(t, "/tests.nested.demo/article", page.Get().Route)
assert.Equal(t, "tests.nested.demo", page.(*Page).assistantID)
// Test page not found
_, err = tmpl.Page("/non-existent/page")
assert.NotNil(t, err)
assert.Contains(t, err.Error(), "not found")
}
func TestPageLoad(t *testing.T) {
prepare(t)
defer clean()
agent := createAgent(t)
tmpl, err := agent.GetTemplate("agent")
assert.Nil(t, err)
// Test loading nested assistant page
page, err := tmpl.Page("/tests.nested.demo/article")
assert.Nil(t, err)
err = page.Load()
assert.Nil(t, err)
// Check that content was loaded
p := page.Get()
assert.NotEmpty(t, p.Codes.HTML.Code, "HTML code should be loaded")
assert.NotEmpty(t, p.Codes.CSS.Code, "CSS code should be loaded")
}
func TestPageBuild(t *testing.T) {
prepare(t)
defer clean()
agent := createAgent(t)
// Register the agent SUI so page build can find it
core.SUIs["agent"] = agent
tmpl, err := agent.GetTemplate("agent")
assert.Nil(t, err)
// Test building nested assistant page
page, err := tmpl.Page("/tests.nested.demo/article")
assert.Nil(t, err)
err = page.Load()
assert.Nil(t, err)
ctx := core.NewGlobalBuildContext(tmpl)
warnings, err := page.Build(ctx, &core.BuildOption{
PublicRoot: "/agents",
AssetRoot: "/agents/assets",
})
assert.Nil(t, err)
assert.Empty(t, warnings)
}
func prepare(t *testing.T) {
test.Prepare(t, config.Conf, "YAO_TEST_APPLICATION")
}
func clean() {
test.Clean()
}
func createAgent(t *testing.T) *Agent {
dsl := &core.DSL{
ID: "agent",
Name: "Agent",
Public: &core.Public{
Root: "/agents",
Host: "/",
Index: "/index",
},
}
agent, err := New(dsl)
if err != nil {
t.Fatalf("Failed to create agent: %v", err)
}
return agent
}