Files
our_recipe_atlas/tests/url.test.js
T
2026-08-13 18:36:31 +09:00

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/,
);
});