@@ -7,6 +7,7 @@ import { afterEach, describe, expect, it } from "vitest";
77import {
88 DEFAULT_DESKTOP_SETTINGS ,
99 readDesktopSettings ,
10+ resolveDefaultDesktopSettings ,
1011 setDesktopServerExposurePreference ,
1112 setDesktopUpdateChannelPreference ,
1213 writeDesktopSettings ,
@@ -28,7 +29,15 @@ function makeSettingsPath() {
2829
2930describe ( "desktopSettings" , ( ) => {
3031 it ( "returns defaults when no settings file exists" , ( ) => {
31- expect ( readDesktopSettings ( makeSettingsPath ( ) ) ) . toEqual ( DEFAULT_DESKTOP_SETTINGS ) ;
32+ expect ( readDesktopSettings ( makeSettingsPath ( ) , "0.0.17" ) ) . toEqual ( DEFAULT_DESKTOP_SETTINGS ) ;
33+ } ) ;
34+
35+ it ( "defaults packaged nightly builds to the nightly update channel" , ( ) => {
36+ expect ( resolveDefaultDesktopSettings ( "0.0.17-nightly.20260415.1" ) ) . toEqual ( {
37+ serverExposureMode : "local-only" ,
38+ updateChannel : "nightly" ,
39+ updateChannelConfiguredByUser : false ,
40+ } ) ;
3241 } ) ;
3342
3443 it ( "persists and reloads the configured server exposure mode" , ( ) => {
@@ -37,11 +46,13 @@ describe("desktopSettings", () => {
3746 writeDesktopSettings ( settingsPath , {
3847 serverExposureMode : "network-accessible" ,
3948 updateChannel : "latest" ,
49+ updateChannelConfiguredByUser : true ,
4050 } ) ;
4151
42- expect ( readDesktopSettings ( settingsPath ) ) . toEqual ( {
52+ expect ( readDesktopSettings ( settingsPath , "0.0.17" ) ) . toEqual ( {
4353 serverExposureMode : "network-accessible" ,
4454 updateChannel : "latest" ,
55+ updateChannelConfiguredByUser : true ,
4556 } ) ;
4657 } ) ;
4758
@@ -51,12 +62,14 @@ describe("desktopSettings", () => {
5162 {
5263 serverExposureMode : "local-only" ,
5364 updateChannel : "latest" ,
65+ updateChannelConfiguredByUser : false ,
5466 } ,
5567 "network-accessible" ,
5668 ) ,
5769 ) . toEqual ( {
5870 serverExposureMode : "network-accessible" ,
5971 updateChannel : "latest" ,
72+ updateChannelConfiguredByUser : false ,
6073 } ) ;
6174 } ) ;
6275
@@ -66,19 +79,69 @@ describe("desktopSettings", () => {
6679 {
6780 serverExposureMode : "local-only" ,
6881 updateChannel : "latest" ,
82+ updateChannelConfiguredByUser : false ,
6983 } ,
7084 "nightly" ,
7185 ) ,
7286 ) . toEqual ( {
7387 serverExposureMode : "local-only" ,
7488 updateChannel : "nightly" ,
89+ updateChannelConfiguredByUser : true ,
7590 } ) ;
7691 } ) ;
7792
7893 it ( "falls back to defaults when the settings file is malformed" , ( ) => {
7994 const settingsPath = makeSettingsPath ( ) ;
8095 fs . writeFileSync ( settingsPath , "{not-json" , "utf8" ) ;
8196
82- expect ( readDesktopSettings ( settingsPath ) ) . toEqual ( DEFAULT_DESKTOP_SETTINGS ) ;
97+ expect ( readDesktopSettings ( settingsPath , "0.0.17" ) ) . toEqual ( DEFAULT_DESKTOP_SETTINGS ) ;
98+ } ) ;
99+
100+ it ( "falls back to the nightly channel for legacy nightly settings without an update track" , ( ) => {
101+ const settingsPath = makeSettingsPath ( ) ;
102+ fs . writeFileSync ( settingsPath , JSON . stringify ( { serverExposureMode : "local-only" } ) , "utf8" ) ;
103+
104+ expect ( readDesktopSettings ( settingsPath , "0.0.17-nightly.20260415.1" ) ) . toEqual ( {
105+ serverExposureMode : "local-only" ,
106+ updateChannel : "nightly" ,
107+ updateChannelConfiguredByUser : false ,
108+ } ) ;
109+ } ) ;
110+
111+ it ( "migrates legacy implicit stable settings to nightly when running a nightly build" , ( ) => {
112+ const settingsPath = makeSettingsPath ( ) ;
113+ fs . writeFileSync (
114+ settingsPath ,
115+ JSON . stringify ( {
116+ serverExposureMode : "local-only" ,
117+ updateChannel : "latest" ,
118+ } ) ,
119+ "utf8" ,
120+ ) ;
121+
122+ expect ( readDesktopSettings ( settingsPath , "0.0.17-nightly.20260415.1" ) ) . toEqual ( {
123+ serverExposureMode : "local-only" ,
124+ updateChannel : "nightly" ,
125+ updateChannelConfiguredByUser : false ,
126+ } ) ;
127+ } ) ;
128+
129+ it ( "preserves an explicit stable choice on nightly builds" , ( ) => {
130+ const settingsPath = makeSettingsPath ( ) ;
131+ fs . writeFileSync (
132+ settingsPath ,
133+ JSON . stringify ( {
134+ serverExposureMode : "local-only" ,
135+ updateChannel : "latest" ,
136+ updateChannelConfiguredByUser : true ,
137+ } ) ,
138+ "utf8" ,
139+ ) ;
140+
141+ expect ( readDesktopSettings ( settingsPath , "0.0.17-nightly.20260415.1" ) ) . toEqual ( {
142+ serverExposureMode : "local-only" ,
143+ updateChannel : "latest" ,
144+ updateChannelConfiguredByUser : true ,
145+ } ) ;
83146 } ) ;
84147} ) ;
0 commit comments