Files
buzz-sheet/lib/guides/youtube.test.ts
T
gunshiz cfc6f0c146
CI / Verify (push) Successful in 1m4s
CI / Build immutable images and deploy (push) Successful in 1m54s
feat(overview) : add YouTube video section
2026-09-03 12:06:36 +07:00

34 lines
996 B
TypeScript

import { describe, expect, it } from "vitest";
import { parseYouTubeUrl } from "@/lib/guides/youtube";
describe("YouTube URLs", () => {
const videoId = "dQw4w9WgXcQ";
it.each([
`https://www.youtube.com/watch?v=${videoId}`,
`https://m.youtube.com/watch?v=${videoId}&t=12`,
`https://youtu.be/${videoId}?si=share`,
`https://youtube.com/shorts/${videoId}`,
`https://youtube.com/live/${videoId}`,
`https://youtube.com/embed/${videoId}`,
])("normalizes %s", (url) => {
expect(parseYouTubeUrl(url)).toEqual({
videoId,
watchUrl: `https://www.youtube.com/watch?v=${videoId}`,
embedUrl: `https://www.youtube-nocookie.com/embed/${videoId}`,
});
});
it.each([
"",
"not a url",
"https://example.com/watch?v=dQw4w9WgXcQ",
"https://youtube.example.com/watch?v=dQw4w9WgXcQ",
"javascript:alert(1)",
"https://youtube.com/watch?v=too-short",
])("rejects %s", (url) => {
expect(parseYouTubeUrl(url)).toBeNull();
});
});