返回 DeepSeek-Reasonix
setup_project_preservation_test.go
根目录 / internal / cli / setup_project_preservation_test.go
1 package cli
2
3 import (
4 "os"
5 "path/filepath"
6 "reasonix/internal/config"
7 "strings"
8 "testing"
9 )
10
11 func TestProjectShellSetupPreservesUnknownFields(t *testing.T) {
12 t.Setenv("REASONIX_HOME", t.TempDir())
13 path := filepath.Join(t.TempDir(), "reasonix.toml")
14 body := "future_setting='keep-top'\n[[providers]]\nname='relay'\nkind='openai'\nbase_url='https://relay.invalid/v1'\nmodel='chat'\napi_key_env='OLD_KEY'\nfuture_option='keep-provider'\n[providers.future_table]\nvalue='keep-nested'\n"
15 if err := os.WriteFile(path, []byte(body), 0600); err != nil {
16 t.Fatal(err)
17 }
18 cfg, err := config.LoadForEditReadOnlyStrict(path)
19 if err != nil {
20 t.Fatal(err)
21 }
22 s := newProviderSetupSessionForPath(cfg, path)
23 if err := s.setCredentialForProviders([]string{"relay"}, "OLD_KEY", "fixture-key"); err != nil {
24 t.Fatal(err)
25 }
26 if _, err := commitProviderSetupSession(s, path); err != nil {
27 t.Fatal(err)
28 }
29 raw, err := os.ReadFile(path)
30 if err != nil {
31 t.Fatal(err)
32 }
33 for _, marker := range []string{"keep-top", "keep-provider", "keep-nested"} {
34 if !strings.Contains(string(raw), marker) {
35 t.Fatalf("lost %s", marker)
36 }
37 }
38 if _, err := os.Stat(config.UserConfigPath()); !os.IsNotExist(err) {
39 t.Fatal("project provider was promoted to user config")
40 }
41 if _, err := os.Stat(filepath.Join(filepath.Dir(path), ".env")); !os.IsNotExist(err) {
42 t.Fatal("credential saved into project")
43 }
44 }
45
45 lines GO