返回 DeepSeek-Reasonix
updater_policy_test.go
根目录 / desktop / updater_policy_test.go
1 package main
2
3 import (
4 "errors"
5 "net/http"
6 "testing"
7
8 "reasonix/internal/config"
9 )
10
11 func setDesktopBuildIdentityForTest(t *testing.T, buildVersion, buildChannel string) {
12 t.Helper()
13 oldVersion, oldChannel := version, channel
14 version, channel = buildVersion, buildChannel
15 t.Cleanup(func() {
16 version, channel = oldVersion, oldChannel
17 })
18 }
19
20 func TestDesktopUpdaterEnabledRequiresExactStableReleaseBuild(t *testing.T) {
21 tests := []struct {
22 name string
23 version string
24 channel string
25 want bool
26 }{
27 {name: "stable release", version: "v1.2.3", channel: "stable", want: true},
28 {name: "stable prerelease", version: "v1.2.3-rc.1", channel: "stable"},
29 {name: "stable test version", version: "v0.0.0-test.20260916.abc1234", channel: "stable"},
30 {name: "canary", version: "v1.2.3", channel: "canary"},
31 {name: "preview", version: "v1.2.3", channel: "preview"},
32 {name: "test", version: "v1.2.3", channel: "test"},
33 {name: "dev channel", version: "v1.2.3", channel: "dev"},
34 {name: "dev version", version: "dev", channel: "stable"},
35 {name: "channel must be exact", version: "v1.2.3", channel: "Stable"},
36 }
37 for _, tt := range tests {
38 t.Run(tt.name, func(t *testing.T) {
39 setDesktopBuildIdentityForTest(t, tt.version, tt.channel)
40 if got := desktopUpdaterEnabled(); got != tt.want {
41 t.Fatalf("desktopUpdaterEnabled() = %v, want %v", got, tt.want)
42 }
43 })
44 }
45 }
46
47 func TestDisabledDesktopUpdaterBoundariesHaveNoSideEffects(t *testing.T) {
48 setDesktopBuildIdentityForTest(t, "v0.0.0-test.20260916.abc1234", "canary")
49
50 originalClient := updaterHTTPClient
51 originalIPv4 := updaterHTTPClientIPv4
52 originalPending := pendingUpdateExistsForInstall
53 t.Cleanup(func() {
54 updaterHTTPClient = originalClient
55 updaterHTTPClientIPv4 = originalIPv4
56 pendingUpdateExistsForInstall = originalPending
57 })
58
59 clientCalls := 0
60 updaterHTTPClient = func() (*http.Client, error) {
61 clientCalls++
62 return nil, errors.New("unexpected updater HTTP client")
63 }
64 updaterHTTPClientIPv4 = func() (*http.Client, error) {
65 clientCalls++
66 return nil, errors.New("unexpected updater IPv4 client")
67 }
68 pendingCalls := 0
69 pendingUpdateExistsForInstall = func() bool {
70 pendingCalls++
71 return true
72 }
73
74 app, host := newRecordingHostApp(t)
75 info, err := app.CheckUpdate("stable")
76 if err != nil || info == nil || info.Available || info.Current != version {
77 t.Fatalf("disabled CheckUpdate() = (%+v, %v), want unavailable current build", info, err)
78 }
79 if err := app.ApplyUpdateRequest("stable", "v1.2.3", "disabled-apply"); !errors.Is(err, errUpdateDisabled) {
80 t.Fatalf("disabled ApplyUpdateRequest() error = %v, want %v", err, errUpdateDisabled)
81 }
82 app.OpenDownloadPage()
83 if err := app.AbandonPendingUpdate(); !errors.Is(err, errUpdateDisabled) {
84 t.Fatalf("disabled AbandonPendingUpdate() error = %v, want %v", err, errUpdateDisabled)
85 }
86 if clientCalls != 0 || pendingCalls != 0 {
87 t.Fatalf("disabled updater side effects: HTTP=%d pending=%d", clientCalls, pendingCalls)
88 }
89 assertHostCalls(t, host)
90 }
91
92 func TestDesktopUpdaterCapabilityAndConfigFailureDefaults(t *testing.T) {
93 setDesktopBuildIdentityForTest(t, "v1.2.3", "stable")
94
95 failedStartup := desktopStartupSettingsFromConfig(nil)
96 if failedStartup.CheckUpdates || !failedStartup.UpdaterEnabled {
97 t.Fatalf("failed startup settings = check:%v updater:%v, want false/true", failedStartup.CheckUpdates, failedStartup.UpdaterEnabled)
98 }
99 failedFull := NewApp().defaultSettingsView()
100 if failedFull.CheckUpdates || !failedFull.UpdaterEnabled {
101 t.Fatalf("failed full settings = check:%v updater:%v, want false/true", failedFull.CheckUpdates, failedFull.UpdaterEnabled)
102 }
103 normal := desktopStartupSettingsFromConfig(config.Default())
104 if !normal.CheckUpdates || !normal.UpdaterEnabled {
105 t.Fatalf("normal stable settings = check:%v updater:%v, want true/true", normal.CheckUpdates, normal.UpdaterEnabled)
106 }
107
108 channel = "canary"
109 testBuild := desktopStartupSettingsFromConfig(config.Default())
110 if !testBuild.CheckUpdates || testBuild.UpdaterEnabled {
111 t.Fatalf("canary settings = check:%v updater:%v, want preserved preference with disabled capability", testBuild.CheckUpdates, testBuild.UpdaterEnabled)
112 }
113 }
114
114 lines GO