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>
This commit is contained in:
68
internal/cmd/beads_version_test.go
Normal file
68
internal/cmd/beads_version_test.go
Normal file
@@ -0,0 +1,68 @@
|
||||
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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user