52 lines · 1.6 KB
import { describe, expect, test } from "bun:test";
import { parseVideoPath, scrubFrameAt, type ScrubManifest } from "./video";

describe("parseVideoPath", () => {
  test("accepts the prepared layout", () => {
    for (const asset of [
      "master.m3u8",
      "poster.jpg",
      "720/index.m3u8",
      "720/init.mp4",
      "720/00012.m4s",
      "scrub/manifest.json",
      "scrub/sheet-003.webp",
    ]) {
      expect(parseVideoPath(`/videos/intro/v1/${asset}`)).toEqual({ id: "intro", version: "v1", asset });
    }
  });
  test("refuses anything else", () => {
    for (const path of [
      "/videos/intro/v1/",
      "/videos/intro/v1/../x",
      "/videos/Intro/v1/master.m3u8",
      "/videos/intro/v1/prepared.json",
      "/videos/intro/master.m3u8",
      "/other",
    ]) {
      expect(parseVideoPath(path)).toBeNull();
    }
  });
});

describe("scrubFrameAt", () => {
  const manifest: ScrubManifest = {
    interval: 2,
    count: 150,
    frameWidth: 256,
    frameHeight: 144,
    columns: 10,
    rows: 10,
    sheets: ["scrub/sheet-000.webp", "scrub/sheet-001.webp"],