Files
SubMiner/src/main/runtime/anilist-media-guess.test.ts
sudacode 26fb5b4162 feat(stats): wire stats server, overlay, and CLI into main process
- Stats server auto-start on immersion tracker init
- Stats overlay toggle via keybinding and IPC
- Stats CLI command (subminer stats) with cleanup mode
- mpv plugin menu integration for stats toggle
- CLI args for --stats, --stats-cleanup, --stats-response-path
2026-03-17 20:04:40 -07:00

66 lines
2.1 KiB
TypeScript

import test from 'node:test';
import assert from 'node:assert/strict';
import {
createEnsureAnilistMediaGuessHandler,
createMaybeProbeAnilistDurationHandler,
type AnilistMediaGuessRuntimeState,
} from './anilist-media-guess';
test('maybeProbeAnilistDuration updates state with probed duration', async () => {
let state: AnilistMediaGuessRuntimeState = {
mediaKey: '/tmp/video.mkv',
mediaDurationSec: null,
mediaGuess: null,
mediaGuessPromise: null,
lastDurationProbeAtMs: 0,
};
const probe = createMaybeProbeAnilistDurationHandler({
getState: () => state,
setState: (next) => {
state = next;
},
durationRetryIntervalMs: 1000,
now: () => 2000,
requestMpvDuration: async () => 321,
logWarn: () => {},
});
const duration = await probe('/tmp/video.mkv');
assert.equal(duration, 321);
assert.equal(state.mediaDurationSec, 321);
});
test('ensureAnilistMediaGuess memoizes in-flight guess promise', async () => {
let state: AnilistMediaGuessRuntimeState = {
mediaKey: '/tmp/video.mkv',
mediaDurationSec: null,
mediaGuess: null,
mediaGuessPromise: null,
lastDurationProbeAtMs: 0,
};
let calls = 0;
const ensureGuess = createEnsureAnilistMediaGuessHandler({
getState: () => state,
setState: (next) => {
state = next;
},
resolveMediaPathForJimaku: (value) => value,
getCurrentMediaPath: () => '/tmp/video.mkv',
getCurrentMediaTitle: () => 'Episode 1',
guessAnilistMediaInfo: async () => {
calls += 1;
return { title: 'Show', season: null, episode: 1, source: 'guessit' };
},
});
const [first, second] = await Promise.all([
ensureGuess('/tmp/video.mkv'),
ensureGuess('/tmp/video.mkv'),
]);
assert.deepEqual(first, { title: 'Show', season: null, episode: 1, source: 'guessit' });
assert.deepEqual(second, { title: 'Show', season: null, episode: 1, source: 'guessit' });
assert.equal(calls, 1);
assert.deepEqual(state.mediaGuess, { title: 'Show', season: null, episode: 1, source: 'guessit' });
assert.equal(state.mediaGuessPromise, null);
});