test.web/domain/converters/anatomy.reference.converter.test.ts
test.web/domain/converters/anatomy.reference.converter.test.ts is a file in Codebase Testing. 65 lines of code and 0 definitions.
import type { AnatomyFile, AnatomyFolder } from "@banes-lab/web/types/anatomy.types.ts";
import {
CALLS_RELATION,
DEFINITIONS_RELATION,
FILES_RELATION,
FOLDERS_RELATION,
FOLDER_RELATION,
ROOT_LABEL,
} from "@banes-lab/web/configuration/strings/folder.strings.ts";
import { anatomyIndexOf, anatomyRecordsOf } from "@banes-lab/web/domain/converters/anatomy.reference.converter.ts";
import { describe, expect, it } from "vitest";
import { ANATOMY } from "@banes-lab/web/core/generated/anatomy.generated.ts";
import type { ReferenceRecord } from "@banes-lab/web/types/reference.types.ts";
const filesOf = function filesOf(folder: AnatomyFolder): readonly AnatomyFile[] {
return [...folder.files, ...folder.folders.flatMap(filesOf)];
};
const foldersOf = function foldersOf(folder: AnatomyFolder): readonly AnatomyFolder[] {
return [folder, ...folder.folders.flatMap(foldersOf)];
};
const labelsOf = function labelsOf(record: ReferenceRecord | undefined, relation: string): readonly string[] {
return record?.relations.find((held) => held.relation === relation)?.edges.map((edge) => edge.label) ?? [];
};
const ROOT = ANATOMY.tree;
const CALLING = filesOf(ROOT).find((file) => file.definitions.some((definition) => definition.callees.length > 0));
describe("anatomyRecordsOf", () => {
it("gives a file its folder, its definitions and one record per definition with the definitions it calls", () => {
const records = anatomyRecordsOf([ROOT]);
expect(CALLING).toBeDefined();
const file = CALLING ?? ROOT.files[0];
if (file === undefined) {
return;
}
const built = records.file(file);
expect(built.node.name).toBe(file.name);
expect(labelsOf(built.node, FOLDER_RELATION)).toHaveLength(1);
expect(labelsOf(built.node, DEFINITIONS_RELATION)).toStrictEqual(file.definitions.map((entry) => entry.name));
expect(Object.keys(built.definitions).sort()).toStrictEqual(
[...new Set(file.definitions.map((entry) => String(entry.line)))].sort(),
);
const calling = file.definitions.find((definition) => definition.callees.length > 0);
expect(labelsOf(built.definitions[String(calling?.line)], CALLS_RELATION)).toStrictEqual(
calling?.callees.map((callee) => callee.name),
);
});
it("names the root folder by its label and lists its child folders and files", () => {
const built = anatomyRecordsOf([ROOT]).folder(ROOT);
expect(built.node.name).toBe(ROOT_LABEL);
expect(built.definitions).toStrictEqual({});
expect(labelsOf(built.node, FOLDERS_RELATION)).toStrictEqual(ROOT.folders.map((folder) => folder.name));
expect(labelsOf(built.node, FILES_RELATION)).toStrictEqual(ROOT.files.map((file) => file.name));
});
});
describe("anatomyIndexOf", () => {
it("maps every node that carries a records asset, and every file with a source to its source and references", () => {
const index = anatomyIndexOf([ROOT]);
const carried = [...foldersOf(ROOT), ...filesOf(ROOT)].filter((node) => node.records !== undefined);
expect(Object.keys(index.nodes)).toHaveLength(carried.length);
const sourced = filesOf(ROOT).filter((file) => file.source !== null);
expect(Object.keys(index.sources)).toHaveLength(sourced.length);
const [first] = sourced;
expect(first === undefined ? null : index.sources[first.path]).toStrictEqual(
first === undefined ? null : { references: first.references ?? null, source: first.source },
);
});
});