返回 DeepSeek-Reasonix
tagged_draft_reconciliation_test.go
根目录 / desktop / tagged_draft_reconciliation_test.go
1 package main
2
3 import (
4 "testing"
5
6 "reasonix/desktop/internal/draftstate"
7 )
8
9 func TestTaggedDraftRestartReconcilesWithoutReplay(t *testing.T) {
10 for _, version := range []string{"main-v2-pr10469", "main-v2-pr10572", "1.38.11"} {
11 t.Run(version, func(t *testing.T) {
12 isolateDesktopUserDirs(t)
13 path := copyRollbackFixture(t, version, "drafts.sqlite")
14 for restart := range 3 {
15 app := NewApp()
16 app.ctx = t.Context()
17 app.desktopDrafts = draftstate.New(path)
18 t.Cleanup(func() { _ = app.desktopDrafts.Close() })
19 t.Cleanup(app.closeSessionServices)
20 app.markTabsRestored()
21 app.reconcileDraftSubmissionOperations()
22 for original, want := range map[string]string{
23 "reserved": "resume_required", "starting": "resume_required", "resume_required": "resume_required",
24 "dispatching": "dispatch_unknown", "dispatching_shell": "dispatch_unknown", "dispatch_unknown": "dispatch_unknown",
25 "accepted": "accepted", "cancel_requested": "cancelled", "cancelled": "cancelled", "failed": "dispatch_unknown",
26 } {
27 op, err := app.desktopDrafts.Operation(t.Context(), "operation-"+original)
28 if err != nil || op.Phase != want || op.SessionID != "session-"+original || op.TopicID != "topic-"+original || op.SubmissionID != "submit-"+original {
29 t.Fatalf("restart %d, %s: %+v %v", restart, original, op, err)
30 }
31 }
32 accepted, err := app.desktopDrafts.Get(t.Context(), "draft-accepted")
33 if err != nil || accepted.Status != "converted" {
34 t.Fatalf("accepted conversion missing: %+v %v", accepted, err)
35 }
36 summaries, err := app.ListSessionDraftSummaries()
37 if err != nil {
38 t.Fatal(err)
39 }
40 settingsOnly := false
41 for _, summary := range summaries {
42 settingsOnly = settingsOnly || summary.ID == "draft-settings-only"
43 }
44 if !settingsOnly || len(app.ListTabs()) != 0 {
45 t.Fatal("recovery lost settings-only draft or started a runtime")
46 }
47 infos, err := listAllCanonicalSessionInfo(t.Context(), app.desktopSessionService("").Query())
48 if err != nil || len(infos) != 0 {
49 t.Fatalf("reconciliation allocated a replacement session: %d %v", len(infos), err)
50 }
51 app.closeSessionServices()
52 if err := app.desktopDrafts.Close(); err != nil {
53 t.Fatal(err)
54 }
55 }
56 })
57 }
58 }
59
59 lines GO