version_test.go

 1package main
 2
 3import (
 4	"bytes"
 5	"strings"
 6	"testing"
 7)
 8
 9func executeCommand(args ...string) (string, error) {
10	buf := new(bytes.Buffer)
11	rootCmd.SetOut(buf)
12	rootCmd.SetErr(buf)
13	rootCmd.SetArgs(args)
14	defer rootCmd.SetArgs([]string{})
15	out, err := func() (string, error) {
16		err := rootCmd.Execute()
17		return buf.String(), err
18	}()
19	return out, err
20}
21
22func TestVersionCommandRegistered(t *testing.T) {
23	found := false
24	for _, cmd := range rootCmd.Commands() {
25		if cmd.Name() == "version" {
26			found = true
27			break
28		}
29	}
30	if !found {
31		t.Fatalf("expected 'version' subcommand to be registered on rootCmd")
32	}
33}
34
35func TestVersionOutputFormat(t *testing.T) {
36	out, err := executeCommand("version")
37	if err != nil {
38		t.Fatalf("version command failed: %v", err)
39	}
40	trimmed := strings.TrimSpace(out)
41	if !strings.HasPrefix(trimmed, "bug version ") {
42		t.Errorf("expected output to start with %q, got %q", "bug version ", trimmed)
43	}
44	ver := strings.TrimSpace(strings.TrimPrefix(trimmed, "bug version "))
45	if ver == "" {
46		t.Errorf("version string is empty, got %q", trimmed)
47	}
48}
49
50func TestVersionReflectsVersionVar(t *testing.T) {
51	orig := version
52	version = "9.9.9-test"
53	defer func() { version = orig }()
54
55	out, err := executeCommand("version")
56	if err != nil {
57		t.Fatalf("version command failed: %v", err)
58	}
59	expected := "bug version 9.9.9-test"
60	if strings.TrimSpace(out) != expected {
61		t.Errorf("expected %q, got %q", expected, strings.TrimSpace(out))
62	}
63}
64
65func TestFormatVersion(t *testing.T) {
66	orig := version
67	version = "1.0.1"
68	defer func() { version = orig }()
69
70	if got := formatVersion(); got != "bug version 1.0.1" {
71		t.Errorf("formatVersion() = %q, want %q", got, "bug version 1.0.1")
72	}
73}