返回 DeepSeek-Reasonix
desktop_layout_upgrade_test.go
根目录 / internal / config / desktop_layout_upgrade_test.go
1 package config
2
3 import (
4 "fmt"
5 "os"
6 "path/filepath"
7 "strings"
8 "testing"
9 )
10
11 func TestApplyUserConfigUpgradesOnStartupMigratesClassicDesktopLayout(t *testing.T) {
12 path := isolatedDesktopLayoutUserConfigPath(t)
13 original := fmt.Sprintf(`config_version = %d
14
15 [desktop]
16 layout_style = "classic"
17 theme = "dark"
18 `, Default().ConfigVersion)
19 if err := os.WriteFile(path, []byte(original), 0o600); err != nil {
20 t.Fatal(err)
21 }
22
23 changed, err := ApplyUserConfigUpgradesOnStartup(path)
24 if err != nil {
25 t.Fatalf("ApplyUserConfigUpgradesOnStartup: %v", err)
26 }
27 if !changed {
28 t.Fatal("classic desktop layout was not migrated")
29 }
30
31 raw, err := os.ReadFile(path)
32 if err != nil {
33 t.Fatal(err)
34 }
35 text := string(raw)
36 if !strings.Contains(text, `layout_style = "workbench"`) || strings.Contains(text, `layout_style = "classic"`) {
37 t.Fatalf("migrated desktop layout not persisted:\n%s", text)
38 }
39 if !strings.Contains(text, `theme = "dark"`) {
40 t.Fatalf("desktop migration dropped an unrelated preference:\n%s", text)
41 }
42 if got := LoadForEditWithoutCredentials(path).DesktopLayoutStyle(); got != "workbench" {
43 t.Fatalf("DesktopLayoutStyle() = %q, want workbench", got)
44 }
45
46 again, err := ApplyUserConfigUpgradesOnStartup(path)
47 if err != nil || again {
48 t.Fatalf("second upgrade changed=%v err=%v", again, err)
49 }
50 }
51
52 func TestApplyUserConfigUpgradesOnStartupLeavesCurrentDesktopLayoutsAlone(t *testing.T) {
53 for _, layout := range []string{"workbench", "creation"} {
54 t.Run(layout, func(t *testing.T) {
55 path := isolatedDesktopLayoutUserConfigPath(t)
56 original := fmt.Sprintf("config_version = %d\n\n[desktop]\nlayout_style = %q\n", Default().ConfigVersion, layout)
57 if err := os.WriteFile(path, []byte(original), 0o600); err != nil {
58 t.Fatal(err)
59 }
60
61 changed, err := ApplyUserConfigUpgradesOnStartup(path)
62 if err != nil || changed {
63 t.Fatalf("upgrade changed=%v err=%v", changed, err)
64 }
65 raw, err := os.ReadFile(path)
66 if err != nil {
67 t.Fatal(err)
68 }
69 if string(raw) != original {
70 t.Fatalf("current %s config was rewritten:\n%s", layout, raw)
71 }
72 })
73 }
74 }
75
76 func TestApplyUserConfigUpgradesOnStartupDoesNotRewriteFutureClassicConfig(t *testing.T) {
77 path := isolatedDesktopLayoutUserConfigPath(t)
78 original := fmt.Sprintf("config_version = %d\n\n[desktop]\nlayout_style = \"classic\"\n", Default().ConfigVersion+1)
79 if err := os.WriteFile(path, []byte(original), 0o600); err != nil {
80 t.Fatal(err)
81 }
82
83 changed, err := ApplyUserConfigUpgradesOnStartup(path)
84 if err != nil || changed {
85 t.Fatalf("future config upgrade changed=%v err=%v", changed, err)
86 }
87 raw, err := os.ReadFile(path)
88 if err != nil {
89 t.Fatal(err)
90 }
91 if string(raw) != original {
92 t.Fatalf("future config was rewritten:\n%s", raw)
93 }
94 }
95
96 func isolatedDesktopLayoutUserConfigPath(t *testing.T) string {
97 t.Helper()
98 home := t.TempDir()
99 t.Setenv("REASONIX_HOME", home)
100 path := UserConfigPath()
101 if err := os.MkdirAll(filepath.Dir(path), 0o700); err != nil {
102 t.Fatal(err)
103 }
104 return path
105 }
106
106 lines GO