41 lines
1.4 KiB
JavaScript
41 lines
1.4 KiB
JavaScript
import { spawnSync } from "node:child_process";
|
|
import { createRequire } from "node:module";
|
|
import path from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
const root = fileURLToPath(new URL("../", import.meta.url));
|
|
const require = createRequire(import.meta.url);
|
|
// Resolve Vite's installed dependency directly: pnpm does not expose a
|
|
// transitive esbuild binary in node_modules/.bin, and tests must run offline.
|
|
const viteRequire = createRequire(require.resolve("vite/package.json"));
|
|
const { build, stop } = viteRequire("esbuild");
|
|
const testEntries = {
|
|
"login-attempt": "src/core/auth/login-attempt.test.ts",
|
|
"login-entry": "src/core/auth/login-entry.test.ts",
|
|
"session-validation": "src/core/auth/session-validation.test.ts",
|
|
"auth-request-policy": "src/core/api/auth-request-policy.test.ts",
|
|
"login-transport": "src/core/auth/login-transport.test.ts",
|
|
};
|
|
const outputDirectory = path.join(root, ".runtime/unit-tests");
|
|
|
|
try {
|
|
await build({
|
|
absWorkingDir: root,
|
|
entryPoints: testEntries,
|
|
outdir: outputDirectory,
|
|
outExtension: { ".js": ".mjs" },
|
|
bundle: true,
|
|
platform: "node",
|
|
format: "esm",
|
|
});
|
|
} finally {
|
|
stop();
|
|
}
|
|
|
|
const result = spawnSync(process.execPath, ["--test", ...Object.keys(testEntries).map((name) => path.join(outputDirectory, `${name}.mjs`))], {
|
|
cwd: root,
|
|
stdio: "inherit",
|
|
});
|
|
if (result.error) throw result.error;
|
|
process.exitCode = result.status ?? 1;
|