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>
69 lines
1.6 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|
|
}
|