keel/internal/policy/semver_test.go

280 lines
5.6 KiB
Go

package policy
import (
"testing"
)
func Test_shouldUpdate(t *testing.T) {
type args struct {
spt SemverPolicyType
current string
new string
preReleaseMatch bool
}
tests := []struct {
name string
args args
want bool
wantErr bool
}{
{
name: "new lower, policy all",
args: args{
current: "1.4.5",
new: "1.4.3",
spt: SemverPolicyTypeAll,
},
want: false,
wantErr: false,
},
{
name: "new minor increase, policy all",
args: args{
current: "1.4.5",
new: "1.4.6",
spt: SemverPolicyTypeAll,
},
want: true,
wantErr: false,
},
{
name: "no increase, policy all",
args: args{
current: "1.4.5",
new: "1.4.5",
spt: SemverPolicyTypeAll,
},
want: false,
wantErr: false,
},
{
name: "minor increase - 2 points, policy all",
args: args{
current: "1.4",
new: "1.5",
spt: SemverPolicyTypeAll,
},
want: true,
wantErr: false,
},
{
name: "minor increase, policy major",
args: args{
current: "1.4.5",
new: "1.5.5",
spt: SemverPolicyTypeMajor,
},
want: true,
wantErr: false,
},
{
name: "major increase, policy major",
args: args{
current: "1.4.5",
new: "2.4.5",
spt: SemverPolicyTypeMajor,
},
want: true,
wantErr: false,
},
{
name: "patch increase, policy patch",
args: args{
current: "1.4.5",
new: "1.4.6",
spt: SemverPolicyTypePatch,
},
want: true,
wantErr: false,
},
{
name: "patch release, policy patch",
args: args{
current: "1.4",
new: "1.4.6",
spt: SemverPolicyTypePatch,
},
want: true,
wantErr: false,
},
{
name: "minor and patch release, policy patch",
args: args{
current: "1.4",
new: "1.5.6",
spt: SemverPolicyTypePatch,
},
want: false,
wantErr: false,
},
{
name: "patch decrease, policy patch",
args: args{
current: "1.4.5",
new: "1.4.4",
spt: SemverPolicyTypePatch,
},
want: false,
wantErr: false,
},
{
name: "2 points minor change, policy patch",
args: args{
current: "1.4",
new: "1.5",
spt: SemverPolicyTypePatch,
},
want: false,
wantErr: false,
},
{
name: "patch AND major increase, policy patch",
args: args{
current: "1.4.5",
new: "2.4.6",
spt: SemverPolicyTypePatch,
},
want: false,
wantErr: false,
},
{
name: "patch same, policy patch",
args: args{
current: "1.4.5",
new: "1.4.5",
spt: SemverPolicyTypePatch,
},
want: false,
wantErr: false,
},
{
name: "minor increase, policy minor",
args: args{
current: "1.4.5",
new: "1.5.5",
spt: SemverPolicyTypeMinor,
},
want: true,
wantErr: false,
},
{
name: "minor increase 2 points, policy minor",
args: args{
current: "1.4",
new: "1.5",
spt: SemverPolicyTypeMinor,
},
want: true,
wantErr: false,
},
{
name: "patch increase, policy minor",
args: args{
current: "1.4.5",
new: "1.4.6",
spt: SemverPolicyTypeMinor,
},
want: true,
wantErr: false,
},
{
name: "prerelease patch increase, policy minor, no prerelease",
args: args{
current: "1.4.5",
new: "1.4.5-xx",
spt: SemverPolicyTypeMinor,
preReleaseMatch: true,
},
want: false,
wantErr: false,
},
{
name: "parsed prerelease patch increase, policy minor, no prerelease",
args: args{
current: "v1.0.0",
new: "v1.0.1-metadata",
spt: SemverPolicyTypeMinor,
preReleaseMatch: true,
},
want: false,
wantErr: false,
},
{
name: "parsed prerelease minor increase, policy minor, both have metadata",
args: args{
current: "v1.0.0-metadata",
new: "v1.0.1-metadata",
spt: SemverPolicyTypeMinor,
preReleaseMatch: true,
},
want: true,
wantErr: false,
},
{
name: "prerelease patch increase, policy minor",
args: args{
current: "1.4.5-xx",
new: "1.4.6-xx",
spt: SemverPolicyTypeMinor,
preReleaseMatch: true,
},
want: true,
wantErr: false,
},
{
name: "patch increase, policy minor, wrong prerelease",
args: args{
current: "1.4.5-xx",
new: "1.4.6-yy",
spt: SemverPolicyTypeMinor,
preReleaseMatch: true,
},
want: false,
wantErr: false,
},
{
name: "number",
args: args{
current: "1.4.5",
new: "3050",
spt: SemverPolicyTypeAll,
},
want: false,
wantErr: true,
},
{
name: "pre-release increase, policy All",
args: args{
current: "1.4.5-xx",
new: "1.4.5-yy",
spt: SemverPolicyTypeAll,
},
want: true,
wantErr: false,
},
{
name: "pre-release increase, policy Patch, do NOT match on pre-release",
args: args{
current: "1.4.5-xx",
new: "1.4.5-yy",
spt: SemverPolicyTypePatch,
preReleaseMatch: false,
},
want: true,
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := shouldUpdate(tt.args.spt, tt.args.preReleaseMatch, tt.args.current, tt.args.new)
if (err != nil) != tt.wantErr {
t.Errorf("shouldUpdate() error = %v, wantErr %v", err, tt.wantErr)
return
}
if got != tt.want {
t.Errorf("shouldUpdate() = %v, want %v", got, tt.want)
}
})
}
}