Files
SubMiner/src/main/runtime/setup-window-factory.test.ts
T
sudacode 166015897d rename config window to settings and update CLI entry points
- Replace `--config`/`subminer config` (no action) with `--settings`/`subminer settings`
- `subminer config` now requires an explicit action (`path` or `show`)
- `--settings` previously opened Yomitan; replaced by `--yomitan`
- Linux tray update installs AppImage via electron-updater instead of manual flow
- macOS update dialog activation and curl-fetch routing fixes
- Delete stale compiled artifacts (main.js, app-updater.js)
2026-05-20 20:31:02 -07:00

125 lines
3.7 KiB
TypeScript

import assert from 'node:assert/strict';
import test from 'node:test';
import {
createCreateAnilistSetupWindowHandler,
createCreateConfigSettingsWindowHandler,
createCreateFirstRunSetupWindowHandler,
createCreateJellyfinSetupWindowHandler,
} from './setup-window-factory';
test('createCreateFirstRunSetupWindowHandler builds first-run setup window', () => {
let options: Electron.BrowserWindowConstructorOptions | null = null;
const createSetupWindow = createCreateFirstRunSetupWindowHandler({
createBrowserWindow: (nextOptions) => {
options = nextOptions;
return { id: 'first-run' } as never;
},
});
assert.deepEqual(createSetupWindow(), { id: 'first-run' });
assert.deepEqual(options, {
width: 720,
height: 860,
title: 'SubMiner Setup',
show: true,
autoHideMenuBar: true,
resizable: false,
minimizable: false,
maximizable: false,
webPreferences: {
nodeIntegration: false,
contextIsolation: true,
},
});
});
test('createCreateJellyfinSetupWindowHandler builds jellyfin setup window', () => {
let options: Electron.BrowserWindowConstructorOptions | null = null;
const createSetupWindow = createCreateJellyfinSetupWindowHandler({
createBrowserWindow: (nextOptions) => {
options = nextOptions;
return { id: 'jellyfin' } as never;
},
});
assert.deepEqual(createSetupWindow(), { id: 'jellyfin' });
assert.deepEqual(options, {
width: 520,
height: 560,
title: 'Jellyfin Setup',
show: true,
autoHideMenuBar: true,
webPreferences: {
nodeIntegration: false,
contextIsolation: true,
},
});
});
test('createCreateJellyfinSetupWindowHandler wires optional preload bridge', () => {
const captured: { options?: Electron.BrowserWindowConstructorOptions } = {};
const createSetupWindow = createCreateJellyfinSetupWindowHandler({
createBrowserWindow: (nextOptions) => {
captured.options = nextOptions;
return { id: 'jellyfin' } as never;
},
preloadPath: 'C:\\SubMiner\\dist\\preload-jellyfin-setup.js',
});
assert.deepEqual(createSetupWindow(), { id: 'jellyfin' });
const options = captured.options;
assert.ok(options);
assert.equal(options.webPreferences?.preload, 'C:\\SubMiner\\dist\\preload-jellyfin-setup.js');
assert.equal(options.webPreferences?.sandbox, true);
});
test('createCreateAnilistSetupWindowHandler builds anilist setup window', () => {
let options: Electron.BrowserWindowConstructorOptions | null = null;
const createSetupWindow = createCreateAnilistSetupWindowHandler({
createBrowserWindow: (nextOptions) => {
options = nextOptions;
return { id: 'anilist' } as never;
},
});
assert.deepEqual(createSetupWindow(), { id: 'anilist' });
assert.deepEqual(options, {
width: 1000,
height: 760,
title: 'Anilist Setup',
show: true,
autoHideMenuBar: true,
webPreferences: {
nodeIntegration: false,
contextIsolation: true,
},
});
});
test('createCreateConfigSettingsWindowHandler builds configuration settings window', () => {
let options: Electron.BrowserWindowConstructorOptions | null = null;
const createSettingsWindow = createCreateConfigSettingsWindowHandler({
preloadPath: '/tmp/preload-settings.js',
createBrowserWindow: (nextOptions) => {
options = nextOptions;
return { id: 'config-settings' } as never;
},
});
assert.deepEqual(createSettingsWindow(), { id: 'config-settings' });
assert.deepEqual(options, {
width: 1040,
height: 760,
title: 'SubMiner Settings',
show: true,
autoHideMenuBar: true,
resizable: true,
backgroundColor: '#24273a',
webPreferences: {
nodeIntegration: false,
contextIsolation: true,
preload: '/tmp/preload-settings.js',
},
});
});