feat(desktop): split daemon and release settings to main process
Move daemon management and release channel settings out of the renderer's AsyncStorage and into a desktop-owned settings store persisted by the main process. Adds a "Keep daemon running after quit" option, a daemon lifecycle section in settings, and a one-time migration of legacy renderer-owned desktop settings.
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
|
||||
import { DEFAULT_DESKTOP_SETTINGS, type DesktopSettingsStore } from "./desktop-settings";
|
||||
import { createDesktopSettingsCommandHandlers } from "./desktop-settings-commands";
|
||||
|
||||
function createStoreMock(): DesktopSettingsStore {
|
||||
return {
|
||||
get: vi.fn(async () => DEFAULT_DESKTOP_SETTINGS),
|
||||
patch: vi.fn(async () => ({
|
||||
...DEFAULT_DESKTOP_SETTINGS,
|
||||
releaseChannel: "beta",
|
||||
})),
|
||||
migrateLegacyRendererSettings: vi.fn(async () => ({
|
||||
...DEFAULT_DESKTOP_SETTINGS,
|
||||
releaseChannel: "beta",
|
||||
daemon: {
|
||||
manageBuiltInDaemon: false,
|
||||
keepRunningAfterQuit: true,
|
||||
},
|
||||
})),
|
||||
};
|
||||
}
|
||||
|
||||
describe("desktop-settings-commands", () => {
|
||||
it("exposes get and patch handlers through the desktop command bus shape", async () => {
|
||||
const store = createStoreMock();
|
||||
const handlers = createDesktopSettingsCommandHandlers({ settingsStore: store });
|
||||
|
||||
await expect(handlers.get_desktop_settings()).resolves.toEqual(DEFAULT_DESKTOP_SETTINGS);
|
||||
await expect(
|
||||
handlers.patch_desktop_settings({
|
||||
daemon: { keepRunningAfterQuit: false },
|
||||
}),
|
||||
).resolves.toEqual({
|
||||
...DEFAULT_DESKTOP_SETTINGS,
|
||||
releaseChannel: "beta",
|
||||
});
|
||||
|
||||
expect(store.get).toHaveBeenCalledTimes(1);
|
||||
expect(store.patch).toHaveBeenCalledWith({
|
||||
daemon: { keepRunningAfterQuit: false },
|
||||
});
|
||||
});
|
||||
|
||||
it("accepts legacy renderer settings migration payloads", async () => {
|
||||
const store = createStoreMock();
|
||||
const handlers = createDesktopSettingsCommandHandlers({ settingsStore: store });
|
||||
|
||||
const result = await handlers.migrate_legacy_desktop_settings({
|
||||
releaseChannel: "beta",
|
||||
manageBuiltInDaemon: false,
|
||||
});
|
||||
|
||||
expect(result).toEqual({
|
||||
...DEFAULT_DESKTOP_SETTINGS,
|
||||
releaseChannel: "beta",
|
||||
daemon: {
|
||||
manageBuiltInDaemon: false,
|
||||
keepRunningAfterQuit: true,
|
||||
},
|
||||
});
|
||||
expect(store.migrateLegacyRendererSettings).toHaveBeenCalledWith({
|
||||
releaseChannel: "beta",
|
||||
manageBuiltInDaemon: false,
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user