返回 DeepSeek-Reasonix
inbox_canonical_composer_test.go
根目录 / desktop / inbox_canonical_composer_test.go
1 package main
2
3 import "testing"
4
5 func TestManualSessionComposerGuidanceReceiptRecovery(t *testing.T) {
6 a := newManualSessionTestApp(t)
7 created, err := a.BeginManualSessionCreation(ManualSessionCreationRequest{OperationID: "canonical-guidance", Scope: "global"})
8 if err != nil {
9 t.Fatal(err)
10 }
11 a.manualCreationTasks.Wait()
12 if copies, err := a.ListSessionComposerConflicts(created.Ref); err != nil || copies == nil || len(copies) != 0 {
13 t.Fatalf("retired input copies must remain an empty compatibility response: %v %v", copies, err)
14 }
15 meta := a.metaForDraftSession(created.Ref.SessionID)
16 if meta == nil || meta.Session == nil || meta.SessionPath != "" {
17 t.Fatalf("formal session must not need a fabricated legacy path: %+v", meta)
18 }
19 _, ctrl := a.tabAndCtrlByID(meta.ID)
20 if err := ctrl.SetInboxPaused(true); err != nil {
21 t.Fatal(err)
22 }
23 saved, err := a.SaveSessionComposerState(SessionComposerSaveRequest{Ref: created.Ref, ExpectedRevision: "0", ContentVersion: 1, ContentJSON: `{"text":"queued guidance"}`})
24 if err != nil {
25 t.Fatal(err)
26 }
27 if _, err := a.BeginSessionComposerSubmission(created.Ref, saved.Revision, "guidance-receipt", `{"kind":"guidance","display":"queued guidance","submit":"queued guidance"}`); err != nil {
28 t.Fatal(err)
29 }
30 target, err := a.CaptureInboxTarget(meta.ID, sessionRoute(created.Ref.SessionID))
31 if err != nil {
32 t.Fatal(err)
33 }
34 receipt, err := a.EnqueueInboxFollowupForTarget(target, "queued guidance", "queued guidance", nil, "guidance-receipt")
35 if err != nil || receipt.ItemID == "" {
36 t.Fatalf("guidance enqueue: %+v %v", receipt, err)
37 }
38 // Simulate a lost enqueue response. The read-only recovery must find the
39 // canonical inbox receipt before there is any user row for this instruction.
40 recovered, err := a.GetSessionComposerState(created.Ref)
41 if err != nil || recovered.SubmissionID != "" || recovered.ContentJSON != "{}" {
42 t.Fatalf("canonical guidance recovery: %+v %v", recovered, err)
43 }
44 if got := len(ctrl.InboxSnapshot().Items); got != 1 {
45 t.Fatalf("recovery replayed guidance: %d items", got)
46 }
47 }
48
48 lines GO