Files
galaxy-game/gamemaster/internal/domain/engineversion/semver_test.go
T
2026-05-03 07:59:03 +02:00

86 lines
1.8 KiB
Go

package engineversion
import (
"errors"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestParseSemverNormalises(t *testing.T) {
tests := []struct {
input string
want string
}{
{"1.2.3", "v1.2.3"},
{"v1.2.3", "v1.2.3"},
{" v0.4.0 ", "v0.4.0"},
{"v2.0.0-rc.1", "v2.0.0-rc.1"},
{"v2.0.0+build.7", "v2.0.0+build.7"},
}
for _, tt := range tests {
t.Run(tt.input, func(t *testing.T) {
got, err := ParseSemver(tt.input)
require.NoError(t, err)
assert.Equal(t, tt.want, got)
})
}
}
func TestParseSemverRejects(t *testing.T) {
tests := []string{
"",
" ",
"latest",
"1",
"1.2",
"v1.2",
"1.2.3.4",
"v1.2.x",
}
for _, input := range tests {
t.Run(input, func(t *testing.T) {
_, err := ParseSemver(input)
require.Error(t, err)
assert.True(t, errors.Is(err, ErrInvalidSemver))
})
}
}
func TestIsPatchUpgrade(t *testing.T) {
tests := []struct {
name string
current string
next string
want bool
}{
{"same patch", "v1.2.3", "v1.2.3", true},
{"patch bump", "v1.2.3", "v1.2.4", true},
{"patch downgrade", "1.2.4", "1.2.0", true},
{"prerelease patch", "v1.2.3", "v1.2.3-rc.1", true},
{"minor bump", "v1.2.3", "v1.3.0", false},
{"minor downgrade", "v1.2.3", "v1.1.9", false},
{"major bump", "v1.2.3", "v2.0.0", false},
{"major downgrade", "v2.0.0", "v1.9.9", false},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := IsPatchUpgrade(tt.current, tt.next)
require.NoError(t, err)
assert.Equal(t, tt.want, got)
})
}
}
func TestIsPatchUpgradeRejectsBadInputs(t *testing.T) {
_, err := IsPatchUpgrade("garbage", "v1.2.3")
require.Error(t, err)
assert.True(t, errors.Is(err, ErrInvalidSemver))
_, err = IsPatchUpgrade("v1.2.3", "")
require.Error(t, err)
assert.True(t, errors.Is(err, ErrInvalidSemver))
}