Files
dingtalk-workspace-cli/internal/helpers/connect_knowledge_coverage_more_test.go

65 lines
2.0 KiB
Go

package helpers
import (
"errors"
"os"
"path/filepath"
"strings"
"testing"
)
func TestCrossPlatformCoverageKnowledgeLoadAndAugmentRemainingCoverage(t *testing.T) {
if _, err := loadKnowledgeBase(filepath.Join(t.TempDir(), "missing")); err == nil {
t.Fatal("missing knowledge directory returned nil")
}
dir := t.TempDir()
if err := os.Mkdir(filepath.Join(dir, ".hidden"), 0o700); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(filepath.Join(dir, ".hidden", "secret.md"), []byte("hidden"), 0o600); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(filepath.Join(dir, "visible.md"), []byte("# First\nbody\n# Second\n"+strings.Repeat("x", knowledgeMaxChunkRunes)), 0o600); err != nil {
t.Fatal(err)
}
large := filepath.Join(dir, "large.txt")
f, err := os.Create(large)
if err != nil {
t.Fatal(err)
}
if err := f.Truncate(knowledgeMaxFileBytes + 1); err != nil {
t.Fatal(err)
}
if err := f.Close(); err != nil {
t.Fatal(err)
}
kb, err := loadKnowledgeBase(dir)
if err != nil || len(kb.chunks) < 2 {
t.Fatalf("load chunks=%d err=%v", len(kb.chunks), err)
}
origRead := knowledgeReadFile
knowledgeReadFile = func(string) ([]byte, error) { return nil, errors.New("read failed") }
if _, err := loadKnowledgeBase(dir); err == nil || !strings.Contains(err.Error(), "read failed") {
t.Fatalf("read failure err=%v", err)
}
knowledgeReadFile = origRead
t.Cleanup(func() { knowledgeReadFile = origRead })
if got := kb.augment("!"); got != "!" {
t.Fatalf("term-free question=%q", got)
}
long := strings.Repeat("alpha beta ", 150)
ranked := &knowledgeBase{chunks: []knowledgeChunk{
{source: "one", text: long, terms: map[string]int{"alpha": 1, "beta": 1}},
{source: "two", text: long, terms: map[string]int{"alpha": 3}},
{source: "three", text: long, terms: map[string]int{"alpha": 2}},
{source: "four", text: long, terms: map[string]int{"alpha": 1}},
}}
got := ranked.augment("alpha beta")
if !strings.Contains(got, "用户问题:alpha beta") {
t.Fatalf("augmented prompt missing question: %q", got)
}
}