import { describe, expect, it } from 'vitest'; import { InvalidVideoUrlError, assertValidVideoUrl } from '../src/services/videoUrl.js'; describe('assertValidVideoUrl', () => { it.each([ 'https://www.youtube.com/watch?v=dQw4w9WgXcQ', 'https://youtube.com/watch?v=dQw4w9WgXcQ', 'https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=30s', 'https://www.youtube.com/shorts/dQw4w9WgXcQ', 'https://www.youtube.com/live/dQw4w9WgXcQ', 'https://youtu.be/dQw4w9WgXcQ', 'https://youtu.be/dQw4w9WgXcQ?t=30', ])('accepte "%s"', (url) => { expect(assertValidVideoUrl(url)).toBe(url); }); it.each([ '', 'not a url', 'ftp://youtube.com/watch?v=dQw4w9WgXcQ', 'https://evil.com/watch?v=dQw4w9WgXcQ', 'https://youtube.com.evil.com/watch?v=dQw4w9WgXcQ', 'https://www.youtube.com/watch?v=short', 'https://www.youtube.com/@somechannel', 'https://www.youtube.com/watch?v=dQw4w9WgXcQ; rm -rf /', '--exec=touch /tmp/pwned https://www.youtube.com/watch?v=dQw4w9WgXcQ', 'file:///etc/passwd', ])('rejette "%s"', (url) => { expect(() => assertValidVideoUrl(url)).toThrow(InvalidVideoUrlError); }); });