test.rules/codemods/analyzers/specifier.target.analyzer.test.ts

test.rules/codemods/analyzers/specifier.target.analyzer.test.ts is a file in Codebase Testing. 54 lines of code and 0 definitions.

import {
    collectTargetFindings,
    filePartOf,
    relocatedSpecifier,
    targetCandidates,
} from "@ssot/govlab/codemods/analyzers/specifier.target.analyzer.ts";
import { describe, expect, it } from "vitest";

describe("filePartOf", () => {
    it("drops a bundler resource query and leaves a plain specifier as written", () => {
        expect(filePartOf("../styles/page.style.css?raw")).toBe("../styles/page.style.css");
        expect(filePartOf("./a.ts")).toBe("./a.ts");
    });
});

describe("targetCandidates", () => {
    const files = ["/m/core/loaders/stats.fixture.ts", "/m/core/converters/site.fixture.ts", "/m/core/a/site.ts"];

    it("matches a file by the name the specifier carries", () => {
        expect(targetCandidates("./stats.fixture.ts", files)).toStrictEqual(["/m/core/loaders/stats.fixture.ts"]);
    });

    it("matches an extensionless specifier by the file's stem", () => {
        expect(targetCandidates("../../site", files)).toStrictEqual(["/m/core/a/site.ts"]);
    });

    it("matches a specifier that carries a resource query by its file part", () => {
        expect(targetCandidates("../../site.fixture.ts?raw", files)).toStrictEqual([
            "/m/core/converters/site.fixture.ts",
        ]);
    });

    it("returns nothing for a name no file carries", () => {
        expect(targetCandidates("./absent.fixture.ts", files)).toStrictEqual([]);
    });
});

describe("relocatedSpecifier", () => {
    it("points a sibling at its own folder", () => {
        expect(
            relocatedSpecifier("/m/core/a/x.test.ts", "../../site/tests/s.fixture.ts", "/m/core/a/s.fixture.ts"),
        ).toBe("./s.fixture.ts");
    });

    it("climbs to a neighboring folder", () => {
        expect(relocatedSpecifier("/m/core/a/x.test.ts", "./s.fixture.ts", "/m/core/b/s.fixture.ts")).toBe(
            "../b/s.fixture.ts",
        );
    });

    it("descends into a child folder", () => {
        expect(relocatedSpecifier("/m/x.test.ts", "./s.fixture.ts", "/m/core/s.fixture.ts")).toBe(
            "./core/s.fixture.ts",
        );
    });
});

describe("collectTargetFindings", () => {
    it("leaves no relative import that resolves to no file", () => {
        expect(
            collectTargetFindings().map((finding) => `${finding.file}:${String(finding.line)} ${finding.from}`),
        ).toStrictEqual([]);
    }, 180_000);
});