diff --git a/update/types.go b/update/types.go index a6fd721e..be3eb479 100644 --- a/update/types.go +++ b/update/types.go @@ -82,7 +82,7 @@ func IsOutdated(current, latest string) bool { // fallback to naive comparison return current != latest } - return latestVer.GreaterThan(currentVer) + return currentVer.LessThan(latestVer) } // IsDevReleaseOutdated returns true if installed tool (dev version) is outdated diff --git a/update/types_test.go b/update/types_test.go new file mode 100644 index 00000000..a686f10c --- /dev/null +++ b/update/types_test.go @@ -0,0 +1,63 @@ +package updateutils + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestIsOutdated(t *testing.T) { + tests := []struct { + current string + latest string + expected bool + }{ + { + current: "1.0.0", + latest: "1.1.0", + expected: true, + }, + { + current: "1.0.0", + latest: "1.0.0", + expected: false, + }, + { + current: "1.1.0", + latest: "1.0.0", + expected: false, + }, + { + current: "1.0.0-dev", + latest: "1.0.0", + expected: true, + }, + { + current: "invalid", + latest: "1.0.0", + expected: true, + }, + { + current: "invalid1", + latest: "invalid2", + expected: true, + }, + { + current: "1.0.0-alpha", + latest: "1.0.0", + expected: true, + }, + { + current: "1.0.0-alpha", + latest: "1.0.0-beta", + expected: true, + }, + } + + for _, tt := range tests { + t.Run(fmt.Sprintf("current: %v, latest: %v", tt.current, tt.latest), func(t *testing.T) { + assert.Equal(t, tt.expected, IsOutdated(tt.current, tt.latest), "version comparison failed") + }) + } +}