1package update
2
3import (
4 "context"
5 "testing"
6
7 "github.com/charmbracelet/crush/internal/version"
8 "github.com/stretchr/testify/require"
9)
10
11func TestCompareVersions(t *testing.T) {
12 tests := []struct {
13 name string
14 v1 string
15 v2 string
16 expected int
17 }{
18 {
19 name: "equal versions",
20 v1: "1.0.0",
21 v2: "1.0.0",
22 expected: 0,
23 },
24 {
25 name: "v1 less than v2 - patch",
26 v1: "1.0.0",
27 v2: "1.0.1",
28 expected: -1,
29 },
30 {
31 name: "v1 less than v2 - minor",
32 v1: "1.0.0",
33 v2: "1.1.0",
34 expected: -1,
35 },
36 {
37 name: "v1 less than v2 - major",
38 v1: "1.0.0",
39 v2: "2.0.0",
40 expected: -1,
41 },
42 {
43 name: "v1 greater than v2",
44 v1: "2.0.0",
45 v2: "1.9.9",
46 expected: 1,
47 },
48 {
49 name: "with v prefix",
50 v1: "v1.0.0",
51 v2: "v1.0.1",
52 expected: -1,
53 },
54 {
55 name: "different lengths",
56 v1: "1.0",
57 v2: "1.0.0",
58 expected: -1,
59 },
60 }
61
62 for _, tt := range tests {
63 t.Run(tt.name, func(t *testing.T) {
64 result := compareVersions(tt.v1, tt.v2)
65 require.Equal(t, tt.expected, result)
66 })
67 }
68}
69
70func TestCheckForUpdate_DevelopmentVersion(t *testing.T) {
71 // Test that development versions don't trigger updates.
72 ctx := context.Background()
73
74 // Temporarily set version to development version.
75 originalVersion := version.Version
76 version.Version = "unknown"
77 defer func() {
78 version.Version = originalVersion
79 }()
80
81 info, err := CheckForUpdate(ctx)
82 require.NoError(t, err)
83 require.NotNil(t, info)
84 require.False(t, info.Available)
85}