30 lines
1.3 KiB
JavaScript
30 lines
1.3 KiB
JavaScript
import { test, expect } from 'bun:test';
|
|
import { readFileSync } from 'node:fs';
|
|
import { parseSearch, lengthToSeconds, search } from './innertube.js';
|
|
const fixture = JSON.parse(readFileSync(new URL('./fixtures/innertube-search.json', import.meta.url)));
|
|
|
|
test('parses video renderers into slim cards', () => {
|
|
const r = parseSearch(fixture);
|
|
expect(r.length).toBe(4);
|
|
expect(r[0]).toEqual({
|
|
id: 'nQWFzMvCfLE', title: 'What A Beautiful Name - Hillsong Worship', channel: 'Hillsong Worship',
|
|
channelId: 'UC4q12NoPNySbVqwpw4iO5Vg', channelUrl: 'https://www.youtube.com/channel/UC4q12NoPNySbVqwpw4iO5Vg',
|
|
duration: 343, thumbnail: 'https://i.ytimg.com/vi/nQWFzMvCfLE/mqdefault.jpg',
|
|
});
|
|
expect(r[1].duration).toBe(7187);
|
|
expect(r[3].duration).toBe(0); // live, no lengthText
|
|
});
|
|
test('lengthToSeconds', () => {
|
|
expect(lengthToSeconds('5:43')).toBe(343);
|
|
expect(lengthToSeconds('1:59:47')).toBe(7187);
|
|
expect(lengthToSeconds('LIVE')).toBe(0);
|
|
expect(lengthToSeconds(undefined)).toBe(0);
|
|
});
|
|
test('unexpected shape throws (caller falls back to yt-dlp)', () => {
|
|
expect(() => parseSearch({})).toThrow();
|
|
});
|
|
test('search() throws on HTTP error', async () => {
|
|
const fetchImpl = async () => new Response('no', { status: 429 });
|
|
await expect(search('x', { fetchImpl })).rejects.toThrow('429');
|
|
});
|