package main import ( "bytes" "strings" "testing" ) func executeCommand(args ...string) (string, error) { buf := new(bytes.Buffer) rootCmd.SetOut(buf) rootCmd.SetErr(buf) rootCmd.SetArgs(args) defer rootCmd.SetArgs([]string{}) out, err := func() (string, error) { err := rootCmd.Execute() return buf.String(), err }() return out, err } func TestVersionCommandRegistered(t *testing.T) { found := false for _, cmd := range rootCmd.Commands() { if cmd.Name() == "version" { found = true break } } if !found { t.Fatalf("expected 'version' subcommand to be registered on rootCmd") } } func TestVersionOutputFormat(t *testing.T) { out, err := executeCommand("version") if err != nil { t.Fatalf("version command failed: %v", err) } trimmed := strings.TrimSpace(out) if !strings.HasPrefix(trimmed, "bug version ") { t.Errorf("expected output to start with %q, got %q", "bug version ", trimmed) } ver := strings.TrimSpace(strings.TrimPrefix(trimmed, "bug version ")) if ver == "" { t.Errorf("version string is empty, got %q", trimmed) } } func TestVersionReflectsVersionVar(t *testing.T) { orig := version version = "9.9.9-test" defer func() { version = orig }() out, err := executeCommand("version") if err != nil { t.Fatalf("version command failed: %v", err) } expected := "bug version 9.9.9-test" if strings.TrimSpace(out) != expected { t.Errorf("expected %q, got %q", expected, strings.TrimSpace(out)) } } func TestFormatVersion(t *testing.T) { orig := version version = "1.0.1" defer func() { version = orig }() if got := formatVersion(); got != "bug version 1.0.1" { t.Errorf("formatVersion() = %q, want %q", got, "bug version 1.0.1") } }