返回 DeepSeek-Reasonix
session_catalog_manual_order_test.go
根目录 / desktop / session_catalog_manual_order_test.go
1 package main
2
3 import (
4 "context"
5 "os"
6 "strings"
7 "testing"
8 )
9
10 func TestManualTopicOrderIsAuthoritativeAcrossCatalogPages(t *testing.T) {
11 isolateDesktopUserDirs(t)
12 root := t.TempDir()
13 if err := addProject(root, "Ordered project"); err != nil {
14 t.Fatal(err)
15 }
16 dir := desktopSessionDir(root)
17 if err := os.MkdirAll(dir, 0o755); err != nil {
18 t.Fatal(err)
19 }
20 for _, topicID := range []string{"a", "b", "c"} {
21 writeTopicSession(t, dir, topicID+".jsonl", topicID, strings.ToUpper(topicID), root)
22 if err := setTopicTitle(root, topicID, strings.ToUpper(topicID)); err != nil {
23 t.Fatal(err)
24 }
25 }
26 if err := updateProjectsFile(func(f *desktopProjectFile) (bool, error) {
27 f.Projects[projectIndexByRoot(f.Projects, root)].Topics = []string{"a", "b", "c"}
28 return true, nil
29 }); err != nil {
30 t.Fatal(err)
31 }
32 app := NewApp()
33 if err := app.ReorderTopics("project", root, []string{"c", "b", "a"}); err != nil {
34 t.Fatal(err)
35 }
36 installSessionCatalogForTest(t, app, dir, "project", root)
37 if err := app.syncSessionCatalogMetadata(context.Background(), app.sessionCatalog.Load()); err != nil {
38 t.Fatal(err)
39 }
40
41 first, err := app.ListProjectTopics(ProjectTopicPageRequest{Scope: "project", WorkspaceRoot: root, Limit: 2})
42 if err != nil {
43 t.Fatal(err)
44 }
45 second, err := app.ListProjectTopics(ProjectTopicPageRequest{
46 Scope: "project", WorkspaceRoot: root, Limit: 2, Cursor: first.NextCursor,
47 })
48 if err != nil {
49 t.Fatal(err)
50 }
51 if len(first.Items) != 2 || len(second.Items) != 1 || first.NextCursor == "" || second.NextCursor != "" {
52 t.Fatalf("manual pages = first %#v second %#v", first, second)
53 }
54 got := []string{first.Items[0].TopicID, first.Items[1].TopicID, second.Items[0].TopicID}
55 want := []string{"c", "b", "a"}
56 for index := range want {
57 if got[index] != want[index] {
58 t.Fatalf("manual catalog order = %v, want %v", got, want)
59 }
60 }
61 }
62
62 lines GO