Files
pikasTech-HWLAB/web/hwlab-cloud-web/scripts/dist-contract.test.ts
T
2026-05-28 21:33:33 +08:00

74 lines
2.7 KiB
TypeScript

import assert from "node:assert/strict";
import fs from "node:fs";
import os from "node:os";
import path from "node:path";
import test from "node:test";
import {
assertCloudWebDistFresh,
buildCloudWebDist,
cloudWebAppSourceFiles,
cloudWebDistAliasFiles,
cloudWebDistRuntimeFiles,
inspectCloudWebDistFreshness
} from "./dist-contract.ts";
test("Cloud Web dist build copies runtime assets and route aliases", async () => {
const rootDir = makeCloudWebFixture();
try {
const distDir = await buildCloudWebDist(rootDir);
assert.equal(distDir, path.join(rootDir, "dist"));
for (const relativePath of cloudWebDistRuntimeFiles.filter((file) => file !== "app.js")) {
assert.equal(read(path.join(distDir, relativePath)), read(path.join(rootDir, relativePath)), `runtime asset ${relativePath}`);
}
assert.match(read(path.join(distDir, "app.js")), /console\.log\("fixture"\)/u);
for (const relativePath of cloudWebDistAliasFiles) {
assert.equal(read(path.join(distDir, relativePath)), read(path.join(rootDir, "index.html")), `alias asset ${relativePath}`);
}
const freshness = await assertCloudWebDistFresh(rootDir);
assert.equal(freshness.status, "pass");
assert.deepEqual(freshness.mismatches, []);
} finally {
fs.rmSync(rootDir, { recursive: true, force: true });
}
});
test("Cloud Web dist freshness reports stale runtime assets", async () => {
const rootDir = makeCloudWebFixture();
try {
await buildCloudWebDist(rootDir);
fs.writeFileSync(path.join(rootDir, "app-helpers.ts"), "console.log('changed');\n");
const freshness = await inspectCloudWebDistFreshness(rootDir);
assert.equal(freshness.status, "blocked");
assert.deepEqual(freshness.mismatches, ["app.js"]);
assert.equal(freshness.files.find((file) => file.path === "app.js")?.status, "mismatch");
} finally {
fs.rmSync(rootDir, { recursive: true, force: true });
}
});
function makeCloudWebFixture() {
const rootDir = fs.mkdtempSync(path.join(os.tmpdir(), "hwlab-cloud-web-dist-"));
for (const relativePath of cloudWebDistRuntimeFiles.filter((file) => file !== "app.js")) {
const filePath = path.join(rootDir, relativePath);
fs.mkdirSync(path.dirname(filePath), { recursive: true });
fs.writeFileSync(filePath, `${relativePath}\n`);
}
for (const relativePath of cloudWebAppSourceFiles) {
const filePath = path.join(rootDir, relativePath);
fs.mkdirSync(path.dirname(filePath), { recursive: true });
fs.writeFileSync(filePath, relativePath === "app.ts" ? "console.log(\"fixture\");\n" : "");
}
fs.writeFileSync(path.join(rootDir, "index.html"), "<html>fixture</html>\n");
return rootDir;
}
function read(filePath) {
return fs.readFileSync(filePath, "utf8");
}