update_test.go

 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}