update_test.go

 1package update
 2
 3import (
 4	"context"
 5	"testing"
 6	"time"
 7
 8	"github.com/stretchr/testify/require"
 9)
10
11func TestCheckForUpdate_Old(t *testing.T) {
12	info, err := Check(t.Context(), "v0.10.0", testClient{"v0.11.0"})
13	require.NoError(t, err)
14	require.NotNil(t, info)
15	require.True(t, info.Available())
16}
17
18func TestCheckForUpdate_Beta(t *testing.T) {
19	t.Run("current is stable", func(t *testing.T) {
20		info, err := Check(t.Context(), "v0.10.0", testClient{"v0.11.0-beta.1"})
21		require.NoError(t, err)
22		require.NotNil(t, info)
23		require.True(t, info.Available())
24	})
25
26	t.Run("current is also beta", func(t *testing.T) {
27		info, err := Check(t.Context(), "v0.11.0-beta.1", testClient{"v0.11.0-beta.2"})
28		require.NoError(t, err)
29		require.NotNil(t, info)
30		require.True(t, info.Available())
31	})
32
33	t.Run("current is beta, latest isn't", func(t *testing.T) {
34		info, err := Check(t.Context(), "v0.11.0-beta.1", testClient{"v0.11.0"})
35		require.NoError(t, err)
36		require.NotNil(t, info)
37		require.True(t, info.Available())
38	})
39}
40
41func TestCheckForUpdate_Fork(t *testing.T) {
42	t.Run("fork version vs stable", func(t *testing.T) {
43		info, err := Check(t.Context(), "v0.18.5-fork.1", testClient{"v0.18.5"})
44		require.NoError(t, err)
45		require.NotNil(t, info)
46		require.False(t, info.Available())
47	})
48
49	t.Run("fork version vs newer stable", func(t *testing.T) {
50		info, err := Check(t.Context(), "v0.18.5-fork.1", testClient{"v0.18.6"})
51		require.NoError(t, err)
52		require.NotNil(t, info)
53		require.True(t, info.Available())
54	})
55
56	t.Run("fork version vs newer fork version", func(t *testing.T) {
57		info, err := Check(t.Context(), "v0.18.5-fork.1", testClient{"v0.18.5-fork.2"})
58		require.NoError(t, err)
59		require.NotNil(t, info)
60		require.True(t, info.Available())
61	})
62}
63
64type testClient struct{ version string }
65
66// Latest implements Client.
67func (t testClient) Latest(ctx context.Context) (*ModuleVersion, error) {
68	return &ModuleVersion{
69		Version: t.version,
70		Time:    time.Now(),
71	}, nil
72}