keycloak_theme/test/bin/tools/crawl.spec.ts
2024-06-14 19:06:48 +02:00

81 lines
3.2 KiB
TypeScript

import { join as pathJoin } from "path";
import { it, describe, expect, vi, beforeAll, afterAll } from "vitest";
import { crawl } from "keycloakify/bin/tools/crawl";
describe("crawl", () => {
describe("crawRec", () => {
beforeAll(() => {
vi.mock("node:fs", async () => {
const mod = await vi.importActual<typeof import("fs")>("fs");
return {
...mod,
readdirSync: vi.fn().mockImplementation((dir_path: string) => {
switch (dir_path) {
case "root_dir":
return ["sub_1_dir", "file_1", "sub_2_dir", "file_2"];
case pathJoin("root_dir", "sub_1_dir"):
return ["file_3", "sub_3_dir", "file_4"];
case pathJoin("root_dir", "sub_1_dir", "sub_3_dir"):
return ["file_5"];
case pathJoin("root_dir", "sub_2_dir"):
return [];
default: {
const enoent = new Error(
`ENOENT: no such file or directory, scandir '${dir_path}'`
);
// @ts-ignore
enoent.code = "ENOENT";
// @ts-ignore
enoent.syscall = "open";
// @ts-ignore
enoent.path = dir_path;
throw enoent;
}
}
}),
lstatSync: vi.fn().mockImplementation((file_path: string) => {
return {
isDirectory: () => file_path.endsWith("_dir")
};
})
};
});
});
afterAll(() => {
vi.resetAllMocks();
});
it("returns files under a given dir_path", async () => {
const paths = crawl({
dirPath: pathJoin("root_dir", "sub_1_dir", "sub_3_dir"),
returnedPathsType: "absolute"
});
expect(paths).toEqual([
pathJoin("root_dir", "sub_1_dir", "sub_3_dir", "file_5")
]);
});
it("returns files recursively under a given dir_path", async () => {
const paths = crawl({
dirPath: "root_dir",
returnedPathsType: "absolute"
});
expect(paths).toEqual([
pathJoin("root_dir", "sub_1_dir", "file_3"),
pathJoin("root_dir", "sub_1_dir", "sub_3_dir", "file_5"),
pathJoin("root_dir", "sub_1_dir", "file_4"),
pathJoin("root_dir", "file_1"),
pathJoin("root_dir", "file_2")
]);
});
it("throw dir_path does not exist", async () => {
try {
crawl({ dirPath: "404", returnedPathsType: "absolute" });
} catch {
expect(true);
return;
}
expect(false);
});
});
});