57 lines
1.8 KiB
Go
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")
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|