mirror of
https://github.com/lukaszraczylo/lolcathost.git
synced 2026-06-05 23:29:18 +00:00
29263dc8a2
* gosec govulncheck runs
* Fix flaky TestRateLimiter_Matrix test
The test was failing due to two issues:
1. Test name generation used invalid character conversion (string(rune('0'+limit)))
which produced non-printable characters for limits >= 10
2. Using 10ms windows with 100 requests caused race conditions - early requests
would expire before all 100 were made, allowing the 101st request
Changed to use struct-based test cases with proper fmt.Sprintf naming and
a consistent 1-second window that won't expire during rapid test execution.
87 lines
2.1 KiB
Go
87 lines
2.1 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"},
|
|
{"v0.1.0", "0.1.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},
|
|
{"longer version is newer", "1.0.1", "1.0", true},
|
|
{"shorter version is older", "1.0", "1.0.1", false},
|
|
{"double digit versions", "10.0.0", "9.0.0", true},
|
|
{"with prerelease suffix", "1.1.0", "1.0.0-beta", 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 TestNewChecker(t *testing.T) {
|
|
checker := NewChecker("lukaszraczylo", "lolcathost", "v1.0.0")
|
|
|
|
assert.Equal(t, "lukaszraczylo", checker.owner)
|
|
assert.Equal(t, "lolcathost", checker.repo)
|
|
assert.Equal(t, "1.0.0", checker.current) // Should be normalized
|
|
assert.NotNil(t, checker.client)
|
|
}
|