mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-04-09 16:19:25 -07:00
Upgrade 8 composer test files from shape-only typeof checks to behavioral assertions that invoke returned handlers and verify injected dependencies are actually called, following the mpv-runtime-composer pattern.
56 lines
2.0 KiB
TypeScript
56 lines
2.0 KiB
TypeScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { composeAnilistSetupHandlers } from './anilist-setup-composer';
|
|
|
|
test('composeAnilistSetupHandlers returns callable setup handlers', () => {
|
|
const calls: string[] = [];
|
|
const composed = composeAnilistSetupHandlers({
|
|
notifyDeps: {
|
|
hasMpvClient: () => false,
|
|
showMpvOsd: () => {},
|
|
showDesktopNotification: (title, opts) => {
|
|
calls.push(`notify:${opts.body}`);
|
|
},
|
|
logInfo: () => {},
|
|
},
|
|
consumeTokenDeps: {
|
|
consumeAnilistSetupCallbackUrl: () => false,
|
|
saveToken: () => {},
|
|
setCachedToken: () => {},
|
|
setResolvedState: () => {},
|
|
setSetupPageOpened: () => {},
|
|
onSuccess: () => {},
|
|
closeWindow: () => {},
|
|
},
|
|
handleProtocolDeps: {
|
|
consumeAnilistSetupTokenFromUrl: () => false,
|
|
logWarn: () => {},
|
|
},
|
|
registerProtocolClientDeps: {
|
|
isDefaultApp: () => false,
|
|
getArgv: () => [],
|
|
execPath: process.execPath,
|
|
resolvePath: (value) => value,
|
|
setAsDefaultProtocolClient: () => true,
|
|
logDebug: () => {},
|
|
},
|
|
});
|
|
|
|
assert.equal(typeof composed.notifyAnilistSetup, 'function');
|
|
assert.equal(typeof composed.consumeAnilistSetupTokenFromUrl, 'function');
|
|
assert.equal(typeof composed.handleAnilistSetupProtocolUrl, 'function');
|
|
assert.equal(typeof composed.registerSubminerProtocolClient, 'function');
|
|
|
|
// notifyAnilistSetup forwards to showDesktopNotification when no MPV client
|
|
composed.notifyAnilistSetup('Setup complete');
|
|
assert.deepEqual(calls, ['notify:Setup complete']);
|
|
|
|
// handleAnilistSetupProtocolUrl returns false for non-subminer URLs
|
|
const handled = composed.handleAnilistSetupProtocolUrl('https://other.example.com/');
|
|
assert.equal(handled, false);
|
|
|
|
// handleAnilistSetupProtocolUrl returns true for subminer:// URLs
|
|
const handledProtocol = composed.handleAnilistSetupProtocolUrl('subminer://anilist-setup?code=abc');
|
|
assert.equal(handledProtocol, true);
|
|
});
|