60 lines
2.4 KiB
Go
60 lines
2.4 KiB
Go
package runmgr
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
core "agent-system-core"
|
|
)
|
|
|
|
func TestMaterialFirstFindingBeforeOptionalSearch(t *testing.T) {
|
|
c := materialRetrievalContext(t)
|
|
task := buildMaterialTaskFor(c)
|
|
t.Logf("material task UTF-8 bytes=%d", len(task))
|
|
first := strings.Index(task, "先从已提供的实质原文发布一条 reading 材料记载")
|
|
search := strings.Index(task, "knowledge_search")
|
|
if first != 0 || search <= first || !strings.Contains(task[:search], "只写一项") {
|
|
t.Fatalf("material task did not place one sourced finding before optional search: first=%d search=%d task=%q", first, search, task)
|
|
}
|
|
}
|
|
|
|
func TestMaterialNoForcedFindingWithoutSource(t *testing.T) {
|
|
c := materialRetrievalContext(t)
|
|
c.attachments = []core.ParsedDocument{{Meta: core.DocMeta{Filename: "空.txt", Parser: "builtin:txt"}}}
|
|
task := buildMaterialTaskFor(c)
|
|
if strings.Contains(task, "先从已提供的实质原文发布一条") || strings.Contains(task, "sourceId=src_") {
|
|
t.Fatalf("empty material was told to invent a checkpoint: %q", task)
|
|
}
|
|
}
|
|
|
|
func TestWorkCheckpointTwoUsefulPhases(t *testing.T) {
|
|
c := materialRetrievalContext(t)
|
|
if task := buildMaterialTaskFor(c); !strings.HasPrefix(task, "先从已提供的实质原文发布一条 reading 材料记载") {
|
|
t.Fatal("first useful phase was not prioritized before final organization")
|
|
}
|
|
first := validCheckpoint(c, "reading-1")
|
|
first.PhaseID = "reading"
|
|
first.Findings[0].FindingKey = "recorded-date"
|
|
first.Findings[0].Text = "原文记载上线六月"
|
|
if _, err := c.PublishWorkCheckpoint(first); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
second := validCheckpoint(c, "crosscheck-2")
|
|
second.PhaseID = "crosscheck"
|
|
second.Findings[0].FindingKey = "date-to-confirm"
|
|
second.Findings[0].Kind = "needs_user"
|
|
second.Findings[0].Text = "上线日期还需要确认"
|
|
if _, err := c.PublishWorkCheckpoint(second); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
card, err := c.mgr.st.GetCard(c.run.Owner, c.task.cardID)
|
|
if err != nil || card.Task == nil {
|
|
t.Fatalf("task card missing: %v", err)
|
|
}
|
|
if card.Task.ExecutionState != "running" || card.Task.CheckpointSeq != 2 || len(card.Task.Findings) != 2 ||
|
|
card.Task.Findings[0].Kind != "material_record" || card.Task.Findings[1].Kind != "needs_user" ||
|
|
card.Task.Findings[0].ID == card.Task.Findings[1].ID {
|
|
t.Fatalf("reading and crosscheck were not distinct running findings: %+v", card.Task)
|
|
}
|
|
}
|