mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-03-21 12:11:28 -07:00
- 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
80 lines
2.4 KiB
TypeScript
80 lines
2.4 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import {
|
|
createBuildEnsureAnilistMediaGuessMainDepsHandler,
|
|
createBuildMaybeProbeAnilistDurationMainDepsHandler,
|
|
} from './anilist-media-guess-main-deps';
|
|
|
|
test('maybe probe anilist duration main deps builder maps callbacks', async () => {
|
|
const calls: string[] = [];
|
|
const deps = createBuildMaybeProbeAnilistDurationMainDepsHandler({
|
|
getState: () => ({
|
|
mediaKey: 'm',
|
|
mediaDurationSec: null,
|
|
mediaGuess: null,
|
|
mediaGuessPromise: null,
|
|
lastDurationProbeAtMs: 0,
|
|
}),
|
|
setState: () => calls.push('set-state'),
|
|
durationRetryIntervalMs: 1000,
|
|
now: () => 42,
|
|
requestMpvDuration: async () => 3600,
|
|
logWarn: (message) => calls.push(`warn:${message}`),
|
|
})();
|
|
|
|
assert.equal(deps.durationRetryIntervalMs, 1000);
|
|
assert.equal(deps.now(), 42);
|
|
assert.equal(await deps.requestMpvDuration(), 3600);
|
|
deps.setState({
|
|
mediaKey: 'm',
|
|
mediaDurationSec: 100,
|
|
mediaGuess: null,
|
|
mediaGuessPromise: null,
|
|
lastDurationProbeAtMs: 0,
|
|
});
|
|
deps.logWarn('oops', null);
|
|
assert.deepEqual(calls, ['set-state', 'warn:oops']);
|
|
});
|
|
|
|
test('ensure anilist media guess main deps builder maps callbacks', async () => {
|
|
const calls: string[] = [];
|
|
const deps = createBuildEnsureAnilistMediaGuessMainDepsHandler({
|
|
getState: () => ({
|
|
mediaKey: 'm',
|
|
mediaDurationSec: null,
|
|
mediaGuess: null,
|
|
mediaGuessPromise: null,
|
|
lastDurationProbeAtMs: 0,
|
|
}),
|
|
setState: () => calls.push('set-state'),
|
|
resolveMediaPathForJimaku: (path) => {
|
|
calls.push('resolve');
|
|
return path;
|
|
},
|
|
getCurrentMediaPath: () => '/tmp/video.mkv',
|
|
getCurrentMediaTitle: () => 'title',
|
|
guessAnilistMediaInfo: async () => {
|
|
calls.push('guess');
|
|
return { title: 'title', season: null, episode: 1, source: 'fallback' };
|
|
},
|
|
})();
|
|
|
|
assert.equal(deps.getCurrentMediaPath(), '/tmp/video.mkv');
|
|
assert.equal(deps.getCurrentMediaTitle(), 'title');
|
|
assert.equal(deps.resolveMediaPathForJimaku('/tmp/video.mkv'), '/tmp/video.mkv');
|
|
assert.deepEqual(await deps.guessAnilistMediaInfo('/tmp/video.mkv', 'title'), {
|
|
title: 'title',
|
|
season: null,
|
|
episode: 1,
|
|
source: 'fallback',
|
|
});
|
|
deps.setState({
|
|
mediaKey: 'm',
|
|
mediaDurationSec: null,
|
|
mediaGuess: null,
|
|
mediaGuessPromise: null,
|
|
lastDurationProbeAtMs: 0,
|
|
});
|
|
assert.deepEqual(calls, ['resolve', 'guess', 'set-state']);
|
|
});
|