1package cli
2
3import (
4 "testing"
5
6 "github.com/stretchr/testify/assert"
7)
8
9func TestSortSemverTags(t *testing.T) {
10 tests := []struct {
11 name string
12 tags []string
13 wantTags []string
14 }{
15 {
16 name: "v-prefixed tags sorted descending",
17 tags: []string{"v1.0.0", "v2.0.0", "v1.5.0"},
18 wantTags: []string{"v2.0.0", "v1.5.0", "v1.0.0"},
19 },
20 {
21 name: "non-v-prefixed tags sorted as semver",
22 tags: []string{"1.0.0", "2.0.0", "1.5.0"},
23 wantTags: []string{"2.0.0", "1.5.0", "1.0.0"},
24 },
25 {
26 name: "mixed v and non-v prefixed",
27 tags: []string{"v1.0.0", "2.0.0", "1.5.0"},
28 wantTags: []string{"2.0.0", "1.5.0", "v1.0.0"}, // all recognized as semver, sorted desc
29 },
30 {
31 name: "pre-release tags",
32 tags: []string{"v1.0.0-rc1", "v1.0.0", "1.0.0-beta"},
33 wantTags: []string{"v1.0.0", "v1.0.0-rc1", "1.0.0-beta"}, // release > pre-release
34 },
35 {
36 name: "non-semver tags appended after",
37 tags: []string{"latest", "v1.0.0", "dev"},
38 wantTags: []string{"v1.0.0", "latest", "dev"},
39 },
40 }
41
42 for _, tt := range tests {
43 t.Run(tt.name, func(t *testing.T) {
44 gotTags := sortSemverTags(tt.tags)
45 assert.Equal(t, tt.wantTags, gotTags)
46 })
47 }
48}
49
50func TestValidateTagExists(t *testing.T) {
51 assert.True(t, validateTagExists("v1.0.0", []string{"v1.0.0", "v2.0.0"}))
52 assert.False(t, validateTagExists("v3.0.0", []string{"v1.0.0", "v2.0.0"}))
53}