diff options
Diffstat (limited to 'internal/runtimeconfig/store_test.go')
| -rw-r--r-- | internal/runtimeconfig/store_test.go | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/internal/runtimeconfig/store_test.go b/internal/runtimeconfig/store_test.go new file mode 100644 index 0000000..9973a1a --- /dev/null +++ b/internal/runtimeconfig/store_test.go @@ -0,0 +1,59 @@ +package runtimeconfig + +import ( + "io" + "log" + "os" + "path/filepath" + "testing" + + "codeberg.org/snonux/hexai/internal/appconfig" +) + +func TestStoreReloadSkipsEnvOverrides(t *testing.T) { + logger := log.New(io.Discard, "", 0) + tmp := t.TempDir() + configDir := filepath.Join(tmp, "hexai") + if err := os.MkdirAll(configDir, 0o755); err != nil { + t.Fatalf("failed to create config dir: %v", err) + } + configPath := filepath.Join(configDir, "config.toml") + if err := os.WriteFile(configPath, []byte("[general]\nmax_tokens = 64\n"), 0o644); err != nil { + t.Fatalf("failed to write config file: %v", err) + } + + t.Setenv("XDG_CONFIG_HOME", tmp) + t.Setenv("HEXAI_MAX_TOKENS", "321") + + initial := appconfig.Load(logger) + if initial.MaxTokens != 321 { + t.Fatalf("expected env override to win initial load, got %d", initial.MaxTokens) + } + + store := New(initial) + if err := os.WriteFile(configPath, []byte("[general]\nmax_tokens = 128\n"), 0o644); err != nil { + t.Fatalf("failed to update config file: %v", err) + } + + changes, err := store.Reload(logger, appconfig.LoadOptions{IgnoreEnv: true}) + if err != nil { + t.Fatalf("reload failed: %v", err) + } + + if snap := store.Snapshot(); snap.MaxTokens != 128 { + t.Fatalf("expected reload to apply file value, got %d", snap.MaxTokens) + } + + found := false + for _, change := range changes { + if change.Key == "max_tokens" { + found = true + if change.Old != "321" || change.New != "128" { + t.Fatalf("unexpected change diff: %+v", change) + } + } + } + if !found { + t.Fatalf("expected max_tokens change in diff, got %#v", changes) + } +} |
