Files
gastown/internal/cmd/beads_version_test.go
furiosa 2922affa02 feat(deps): add minimum beads version check (gt-im3fl)
Add version check that enforces beads >= 0.44.0 at CLI startup,
required for custom type support (bd-i54l). Commands like version,
help, and completion bypass the check.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 22:52:32 -08:00

69 lines
1.6 KiB
Go

package cmd
import "testing"
func TestParseBeadsVersion(t *testing.T) {
tests := []struct {
input string
want beadsVersion
wantErr bool
}{
{"0.44.0", beadsVersion{0, 44, 0}, false},
{"1.2.3", beadsVersion{1, 2, 3}, false},
{"0.44.0-dev", beadsVersion{0, 44, 0}, false},
{"v0.44.0", beadsVersion{0, 44, 0}, false},
{"0.44", beadsVersion{0, 44, 0}, false},
{"10.20.30", beadsVersion{10, 20, 30}, false},
{"invalid", beadsVersion{}, true},
{"", beadsVersion{}, true},
{"a.b.c", beadsVersion{}, true},
}
for _, tt := range tests {
t.Run(tt.input, func(t *testing.T) {
got, err := parseBeadsVersion(tt.input)
if (err != nil) != tt.wantErr {
t.Errorf("parseBeadsVersion(%q) error = %v, wantErr %v", tt.input, err, tt.wantErr)
return
}
if !tt.wantErr && got != tt.want {
t.Errorf("parseBeadsVersion(%q) = %+v, want %+v", tt.input, got, tt.want)
}
})
}
}
func TestBeadsVersionCompare(t *testing.T) {
tests := []struct {
v1 string
v2 string
want int
}{
{"0.44.0", "0.44.0", 0},
{"0.44.0", "0.43.0", 1},
{"0.43.0", "0.44.0", -1},
{"1.0.0", "0.99.99", 1},
{"0.44.1", "0.44.0", 1},
{"0.44.0", "0.44.1", -1},
{"1.2.3", "1.2.3", 0},
}
for _, tt := range tests {
t.Run(tt.v1+"_vs_"+tt.v2, func(t *testing.T) {
v1, err := parseBeadsVersion(tt.v1)
if err != nil {
t.Fatalf("failed to parse v1 %q: %v", tt.v1, err)
}
v2, err := parseBeadsVersion(tt.v2)
if err != nil {
t.Fatalf("failed to parse v2 %q: %v", tt.v2, err)
}
got := v1.compare(v2)
if got != tt.want {
t.Errorf("(%s).compare(%s) = %d, want %d", tt.v1, tt.v2, got, tt.want)
}
})
}
}