keycloak_theme/test/bin/tools/crawl.spec.ts

79 lines
3.1 KiB
TypeScript
Raw Normal View History

import path from "path";
import { it, describe, expect, vi, beforeAll, afterAll } from "vitest";
2023-06-21 18:23:12 +02:00
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 path.join("root_dir", "sub_1_dir"):
return ["file_3", "sub_3_dir", "file_4"];
case path.join("root_dir", "sub_1_dir", "sub_3_dir"):
return ["file_5"];
case path.join("root_dir", "sub_2_dir"):
return [];
default: {
2024-05-20 15:48:51 +02:00
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) => {
2024-05-20 15:48:51 +02:00
return {
isDirectory: () => file_path.endsWith("_dir")
};
})
};
});
});
afterAll(() => {
vi.resetAllMocks();
});
it("returns files under a given dir_path", async () => {
2024-05-20 15:48:51 +02:00
const paths = crawl({
dirPath: "root_dir/sub_1_dir/sub_3_dir",
returnedPathsType: "absolute"
});
expect(paths).toEqual(["root_dir/sub_1_dir/sub_3_dir/file_5"]);
});
it("returns files recursively under a given dir_path", async () => {
2024-05-20 15:48:51 +02:00
const paths = crawl({
dirPath: "root_dir",
returnedPathsType: "absolute"
});
expect(paths).toEqual([
"root_dir/sub_1_dir/file_3",
"root_dir/sub_1_dir/sub_3_dir/file_5",
"root_dir/sub_1_dir/file_4",
"root_dir/file_1",
"root_dir/file_2"
]);
});
2023-06-21 18:23:12 +02:00
it("throw dir_path does not exist", async () => {
try {
2024-05-20 15:48:51 +02:00
crawl({ dirPath: "404", returnedPathsType: "absolute" });
2023-06-21 18:23:12 +02:00
} catch {
expect(true);
return;
}
expect(false);
});
});
});