update_test.go

 1package update
 2
 3import (
 4	"context"
 5	"testing"
 6
 7	"github.com/stretchr/testify/require"
 8)
 9
10func TestCheckForUpdate_DevelopmentVersion(t *testing.T) {
11	info, err := Check(t.Context(), "unknown", testClient{"v0.11.0"})
12	require.NoError(t, err)
13	require.NotNil(t, info)
14	require.False(t, info.Available())
15}
16
17func TestCheckForUpdate_Old(t *testing.T) {
18	info, err := Check(t.Context(), "v0.10.0", testClient{"v0.11.0"})
19	require.NoError(t, err)
20	require.NotNil(t, info)
21	require.True(t, info.Available())
22}
23
24func TestCheckForUpdate_Beta(t *testing.T) {
25	t.Run("current is stable", func(t *testing.T) {
26		info, err := Check(t.Context(), "v0.10.0", testClient{"v0.11.0-beta.1"})
27		require.NoError(t, err)
28		require.NotNil(t, info)
29		require.False(t, info.Available())
30	})
31
32	t.Run("current is also beta", func(t *testing.T) {
33		info, err := Check(t.Context(), "v0.11.0-beta.1", testClient{"v0.11.0-beta.2"})
34		require.NoError(t, err)
35		require.NotNil(t, info)
36		require.True(t, info.Available())
37	})
38
39	t.Run("current is beta, latest isn't", func(t *testing.T) {
40		info, err := Check(t.Context(), "v0.11.0-beta.1", testClient{"v0.11.0"})
41		require.NoError(t, err)
42		require.NotNil(t, info)
43		require.True(t, info.Available())
44	})
45}
46
47type testClient struct{ tag string }
48
49// Latest implements Client.
50func (t testClient) Latest(ctx context.Context) (*Release, error) {
51	return &Release{
52		TagName: t.tag,
53		HTMLURL: "https://example.org",
54	}, nil
55}