返回 DeepSeek-Reasonix
migrate_v1_precedence_test.go
根目录 / internal / config / migrate_v1_precedence_test.go
1 package config
2
3 import (
4 "fmt"
5 "os"
6 "path/filepath"
7 "strings"
8 "testing"
9 )
10
11 func TestMigrateImportsLegacyV1TOMLBeforeJSON(t *testing.T) {
12 srcJSON, dest, _ := legacyHome(t)
13 legacyTOML := filepath.Join(filepath.Dir(dest), "reasonix.toml")
14 if err := os.MkdirAll(filepath.Dir(legacyTOML), 0o755); err != nil {
15 t.Fatal(err)
16 }
17 if err := os.WriteFile(legacyTOML, []byte(`
18 default_model = "deepseek-flash"
19 language = "en"
20
21 [ui]
22 theme = "light"
23 theme_style = "glacier"
24 close_behavior = "quit"
25
26 [[plugins]]
27 name = "legacy-v1"
28 command = "legacy-bin"
29 `), 0o644); err != nil {
30 t.Fatal(err)
31 }
32 writeLegacy(t, srcJSON, `{"apiKey":"sk-json-should-not-win"}`)
33
34 res, err := MigrateLegacyIfNeeded()
35 if err != nil {
36 t.Fatalf("migrate: %v", err)
37 }
38 if res == nil || res.From != legacyTOML {
39 t.Fatalf("expected v1 TOML migration, got %+v", res)
40 }
41
42 got, err := os.ReadFile(dest)
43 if err != nil {
44 t.Fatalf("read migrated config: %v", err)
45 }
46 text := string(got)
47 for _, want := range []string{fmt.Sprintf("config_version = %d", Default().ConfigVersion), `[desktop]`, `close_behavior = "quit"`, `name = "legacy-v1"`} {
48 if !strings.Contains(text, want) {
49 t.Fatalf("migrated TOML missing %q:\n%s", want, text)
50 }
51 }
52 if _, err := os.Stat(UserCredentialsPath()); !os.IsNotExist(err) {
53 t.Fatalf("v1 TOML migration should not import lower-priority JSON key, credentials stat err=%v", err)
54 }
55 }
56
56 lines GO