import assert from 'node:assert/strict'; import test from 'node:test'; import { canonicalSourceUrl, detectPlatform, extractInstagramShortcode, extractYouTubeId, } from '../src/utils/url.js'; test('지원 URL의 플랫폼과 source ID를 판별한다', () => { assert.equal(detectPlatform('https://youtu.be/dQw4w9WgXcQ'), 'youtube'); assert.equal(extractYouTubeId('https://www.youtube.com/shorts/dQw4w9WgXcQ'), 'dQw4w9WgXcQ'); assert.equal(detectPlatform('https://www.instagram.com/reel/Db137BuzUJe/'), 'instagram'); assert.equal(extractInstagramShortcode('https://www.instagram.com/p/Db137BuzUJe/'), 'Db137BuzUJe'); }); test('source URL에서 추적 파라미터를 제거해 정규화한다', () => { assert.equal( canonicalSourceUrl('https://www.youtube.com/watch?v=dQw4w9WgXcQ&utm_source=x'), 'https://www.youtube.com/watch?v=dQw4w9WgXcQ', ); assert.equal( canonicalSourceUrl('https://www.instagram.com/p/Db137BuzUJe/?igsh=abc'), 'https://www.instagram.com/p/Db137BuzUJe/', ); }); test('HTTP 및 지원하지 않는 host를 거부한다', () => { assert.throws(() => detectPlatform('http://youtube.com/watch?v=dQw4w9WgXcQ'), /HTTPS/); assert.equal(detectPlatform('https://example.com/recipe'), 'unsupported'); assert.throws( () => extractYouTubeId('https://youtube.com.evil.example/watch?v=dQw4w9WgXcQ'), /지원하지 않는 YouTube URL/, ); });