test.build/core/converters/surface.converter.test.ts
test.build/core/converters/surface.converter.test.ts is a file in Codebase Testing. 79 lines of code and 0 definitions.
import {
CODE_FENCE,
RECORD_CLOSE,
RECORD_OPEN,
ROSTER_LINES,
SECTION_BANNER,
} from "@banes-lab/build-scripts/configuration/constants/surface.constants.ts";
import {
appendLine,
changedRegion,
commandLine,
markedLines,
recordingsOf,
venueView,
} from "@banes-lab/build-scripts/core/converters/surface.converter.ts";
import { describe, expect, it } from "vitest";
import type { FigureFrame } from "@banes-lab/build-scripts/types/surface.types.ts";
const ROSTER = `${ROSTER_LINES[0] ?? ""} B`;
const frameOf = function frameOf(command: string): FigureFrame["frame"] {
return { command, lines: [], output: "", surface: "" };
};
const OPEN_A = `${RECORD_OPEN}A`;
const CLOSE_A = `${RECORD_CLOSE}A`;
const TAIL = `${SECTION_BANNER} POSITIONS`;
describe("changedRegion", () => {
it("names the lines that differ between the prefix and suffix both versions share", () => {
expect(changedRegion(["a", "b", "c"], ["a", "x", "y", "c"])).toStrictEqual({ from: 1, to: 3 });
expect(changedRegion(["a", "b"], ["a"])).toStrictEqual({ from: 1, to: 1 });
expect(changedRegion(["a"], ["a"])).toBeNull();
});
});
describe("venueView", () => {
it("keeps the roster lines, the unfenced records and everything from the last section banner on", () => {
const lines = [
"# Venue",
"intro prose",
ROSTER,
CODE_FENCE,
ROSTER,
`${RECORD_OPEN}SPECIMEN`,
CODE_FENCE,
OPEN_A,
" status: working",
CLOSE_A,
"",
"prose between",
`${SECTION_BANNER} OLD`,
"old entry",
TAIL,
"entry one",
];
expect(venueView(lines)).toStrictEqual([ROSTER, OPEN_A, " status: working", CLOSE_A, "", TAIL, "entry one"]);
});
});
describe("markedLines and commandLine", () => {
it("marks the lines inside the region, and quotes an argument that holds a space", () => {
expect(markedLines(["a", "b", "c"], { from: 1, to: 2 }).map((line) => line.changed)).toStrictEqual([
false,
true,
false,
]);
expect(markedLines(["a"], null)).toStrictEqual([{ changed: false, text: "a" }]);
expect(commandLine("await", ["--post", "two words"])).toBe('npm run await -- --post "two words"');
expect(appendLine("a note", "venue.md")).toBe('echo "a note" >> venue.md');
});
});
describe("recordingsOf", () => {
it("groups the frames by figure in order, opening each on the view before its first frame", () => {
const frames: FigureFrame[] = [
{ before: ["first"], figure: "venue", frame: frameOf("one") },
{ before: ["other"], figure: "wait", frame: frameOf("two") },
{ before: ["later"], figure: "venue", frame: frameOf("three") },
];
const recordings = recordingsOf(frames, "digest");
expect(recordings.get("venue")?.frames.map((entry) => entry.command)).toStrictEqual(["one", "three"]);
expect(recordings.get("venue")?.opening).toStrictEqual(["first"]);
expect(recordings.get("wait")?.inputs).toBe("digest");
});
});