mirror of
https://github.com/lukaszraczylo/kportal.git
synced 2026-06-05 23:03:40 +00:00
3a7cc6f502
* Minor improvements. * DRY the codebase. * Add version checker / updater.
91 lines
2.2 KiB
Go
91 lines
2.2 KiB
Go
package version
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestNormalizeVersion(t *testing.T) {
|
|
tests := []struct {
|
|
input string
|
|
expected string
|
|
}{
|
|
{"v1.0.0", "1.0.0"},
|
|
{"1.0.0", "1.0.0"},
|
|
{" v2.1.3 ", "2.1.3"},
|
|
{"V1.0.0", "1.0.0"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.input, func(t *testing.T) {
|
|
result := normalizeVersion(tt.input)
|
|
assert.Equal(t, tt.expected, result)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestParseVersion(t *testing.T) {
|
|
tests := []struct {
|
|
input string
|
|
expected []int
|
|
}{
|
|
{"1.0.0", []int{1, 0, 0}},
|
|
{"2.1.3", []int{2, 1, 3}},
|
|
{"1.0", []int{1, 0}},
|
|
{"10.20.30", []int{10, 20, 30}},
|
|
{"1.0.0-beta", []int{1, 0, 0}},
|
|
{"1.0.0-rc1", []int{1, 0, 0}},
|
|
{"1.0.0+build123", []int{1, 0, 0}},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.input, func(t *testing.T) {
|
|
result := parseVersion(tt.input)
|
|
assert.Equal(t, tt.expected, result)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestIsNewerVersion(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
latest string
|
|
current string
|
|
expected bool
|
|
}{
|
|
{"major version bump", "2.0.0", "1.0.0", true},
|
|
{"minor version bump", "1.1.0", "1.0.0", true},
|
|
{"patch version bump", "1.0.1", "1.0.0", true},
|
|
{"same version", "1.0.0", "1.0.0", false},
|
|
{"current is newer major", "1.0.0", "2.0.0", false},
|
|
{"current is newer minor", "1.0.0", "1.1.0", false},
|
|
{"current is newer patch", "1.0.0", "1.0.1", false},
|
|
{"multi-digit versions", "1.10.0", "1.9.0", true},
|
|
{"longer version is newer", "1.0.1", "1.0", true},
|
|
{"shorter version is older", "1.0", "1.0.1", false},
|
|
{"complex comparison", "2.1.3", "2.1.2", true},
|
|
{"real world example", "0.2.0", "0.1.0", true},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
result := isNewerVersion(tt.latest, tt.current)
|
|
assert.Equal(t, tt.expected, result)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestUpdateInfo_FormatUpdateMessage(t *testing.T) {
|
|
info := &UpdateInfo{
|
|
CurrentVersion: "0.1.0",
|
|
LatestVersion: "0.2.0",
|
|
ReleaseURL: "https://github.com/nvm/kportal/releases/tag/v0.2.0",
|
|
}
|
|
|
|
msg := info.FormatUpdateMessage()
|
|
assert.Contains(t, msg, "0.2.0")
|
|
assert.Contains(t, msg, "0.1.0")
|
|
assert.Contains(t, msg, "https://github.com/nvm/kportal/releases/tag/v0.2.0")
|
|
}
|