// @vitest-environment jsdom
import { describe, expect, it } from "vitest";
import { parseTimelineFromDOM, createImplicitTimelineLayersFromDOM } from "./timelineDOM";
function makeDoc(html: string): Document {
const d = document.implementation.createHTMLDocument();
d.body.innerHTML = html;
return d;
}
describe("parseTimelineFromDOM — hfId from data-hf-id", () => {
it("harvests hfId from a data-start element that has data-hf-id", () => {
const doc = makeDoc(`
`);
const elements = parseTimelineFromDOM(doc, 10);
const hero = elements.find((el) => el.domId === "hero");
expect(hero).toBeDefined();
expect(hero?.hfId).toBe("hf-abc123");
});
it("leaves hfId undefined when element has no data-hf-id", () => {
const doc = makeDoc(`
`);
const elements = parseTimelineFromDOM(doc, 10);
const plain = elements.find((el) => el.domId === "plain");
expect(plain).toBeDefined();
expect(plain?.hfId).toBeUndefined();
});
it("ignores runtime-owned color grading canvases with timing attributes", () => {
const doc = makeDoc(`
`);
const elements = parseTimelineFromDOM(doc, 10);
expect(elements.map((el) => el.tag)).toEqual(["img"]);
});
});
describe("createImplicitTimelineLayersFromDOM — hfId from data-hf-id", () => {
it("harvests hfId from an implicit layer child that has data-hf-id", () => {
const doc = makeDoc(`
`);
const layers = createImplicitTimelineLayersFromDOM(doc, 10);
const layer = layers.find((el) => el.domId === "layer");
expect(layer).toBeDefined();
expect(layer?.hfId).toBe("hf-xyz789");
});
it("ignores runtime-owned color grading canvases as implicit layers", () => {
const doc = makeDoc(`
`);
const layers = createImplicitTimelineLayersFromDOM(doc, 5);
expect(layers).toEqual([]);
});
});