mirror of
https://github.com/SMNETSTUDIO/WeChat-AI.git
synced 2026-08-22 11:03:43 +08:00
55 lines
2.0 KiB
TypeScript
55 lines
2.0 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import fs from "node:fs";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
import { describe, it } from "node:test";
|
|
import { createHash } from "node:crypto";
|
|
import { scanLocalOtaHashes } from "./ota-apply.js";
|
|
|
|
describe("ota-apply scanLocalOtaHashes", () => {
|
|
it("scans allowed files under a fake monorepo", () => {
|
|
const root = fs.mkdtempSync(path.join(os.tmpdir(), "wa-ota-"));
|
|
try {
|
|
fs.writeFileSync(path.join(root, "package.json"), '{"version":"1.0.0"}');
|
|
fs.writeFileSync(path.join(root, "pnpm-workspace.yaml"), "packages:\n - packages/*\n");
|
|
fs.mkdirSync(path.join(root, "apps", "api", "src"), { recursive: true });
|
|
fs.writeFileSync(
|
|
path.join(root, "apps", "api", "src", "index.ts"),
|
|
"export {}\n",
|
|
);
|
|
fs.mkdirSync(path.join(root, "apps", "api", "node_modules", "x"), {
|
|
recursive: true,
|
|
});
|
|
fs.writeFileSync(
|
|
path.join(root, "apps", "api", "node_modules", "x", "a.js"),
|
|
"nope",
|
|
);
|
|
fs.mkdirSync(path.join(root, "packages", "db", "src"), { recursive: true });
|
|
fs.writeFileSync(
|
|
path.join(root, "packages", "db", "package.json"),
|
|
"{}",
|
|
);
|
|
fs.writeFileSync(
|
|
path.join(root, "packages", "db", "src", "keys.ts"),
|
|
"export {}\n",
|
|
);
|
|
fs.writeFileSync(path.join(root, "packages", "db", "README.md"), "no");
|
|
|
|
const map = scanLocalOtaHashes(root);
|
|
assert.ok(map.has("package.json"));
|
|
assert.ok(map.has("apps/api/src/index.ts"));
|
|
assert.ok(map.has("packages/db/src/keys.ts"));
|
|
assert.ok(map.has("packages/db/package.json"));
|
|
assert.equal(map.has("apps/api/node_modules/x/a.js"), false);
|
|
assert.equal(map.has("packages/db/README.md"), false);
|
|
|
|
const h = createHash("sha256")
|
|
.update(fs.readFileSync(path.join(root, "package.json")))
|
|
.digest("hex");
|
|
assert.equal(map.get("package.json"), h);
|
|
} finally {
|
|
fs.rmSync(root, { recursive: true, force: true });
|
|
}
|
|
});
|
|
});
|