test.govlab/docs/core/analyzers/invocation.analyzer.test.ts

test.govlab/docs/core/analyzers/invocation.analyzer.test.ts is a file in Codebase Testing. 43 lines of code and 0 definitions.

import {
    adjacencyOf,
    reachableFrom,
    rootIds,
    selectWithinEdgeBudget,
} from "@govlab/docs/core/analyzers/invocation.analyzer.ts";
import { describe, expect, it } from "vitest";
import type { CodeGraph } from "@govlab/docs/types/graph.types.ts";

const SOURCE = { file: "a.ts", line: 1 };
const GRAPH: CodeGraph = {
    edges: [
        { from: "a", kind: "call", to: "c" },
        { from: "a", kind: "call", to: "b" },
        { from: "b", kind: "call", to: "c" },
    ],
    nodes: [
        { id: "b", kind: "method", label: "b", source: SOURCE },
        { id: "a", kind: "entry", label: "a", source: SOURCE },
        { id: "c", kind: "method", label: "c", source: SOURCE },
    ],
};

describe("adjacencyOf and reachableFrom", () => {
    it("walk depth first from a root in sorted order, visiting each node once", () => {
        const adjacency = adjacencyOf(GRAPH);
        expect(adjacency.get("a")).toStrictEqual(["c", "b"]);
        expect(reachableFrom("a", adjacency)).toStrictEqual(["a", "b", "c"]);
    });
});

describe("selectWithinEdgeBudget", () => {
    it("keeps nodes in order until the next one would exceed the edge budget", () => {
        expect([...selectWithinEdgeBudget(["a", "b", "c"], GRAPH.edges, 1)]).toStrictEqual(["a", "b"]);
        expect([...selectWithinEdgeBudget(["a", "b", "c"], GRAPH.edges, 3)]).toStrictEqual(["a", "b", "c"]);
    });
});

describe("rootIds", () => {
    it("prefers entry nodes and falls back to the first node by id", () => {
        expect(rootIds(GRAPH)).toStrictEqual(["a"]);
        expect(rootIds({ edges: [], nodes: GRAPH.nodes.filter((node) => node.kind === "method") })).toStrictEqual([
            "b",
        ]);
        expect(rootIds({ edges: [], nodes: [] })).toStrictEqual([]);
    });
});