import { test } from 'node:test'; import assert from 'node:assert/strict'; import { isVideoId, pageFromPath, parseVideoLink } from '../src/lib/video-id.js'; test('isVideoId accepts only 11-character IDs', () => { assert.equal(isVideoId('dQw4w9WgXcQ'), true); assert.equal(isVideoId('abc_DEF-123'), true); for (const value of ['short', 'waytoolongvideoid', 'has space!!', '', null, undefined, 12345678901]) { assert.equal(isVideoId(value), false, String(value)); } }); test('parseVideoLink reads an absolute watch URL', () => { assert.deepEqual(parseVideoLink('https://www.youtube.com/watch?v=dQw4w9WgXcQ'), { videoId: 'dQw4w9WgXcQ', isShort: false, }); }); test('parseVideoLink reads a relative watch href with extra params', () => { assert.deepEqual(parseVideoLink('/watch?v=dQw4w9WgXcQ&t=42s&list=PL123'), { videoId: 'dQw4w9WgXcQ', isShort: false, }); }); test('parseVideoLink marks /shorts/ links as shorts', () => { assert.deepEqual(parseVideoLink('/shorts/abcdefghijk'), { videoId: 'abcdefghijk', isShort: true }); assert.deepEqual(parseVideoLink('/shorts/abcdefghijk?feature=share'), { videoId: 'abcdefghijk', isShort: true, }); }); test('parseVideoLink ignores links that are not a single video', () => { for (const href of ['/', '/@mrbeast', '/playlist?list=PL123', '/feed/subscriptions', '/results?search_query=x']) { assert.equal(parseVideoLink(href), null, href); } }); test('parseVideoLink rejects malformed IDs', () => { for (const href of [ '/watch', '/watch?v=', '/watch?v=short', '/watch?v=waytoolongvideoid', '/shorts/toolongidtoolong', ]) { assert.equal(parseVideoLink(href), null, href); } }); test('parseVideoLink rejects other hosts and garbage', () => { assert.equal(parseVideoLink('https://evil.example.com/watch?v=dQw4w9WgXcQ'), null); for (const href of [null, undefined, '', 'http://[bad']) { assert.equal(parseVideoLink(href), null, String(href)); } }); test('pageFromPath maps the four supported page types', () => { assert.equal(pageFromPath('/'), 'home'); assert.equal(pageFromPath('/watch'), 'watch'); assert.equal(pageFromPath('/results'), 'search'); for (const path of ['/@mrbeast', '/@mrbeast/videos', '/channel/UC123/videos', '/c/name', '/user/name']) { assert.equal(pageFromPath(path), 'channel', path); } }); test('pageFromPath returns null for unsupported pages', () => { for (const path of ['/feed/subscriptions', '/shorts/abcdefghijk', '/playlist', '/premium']) { assert.equal(pageFromPath(path), null, path); } });