test.web/presentation/renderers/lesson.renderer.test.ts
test.web/presentation/renderers/lesson.renderer.test.ts is a file in Codebase Testing. 41 lines of code and 0 definitions.
import { describe, expect, it } from "vitest";
import type { LessonBlock } from "@banes-lab/web/types/block.types.ts";
import { renderBlock } from "@banes-lab/web/presentation/renderers/block.renderer.ts";
import { renderLesson } from "@banes-lab/web/presentation/renderers/lesson.renderer.ts";
const LESSON: LessonBlock = {
application: "application <em>text</em>",
cause: "cause",
decision: "decision",
failureMode: "failure mode",
kind: "lesson",
principle: "principle",
problem: "problem",
validation: "validation",
};
const paragraphsOf = function paragraphsOf(element: Element): string[] {
return [...element.querySelectorAll("p")].map((paragraph) => paragraph.textContent);
};
describe("renderLesson", () => {
it("flows the fields into three unlabeled paragraphs, the concrete situation before the principle", () => {
const rendered = renderLesson(LESSON);
expect(paragraphsOf(rendered)).toStrictEqual([
"problem failure mode cause",
"principle decision application text",
"validation",
]);
expect(rendered.querySelector("strong")).toBeNull();
expect(rendered.querySelector("em")).not.toBeNull();
});
it("closes the last paragraph with the boundary only when the lesson declares one", () => {
expect(paragraphsOf(renderLesson({ ...LESSON, boundary: "when not" })).at(-1)).toBe("validation when not");
expect(paragraphsOf(renderLesson({ ...LESSON, boundary: "when not" }))).toHaveLength(3);
expect(paragraphsOf(renderLesson(LESSON))).toHaveLength(3);
});
});
describe("renderBlock with a lesson", () => {
it("dispatches to the lesson renderer rather than the composite fallback", () => {
const rendered = renderBlock(LESSON);
expect(rendered.classList.contains("block-lesson")).toBe(true);
expect(rendered.querySelectorAll("p")).toHaveLength(3);
});
});