Files
Agent-System-Backend/internal/runmgr/task_notice_revalidation_test.go
T

57 lines
1.8 KiB
Go

package runmgr
import (
"agent-system-backend/internal/store"
core "agent-system-core"
"strings"
"testing"
)
func TestReviewQueuedNoticeMustRevalidateSource(t *testing.T) {
for _, reload := range []bool{false, true} {
name := "memory"
if reload {
name = "persisted"
}
t.Run(name, func(t *testing.T) {
c := checkpointEnvironment(t)
c.mgr.runner = noopRunner{}
if err := c.mgr.finishTaskProjection(c.task, core.AgentResultPayload{Summary: "SENSITIVE_DECISION"}, nil); err != nil {
t.Fatal(err)
}
card, err := c.mgr.st.GetCard(c.run.Owner, c.task.cardID)
if err != nil {
t.Fatal(err)
}
payload := c.mgr.safeTaskNotice(c.run.Owner, card, core.AgentResultPayload{Summary: "SENSITIVE_DECISION"})
for _, src := range c.sources {
if err := c.mgr.st.DeleteArtifact(c.run.Owner, src.Ref.ArtifactID); err != nil {
t.Fatal(err)
}
}
if reload {
if err := c.mgr.st.AppendNotice(store.Notice{ID: "notice-review", Owner: c.run.Owner, ConversationID: c.run.ConversationID, Name: "material", Payload: payload, TaskID: c.task.taskID, AttemptID: c.task.attemptID, CardID: c.task.cardID}); err != nil {
t.Fatal(err)
}
c.mgr.LoadPendingNotices()
waitUntil(t, func() bool { notices, err := c.mgr.st.ListNotices(); return err == nil && len(notices) == 0 })
} else {
if err := c.mgr.startNoticeRun(c.run.ConversationID, []bgNotice{{id: "notice-review", owner: c.run.Owner, name: "material", payload: payload, binding: c.task}}); err != nil {
t.Fatal(err)
}
}
messages, err := c.mgr.st.ListMessages(c.run.ConversationID)
if err != nil {
t.Fatal(err)
}
for _, m := range messages {
for _, p := range m.Parts {
if strings.Contains(p.Text, "SENSITIVE_DECISION") {
t.Fatal("queued result exposed deleted-source decision in a newly delivered message")
}
}
}
})
}
}