37 lines
1.4 KiB
JavaScript
37 lines
1.4 KiB
JavaScript
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/,
|
|
);
|
|
});
|
|
|