package cmd import ( "fmt" "os" "path/filepath" "strings" "testing" ) func rootSetHomeForTest(t *testing.T, dir string) { t.Helper() if err := os.Setenv("HOME", dir); err != nil { t.Fatal(err) } } func TestExecute(t *testing.T) { tests := []struct { name string args []string exitCode int wantLevel string }{ {"version", []string{"version"}, 0, ""}, {"help", []string{}, 0, ""}, {"debug flag", []string{"version", "--debug"}, 0, "debug"}, {"verbose flag", []string{"version", "-v"}, 0, "info"}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { tmpDir := t.TempDir() rootSetHomeForTest(t, tmpDir) oldArgs := os.Args os.Args = append([]string{"grokkit"}, tt.args...) defer func() { os.Args = oldArgs }() Execute() if tt.wantLevel != "" { logFile := filepath.Join(tmpDir, ".config", "grokkit", "grokkit.log") content, err := os.ReadFile(logFile) if err != nil { t.Error(err) return } str := string(content) if !strings.Contains(str, fmt.Sprintf(`"log_level":"%s"`, tt.wantLevel)) { t.Errorf("log level not %s:\n%s", tt.wantLevel, str) } } }) } }