Files
HY2XS_flamy/orchestrator/test/package-meta-utf8.test.ts
T

49 lines
2.2 KiB
TypeScript

import { afterEach, describe, expect, test } from "bun:test";
import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { InvalidUtf8Error } from "../src/lib/fs";
import { isMissingPackageMetadataError, readPackageValue } from "../src/lib/packageMeta";
const directories: string[] = [];
afterEach(async () => {
await Promise.all(directories.splice(0).map((directory) => rm(directory, { recursive: true, force: true })));
});
async function packageDir(): Promise<string> {
const directory = await mkdtemp(join(tmpdir(), "hy2xs-metadata-"));
directories.push(directory);
await mkdir(join(directory, "metadata"));
return directory;
}
describe("metadata пакета", () => {
test("fallback классифицирует только ENOENT", () => {
expect(isMissingPackageMetadataError(Object.assign(new Error("missing"), { code: "ENOENT" }))).toBe(true);
for (const code of ["EACCES", "EIO", "EISDIR"]) {
expect(isMissingPackageMetadataError(Object.assign(new Error(code), { code }))).toBe(false);
}
expect(isMissingPackageMetadataError(new InvalidUtf8Error("metadata/value", new Error("decode")))).toBe(false);
});
test("отсутствующее необязательное значение использует fallback", async () => {
const directory = await packageDir();
expect(await readPackageValue(directory, "missing", "unknown")).toBe("unknown");
});
test("повреждённый UTF-8 не маскируется fallback-значением", async () => {
const directory = await packageDir();
await writeFile(join(directory, "metadata", "package.version"), new Uint8Array([0x31, 0xff]));
await expect(readPackageValue(directory, "package.version", "unknown")).rejects.toBeInstanceOf(
InvalidUtf8Error
);
});
test("каталог вместо metadata-файла не маскируется fallback-значением", async () => {
const directory = await packageDir();
await mkdir(join(directory, "metadata", "package.version"));
await expect(readPackageValue(directory, "package.version", "unknown")).rejects.toBeDefined();
});
});