- Add -v, --version flag to root command - Both bd --version and bd -v now print version info - bd version subcommand continues to work as before - Add tests for both flag variants Amp-Thread-ID: https://ampcode.com/threads/T-583f9ef8-c358-48c5-91cf-c23a91bab9d7 Co-authored-by: Amp <amp@ampcode.com>
145 lines
3.3 KiB
Go
145 lines
3.3 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestVersionCommand(t *testing.T) {
|
|
// Save original stdout
|
|
oldStdout := os.Stdout
|
|
defer func() { os.Stdout = oldStdout }()
|
|
|
|
t.Run("plain text version output", func(t *testing.T) {
|
|
// Create a pipe to capture output
|
|
r, w, err := os.Pipe()
|
|
if err != nil {
|
|
t.Fatalf("Failed to create pipe: %v", err)
|
|
}
|
|
os.Stdout = w
|
|
jsonOutput = false
|
|
|
|
// Run version command
|
|
versionCmd.Run(versionCmd, []string{})
|
|
|
|
// Close writer and read output
|
|
w.Close()
|
|
var buf bytes.Buffer
|
|
buf.ReadFrom(r)
|
|
output := buf.String()
|
|
|
|
// Verify output contains version info
|
|
if !strings.Contains(output, "bd version") {
|
|
t.Errorf("Expected output to contain 'bd version', got: %s", output)
|
|
}
|
|
if !strings.Contains(output, Version) {
|
|
t.Errorf("Expected output to contain version %s, got: %s", Version, output)
|
|
}
|
|
})
|
|
|
|
t.Run("json version output", func(t *testing.T) {
|
|
// Create a pipe to capture output
|
|
r, w, err := os.Pipe()
|
|
if err != nil {
|
|
t.Fatalf("Failed to create pipe: %v", err)
|
|
}
|
|
os.Stdout = w
|
|
jsonOutput = true
|
|
|
|
// Run version command
|
|
versionCmd.Run(versionCmd, []string{})
|
|
|
|
// Close writer and read output
|
|
w.Close()
|
|
var buf bytes.Buffer
|
|
buf.ReadFrom(r)
|
|
output := buf.String()
|
|
|
|
// Parse JSON output
|
|
var result map[string]string
|
|
if err := json.Unmarshal([]byte(output), &result); err != nil {
|
|
t.Fatalf("Failed to parse JSON output: %v", err)
|
|
}
|
|
|
|
// Verify JSON contains version and build
|
|
if result["version"] != Version {
|
|
t.Errorf("Expected version %s, got %s", Version, result["version"])
|
|
}
|
|
if result["build"] == "" {
|
|
t.Error("Expected build field to be non-empty")
|
|
}
|
|
})
|
|
|
|
// Restore default
|
|
jsonOutput = false
|
|
}
|
|
|
|
func TestVersionFlag(t *testing.T) {
|
|
// Save original stdout
|
|
oldStdout := os.Stdout
|
|
defer func() { os.Stdout = oldStdout }()
|
|
|
|
t.Run("--version flag", func(t *testing.T) {
|
|
// Create a pipe to capture output
|
|
r, w, err := os.Pipe()
|
|
if err != nil {
|
|
t.Fatalf("Failed to create pipe: %v", err)
|
|
}
|
|
os.Stdout = w
|
|
|
|
// Set version flag and run root command
|
|
rootCmd.SetArgs([]string{"--version"})
|
|
rootCmd.Execute()
|
|
|
|
// Close writer and read output
|
|
w.Close()
|
|
var buf bytes.Buffer
|
|
buf.ReadFrom(r)
|
|
output := buf.String()
|
|
|
|
// Verify output contains version info
|
|
if !strings.Contains(output, "bd version") {
|
|
t.Errorf("Expected output to contain 'bd version', got: %s", output)
|
|
}
|
|
if !strings.Contains(output, Version) {
|
|
t.Errorf("Expected output to contain version %s, got: %s", Version, output)
|
|
}
|
|
|
|
// Reset args
|
|
rootCmd.SetArgs(nil)
|
|
})
|
|
|
|
t.Run("-v shorthand", func(t *testing.T) {
|
|
// Create a pipe to capture output
|
|
r, w, err := os.Pipe()
|
|
if err != nil {
|
|
t.Fatalf("Failed to create pipe: %v", err)
|
|
}
|
|
os.Stdout = w
|
|
|
|
// Set version flag and run root command
|
|
rootCmd.SetArgs([]string{"-v"})
|
|
rootCmd.Execute()
|
|
|
|
// Close writer and read output
|
|
w.Close()
|
|
var buf bytes.Buffer
|
|
buf.ReadFrom(r)
|
|
output := buf.String()
|
|
|
|
// Verify output contains version info
|
|
if !strings.Contains(output, "bd version") {
|
|
t.Errorf("Expected output to contain 'bd version', got: %s", output)
|
|
}
|
|
if !strings.Contains(output, Version) {
|
|
t.Errorf("Expected output to contain version %s, got: %s", Version, output)
|
|
}
|
|
|
|
// Reset args
|
|
rootCmd.SetArgs(nil)
|
|
})
|
|
}
|