Skip to content

Commit e73be62

Browse files
Testclaude
andcommitted
fix: setup test config with keys.yaml for E2E tests
- Write API key to keys.yaml where GetAPIKey() actually reads from - Keep config.yml for backend defaults only (not API keys) - Backup and restore both config.yml and keys.yaml - Skip tests only when GROQ_API_KEY env var is not set 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 605e68d commit e73be62

1 file changed

Lines changed: 69 additions & 9 deletions

File tree

tests/e2e/cli_workflow_test.go

Lines changed: 69 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package e2e
22

33
import (
4+
"fmt"
45
"os"
56
"path/filepath"
67
"strings"
@@ -9,20 +10,79 @@ import (
910
"gptcode/internal/modes"
1011
)
1112

12-
func hasLLMConfig() bool {
13-
keys := []string{"GROQ_API_KEY", "OPENAI_API_KEY", "ANTHROPIC_API_KEY", "OPENROUTER_API_KEY"}
14-
for _, key := range keys {
15-
if os.Getenv(key) != "" {
16-
return true
13+
func setupTestConfig(t *testing.T) func() {
14+
t.Helper()
15+
16+
groqKey := os.Getenv("GROQ_API_KEY")
17+
if groqKey == "" {
18+
t.Skip("Skipping: GROQ_API_KEY not set")
19+
}
20+
21+
homeDir, err := os.UserHomeDir()
22+
if err != nil {
23+
t.Fatalf("Failed to get home dir: %v", err)
24+
}
25+
26+
gptcodeDir := filepath.Join(homeDir, ".gptcode")
27+
configFile := filepath.Join(gptcodeDir, "config.yml")
28+
keysFile := filepath.Join(gptcodeDir, "keys.yaml")
29+
30+
// Backup existing config if exists
31+
var backupConfig []byte
32+
hadConfig := false
33+
if content, err := os.ReadFile(configFile); err == nil {
34+
backupConfig = content
35+
hadConfig = true
36+
}
37+
38+
// Backup existing keys if exists
39+
var backupKeys []byte
40+
hadKeys := false
41+
if content, err := os.ReadFile(keysFile); err == nil {
42+
backupKeys = content
43+
hadKeys = true
44+
}
45+
46+
// Create .gptcode directory
47+
os.MkdirAll(gptcodeDir, 0755)
48+
49+
// Write config with groq as default backend
50+
config := `defaults:
51+
backend: groq
52+
model: llama-3.1-8b-instant
53+
backend:
54+
groq:
55+
type: groq
56+
default_model: llama-3.1-8b-instant
57+
`
58+
if err := os.WriteFile(configFile, []byte(config), 0644); err != nil {
59+
t.Fatalf("Failed to write config: %v", err)
60+
}
61+
62+
// Write API key to keys.yaml (where GetAPIKey reads from)
63+
keys := fmt.Sprintf("groq: %s\n", groqKey)
64+
if err := os.WriteFile(keysFile, []byte(keys), 0600); err != nil {
65+
t.Fatalf("Failed to write keys: %v", err)
66+
}
67+
68+
// Return cleanup function
69+
return func() {
70+
if hadConfig {
71+
os.WriteFile(configFile, backupConfig, 0644)
72+
} else {
73+
os.Remove(configFile)
74+
}
75+
if hadKeys {
76+
os.WriteFile(keysFile, backupKeys, 0600)
77+
} else {
78+
os.Remove(keysFile)
1779
}
1880
}
19-
return false
2081
}
2182

2283
func TestCLIWorkflowPlanImplement(t *testing.T) {
23-
if !hasLLMConfig() {
24-
t.Skip("Skipping: no LLM API key configured")
25-
}
84+
cleanup := setupTestConfig(t)
85+
defer cleanup()
2686

2787
tempDir, err := os.MkdirTemp("", "gptcode_e2e_test")
2888
if err != nil {

0 commit comments

Comments
 (0)