diff --git a/packages/ui/src/lib/persistence.test.ts b/packages/ui/src/lib/persistence.test.ts index daa09e3f..8921969a 100644 --- a/packages/ui/src/lib/persistence.test.ts +++ b/packages/ui/src/lib/persistence.test.ts @@ -497,4 +497,47 @@ describe('updateDesktopSettings', () => { expect(saveCalls.some((changes) => changes.terminalShell === 'zsh')).toBe(true); expect(saveCalls.some((changes) => changes.terminalLoginShells?.includes('zsh'))).toBe(true); }); + + test('applies persisted autoSaveEnabled from server settings', async () => { + getWindow(); + invalidateSettingsCache(); + useUIStore.getState().setAutoSaveEnabled(true); + registerSettingsApi(async () => ({}), async () => ({ + settings: { autoSaveEnabled: false, draftStartersCraftGoalAdded: true, draftStartersScheduleTaskAdded: true }, + source: 'web', + })); + + await syncDesktopSettings(); + + expect(useUIStore.getState().autoSaveEnabled).toBe(false); + }); + + test('autosaves autoSaveEnabled changes to shared settings', async () => { + getWindow(); + useUIStore.getState().setAutoSaveEnabled(true); + const saveCalls: Array> = []; + registerSettingsSave(async (changes) => { + saveCalls.push(changes); + return changes as SettingsPayload; + }); + startAppearanceAutoSave(); + + useUIStore.getState().setAutoSaveEnabled(false); + await delay(500); + + expect(saveCalls.some((changes) => changes.autoSaveEnabled === false)).toBe(true); + }); + + test('resets omitted autoSaveEnabled to the default enabled state', async () => { + getWindow(); + useUIStore.getState().setAutoSaveEnabled(false); + registerSettingsApi(async () => ({}), async () => ({ + settings: { draftStartersCraftGoalAdded: true, draftStartersScheduleTaskAdded: true }, + source: 'web', + })); + + await syncDesktopSettings(); + + expect(useUIStore.getState().autoSaveEnabled).toBe(true); + }); });