diff options
| author | Paul Buetow <paul@buetow.org> | 2025-09-06 13:18:21 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-09-06 13:18:21 +0300 |
| commit | 5e966f50111adf6e2cb2683fe588f6fe033fa931 (patch) | |
| tree | 19ac2033483c2ac6147e8f44ac37f14e6a5c0cf7 /internal/appconfig/config_test.go | |
| parent | 80e61812986573464cd24c4b3ffa605c4003146a (diff) | |
fix unit test coverage
Diffstat (limited to 'internal/appconfig/config_test.go')
| -rw-r--r-- | internal/appconfig/config_test.go | 164 |
1 files changed, 82 insertions, 82 deletions
diff --git a/internal/appconfig/config_test.go b/internal/appconfig/config_test.go index 65e6283..d708542 100644 --- a/internal/appconfig/config_test.go +++ b/internal/appconfig/config_test.go @@ -52,9 +52,9 @@ func TestLoad_Defaults_WithLogger_NoFile_NoEnv(t *testing.T) { func TestLoad_FileMerge_And_EnvOverride(t *testing.T) { dir := t.TempDir() t.Setenv("XDG_CONFIG_HOME", dir) - cfgPath := filepath.Join(dir, "hexai", "config.toml") - // file configuration in TOML (sectioned) - writeFile(t, cfgPath, ` + cfgPath := filepath.Join(dir, "hexai", "config.toml") + // file configuration in TOML (sectioned) + writeFile(t, cfgPath, ` [general] max_tokens = 123 context_mode = "file-on-new-func" @@ -144,13 +144,13 @@ temperature = 0.0 t.Fatalf("copilot overrides not applied: %+v", cfg) } - // Ensure file values would have applied absent env - // Spot-check: reset env and reload - for _, k := range []string{ - "HEXAI_MAX_TOKENS", "HEXAI_CONTEXT_MODE", "HEXAI_CONTEXT_WINDOW_LINES", "HEXAI_MAX_CONTEXT_TOKENS", "HEXAI_LOG_PREVIEW_LIMIT", "HEXAI_CODING_TEMPERATURE", "HEXAI_MANUAL_INVOKE_MIN_PREFIX", "HEXAI_COMPLETION_DEBOUNCE_MS", "HEXAI_COMPLETION_THROTTLE_MS", "HEXAI_TRIGGER_CHARACTERS", "HEXAI_PROVIDER", "HEXAI_OPENAI_BASE_URL", "HEXAI_OPENAI_MODEL", "HEXAI_OPENAI_TEMPERATURE", "HEXAI_OLLAMA_BASE_URL", "HEXAI_OLLAMA_MODEL", "HEXAI_OLLAMA_TEMPERATURE", "HEXAI_COPILOT_BASE_URL", "HEXAI_COPILOT_MODEL", "HEXAI_COPILOT_TEMPERATURE", - } { - t.Setenv(k, "") - } + // Ensure file values would have applied absent env + // Spot-check: reset env and reload + for _, k := range []string{ + "HEXAI_MAX_TOKENS", "HEXAI_CONTEXT_MODE", "HEXAI_CONTEXT_WINDOW_LINES", "HEXAI_MAX_CONTEXT_TOKENS", "HEXAI_LOG_PREVIEW_LIMIT", "HEXAI_CODING_TEMPERATURE", "HEXAI_MANUAL_INVOKE_MIN_PREFIX", "HEXAI_COMPLETION_DEBOUNCE_MS", "HEXAI_COMPLETION_THROTTLE_MS", "HEXAI_TRIGGER_CHARACTERS", "HEXAI_PROVIDER", "HEXAI_OPENAI_BASE_URL", "HEXAI_OPENAI_MODEL", "HEXAI_OPENAI_TEMPERATURE", "HEXAI_OLLAMA_BASE_URL", "HEXAI_OLLAMA_MODEL", "HEXAI_OLLAMA_TEMPERATURE", "HEXAI_COPILOT_BASE_URL", "HEXAI_COPILOT_MODEL", "HEXAI_COPILOT_TEMPERATURE", + } { + t.Setenv(k, "") + } cfg2 := Load(logger) if cfg2.MaxTokens != 123 || cfg2.ContextMode != "file-on-new-func" || cfg2.ContextWindowLines != 50 || cfg2.MaxContextTokens != 999 || cfg2.LogPreviewLimit != 0 { t.Fatalf("file merge not applied: %+v", cfg2) @@ -192,10 +192,10 @@ func TestLoadFromFile_InvalidTOML(t *testing.T) { } func TestLoad_FileTables_Sectioned(t *testing.T) { - dir := t.TempDir() - t.Setenv("XDG_CONFIG_HOME", dir) - cfgPath := filepath.Join(dir, "hexai", "config.toml") - content := ` + dir := t.TempDir() + t.Setenv("XDG_CONFIG_HOME", dir) + cfgPath := filepath.Join(dir, "hexai", "config.toml") + content := ` [general] max_tokens = 111 context_mode = "window" @@ -240,44 +240,44 @@ model = "ghost" base_url = "http://copilot" temperature = 0.0 ` - writeFile(t, cfgPath, content) - - // Ensure no env override interferes with manual_invoke_min_prefix in this test - t.Setenv("HEXAI_MANUAL_INVOKE_MIN_PREFIX", "") - logger := newLogger() - cfg := Load(logger) - - if cfg.MaxTokens != 111 || cfg.ContextMode != "window" || cfg.ContextWindowLines != 42 || cfg.MaxContextTokens != 777 { - t.Fatalf("sectioned basics wrong: %+v", cfg) - } - if cfg.LogPreviewLimit != 9 || cfg.CompletionDebounceMs != 123 || cfg.CompletionThrottleMs != 456 || cfg.ManualInvokeMinPrefix != 3 { - t.Fatalf("sectioned ints wrong: %+v", cfg) - } - if cfg.CodingTemperature == nil || *cfg.CodingTemperature != 0.1 { - t.Fatalf("sectioned coding_temperature wrong: %+v", cfg.CodingTemperature) - } - if want := []string{".", ":"}; !reflect.DeepEqual(cfg.TriggerCharacters, want) { - t.Fatalf("sectioned trigger chars wrong: got %v", cfg.TriggerCharacters) - } - if cfg.Provider != "openai" { - t.Fatalf("sectioned provider name wrong: %q", cfg.Provider) - } - if cfg.OpenAIModel != "gpt-x" || cfg.OpenAIBaseURL != "https://api.example" || cfg.OpenAITemperature == nil || *cfg.OpenAITemperature != 0.0 { - t.Fatalf("sectioned openai wrong: %+v", cfg) - } - if cfg.OllamaModel != "mistral" || cfg.OllamaBaseURL != "http://ollama" || cfg.OllamaTemperature == nil || *cfg.OllamaTemperature != 0.0 { - t.Fatalf("sectioned ollama wrong: %+v", cfg) - } - if cfg.CopilotModel != "ghost" || cfg.CopilotBaseURL != "http://copilot" || cfg.CopilotTemperature == nil || *cfg.CopilotTemperature != 0.0 { - t.Fatalf("sectioned copilot wrong: %+v", cfg) - } + writeFile(t, cfgPath, content) + + // Ensure no env override interferes with manual_invoke_min_prefix in this test + t.Setenv("HEXAI_MANUAL_INVOKE_MIN_PREFIX", "") + logger := newLogger() + cfg := Load(logger) + + if cfg.MaxTokens != 111 || cfg.ContextMode != "window" || cfg.ContextWindowLines != 42 || cfg.MaxContextTokens != 777 { + t.Fatalf("sectioned basics wrong: %+v", cfg) + } + if cfg.LogPreviewLimit != 9 || cfg.CompletionDebounceMs != 123 || cfg.CompletionThrottleMs != 456 || cfg.ManualInvokeMinPrefix != 3 { + t.Fatalf("sectioned ints wrong: %+v", cfg) + } + if cfg.CodingTemperature == nil || *cfg.CodingTemperature != 0.1 { + t.Fatalf("sectioned coding_temperature wrong: %+v", cfg.CodingTemperature) + } + if want := []string{".", ":"}; !reflect.DeepEqual(cfg.TriggerCharacters, want) { + t.Fatalf("sectioned trigger chars wrong: got %v", cfg.TriggerCharacters) + } + if cfg.Provider != "openai" { + t.Fatalf("sectioned provider name wrong: %q", cfg.Provider) + } + if cfg.OpenAIModel != "gpt-x" || cfg.OpenAIBaseURL != "https://api.example" || cfg.OpenAITemperature == nil || *cfg.OpenAITemperature != 0.0 { + t.Fatalf("sectioned openai wrong: %+v", cfg) + } + if cfg.OllamaModel != "mistral" || cfg.OllamaBaseURL != "http://ollama" || cfg.OllamaTemperature == nil || *cfg.OllamaTemperature != 0.0 { + t.Fatalf("sectioned ollama wrong: %+v", cfg) + } + if cfg.CopilotModel != "ghost" || cfg.CopilotBaseURL != "http://copilot" || cfg.CopilotTemperature == nil || *cfg.CopilotTemperature != 0.0 { + t.Fatalf("sectioned copilot wrong: %+v", cfg) + } } func TestLoad_FileTables_Prompts_AllSections(t *testing.T) { - dir := t.TempDir() - t.Setenv("XDG_CONFIG_HOME", dir) - cfgPath := filepath.Join(dir, "hexai", "config.toml") - content := ` + dir := t.TempDir() + t.Setenv("XDG_CONFIG_HOME", dir) + cfgPath := filepath.Join(dir, "hexai", "config.toml") + content := ` [prompts.completion] system_general = "SYS-GENERAL" system_params = "SYS-PARAMS" @@ -306,37 +306,37 @@ go_test_user = "GOTEST-USER {{function}}" default_system = "CLI-DEFAULT" explain_system = "CLI-EXPLAIN" ` - writeFile(t, cfgPath, content) - - cfg := Load(newLogger()) - - // completion - if cfg.PromptCompletionSystemGeneral != "SYS-GENERAL" || cfg.PromptCompletionSystemParams != "SYS-PARAMS" || cfg.PromptCompletionSystemInline != "SYS-INLINE" { - t.Fatalf("completion system prompts wrong: %+v", cfg) - } - if cfg.PromptCompletionUserGeneral == "" || cfg.PromptCompletionUserParams == "" || cfg.PromptCompletionExtraHeader == "" { - t.Fatalf("completion user/extra prompts not loaded") - } - // provider-native - if cfg.PromptNativeCompletion != "NATIVE {{path}} {{before}}" { - t.Fatalf("provider-native prompt wrong: %q", cfg.PromptNativeCompletion) - } - // chat - if cfg.PromptChatSystem != "CHAT-SYS" { - t.Fatalf("chat system wrong: %q", cfg.PromptChatSystem) - } - // code action - if cfg.PromptCodeActionRewriteSystem != "REWRITE-SYS" || cfg.PromptCodeActionDiagnosticsSystem != "DIAG-SYS" || cfg.PromptCodeActionDocumentSystem != "DOC-SYS" { - t.Fatalf("code action system prompts wrong") - } - if cfg.PromptCodeActionRewriteUser == "" || cfg.PromptCodeActionDiagnosticsUser == "" || cfg.PromptCodeActionDocumentUser == "" { - t.Fatalf("code action user prompts not loaded") - } - if cfg.PromptCodeActionGoTestSystem != "GOTEST-SYS" || cfg.PromptCodeActionGoTestUser == "" { - t.Fatalf("go test prompts wrong") - } - // CLI - if cfg.PromptCLIDefaultSystem != "CLI-DEFAULT" || cfg.PromptCLIExplainSystem != "CLI-EXPLAIN" { - t.Fatalf("cli prompts wrong: %q %q", cfg.PromptCLIDefaultSystem, cfg.PromptCLIExplainSystem) - } + writeFile(t, cfgPath, content) + + cfg := Load(newLogger()) + + // completion + if cfg.PromptCompletionSystemGeneral != "SYS-GENERAL" || cfg.PromptCompletionSystemParams != "SYS-PARAMS" || cfg.PromptCompletionSystemInline != "SYS-INLINE" { + t.Fatalf("completion system prompts wrong: %+v", cfg) + } + if cfg.PromptCompletionUserGeneral == "" || cfg.PromptCompletionUserParams == "" || cfg.PromptCompletionExtraHeader == "" { + t.Fatalf("completion user/extra prompts not loaded") + } + // provider-native + if cfg.PromptNativeCompletion != "NATIVE {{path}} {{before}}" { + t.Fatalf("provider-native prompt wrong: %q", cfg.PromptNativeCompletion) + } + // chat + if cfg.PromptChatSystem != "CHAT-SYS" { + t.Fatalf("chat system wrong: %q", cfg.PromptChatSystem) + } + // code action + if cfg.PromptCodeActionRewriteSystem != "REWRITE-SYS" || cfg.PromptCodeActionDiagnosticsSystem != "DIAG-SYS" || cfg.PromptCodeActionDocumentSystem != "DOC-SYS" { + t.Fatalf("code action system prompts wrong") + } + if cfg.PromptCodeActionRewriteUser == "" || cfg.PromptCodeActionDiagnosticsUser == "" || cfg.PromptCodeActionDocumentUser == "" { + t.Fatalf("code action user prompts not loaded") + } + if cfg.PromptCodeActionGoTestSystem != "GOTEST-SYS" || cfg.PromptCodeActionGoTestUser == "" { + t.Fatalf("go test prompts wrong") + } + // CLI + if cfg.PromptCLIDefaultSystem != "CLI-DEFAULT" || cfg.PromptCLIExplainSystem != "CLI-EXPLAIN" { + t.Fatalf("cli prompts wrong: %q %q", cfg.PromptCLIDefaultSystem, cfg.PromptCLIExplainSystem) + } } |
