mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-03-01 18:22:41 -08:00
111 lines
3.7 KiB
TypeScript
111 lines
3.7 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import {
|
|
createBuildHandleJellyfinAuthCommandsMainDepsHandler,
|
|
createBuildHandleJellyfinListCommandsMainDepsHandler,
|
|
createBuildHandleJellyfinPlayCommandMainDepsHandler,
|
|
createBuildHandleJellyfinRemoteAnnounceCommandMainDepsHandler,
|
|
} from './jellyfin-cli-main-deps';
|
|
|
|
test('jellyfin auth commands main deps builder maps callbacks', async () => {
|
|
const calls: string[] = [];
|
|
const deps = createBuildHandleJellyfinAuthCommandsMainDepsHandler({
|
|
patchRawConfig: () => calls.push('patch'),
|
|
authenticateWithPassword: async () => ({}) as never,
|
|
saveStoredSession: () => calls.push('save'),
|
|
clearStoredSession: () => calls.push('clear'),
|
|
logInfo: (message) => calls.push(`info:${message}`),
|
|
})();
|
|
|
|
deps.patchRawConfig({ jellyfin: {} });
|
|
await deps.authenticateWithPassword('', '', '', {
|
|
deviceId: '',
|
|
clientName: '',
|
|
clientVersion: '',
|
|
});
|
|
deps.saveStoredSession({ accessToken: 'token', userId: 'uid' });
|
|
deps.clearStoredSession();
|
|
deps.logInfo('ok');
|
|
assert.deepEqual(calls, ['patch', 'save', 'clear', 'info:ok']);
|
|
});
|
|
|
|
test('jellyfin list commands main deps builder maps callbacks', async () => {
|
|
const calls: string[] = [];
|
|
const writes: Array<{
|
|
responsePath: string;
|
|
payload: { serverUrl: string; accessToken: string; userId: string };
|
|
}> = [];
|
|
const deps = createBuildHandleJellyfinListCommandsMainDepsHandler({
|
|
listJellyfinLibraries: async () => {
|
|
calls.push('libraries');
|
|
return [];
|
|
},
|
|
listJellyfinItems: async () => {
|
|
calls.push('items');
|
|
return [];
|
|
},
|
|
listJellyfinSubtitleTracks: async () => {
|
|
calls.push('subtitles');
|
|
return [];
|
|
},
|
|
writeJellyfinPreviewAuth: (responsePath, payload) => {
|
|
writes.push({ responsePath, payload });
|
|
},
|
|
logInfo: (message) => calls.push(`info:${message}`),
|
|
})();
|
|
|
|
await deps.listJellyfinLibraries({} as never, {} as never);
|
|
await deps.listJellyfinItems({} as never, {} as never, { libraryId: '', limit: 1 });
|
|
await deps.listJellyfinSubtitleTracks({} as never, {} as never, 'id');
|
|
deps.writeJellyfinPreviewAuth('/tmp/jellyfin-preview.json', {
|
|
serverUrl: 'https://example.test',
|
|
accessToken: 'token',
|
|
userId: 'user-id',
|
|
});
|
|
deps.logInfo('done');
|
|
assert.deepEqual(calls, ['libraries', 'items', 'subtitles', 'info:done']);
|
|
assert.deepEqual(writes, [
|
|
{
|
|
responsePath: '/tmp/jellyfin-preview.json',
|
|
payload: {
|
|
serverUrl: 'https://example.test',
|
|
accessToken: 'token',
|
|
userId: 'user-id',
|
|
},
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('jellyfin play command main deps builder maps callbacks', async () => {
|
|
const calls: string[] = [];
|
|
const deps = createBuildHandleJellyfinPlayCommandMainDepsHandler({
|
|
playJellyfinItemInMpv: async () => {
|
|
calls.push('play');
|
|
},
|
|
logWarn: (message) => calls.push(`warn:${message}`),
|
|
})();
|
|
|
|
await deps.playJellyfinItemInMpv({} as never);
|
|
deps.logWarn('missing');
|
|
assert.deepEqual(calls, ['play', 'warn:missing']);
|
|
});
|
|
|
|
test('jellyfin remote announce main deps builder maps callbacks', async () => {
|
|
const calls: string[] = [];
|
|
const session = { advertiseNow: async () => true };
|
|
const deps = createBuildHandleJellyfinRemoteAnnounceCommandMainDepsHandler({
|
|
startJellyfinRemoteSession: async () => {
|
|
calls.push('start');
|
|
},
|
|
getRemoteSession: () => session,
|
|
logInfo: (message) => calls.push(`info:${message}`),
|
|
logWarn: (message) => calls.push(`warn:${message}`),
|
|
})();
|
|
|
|
await deps.startJellyfinRemoteSession();
|
|
assert.equal(deps.getRemoteSession(), session);
|
|
deps.logInfo('visible');
|
|
deps.logWarn('not-visible');
|
|
assert.deepEqual(calls, ['start', 'info:visible', 'warn:not-visible']);
|
|
});
|