Files

167 lines
6.0 KiB
JavaScript

import test from "node:test";
import assert from "node:assert/strict";
import { mkdtemp, rm, utimes, writeFile } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import {
consentVarsFromSource,
exitCodeFor,
parseArgs,
resolveRunEnvironment,
summarize,
verdictFor,
worldSnapshotsSince,
} from "./evals.mjs";
test("consentVarsFromSource extracts, deduplicates, and sorts only opt-in variables", () => {
const source = `
needs({ optIn: ["OPENWORK_EVAL_ZETA", 'OPENWORK_EVAL_ALPHA'] });
const requirements = {
optIn: [
"OPENWORK_EVAL_MULTI",
"OPENWORK_EVAL_ALPHA",
],
};
process.env.OPENWORK_EVAL_DIRECT === "1";
process.env.OPENWORK_EVAL_TRIMMED?.trim() === "1";
process.env.OPENWORK_EVAL_MODEL?.trim() || "";
process.env.OPENWORK_EVAL_DEN_API_URL?.trim();
process.env.UNRELATED === "1";
`;
assert.deepEqual(consentVarsFromSource(source), [
"OPENWORK_EVAL_ALPHA",
"OPENWORK_EVAL_DIRECT",
"OPENWORK_EVAL_MULTI",
"OPENWORK_EVAL_TRIMMED",
"OPENWORK_EVAL_ZETA",
]);
});
test("parseArgs maps run and publish flags", () => {
assert.deepEqual(parseArgs(["app-smoke", "--with-llm-vision", "--daytona", "--den", "https://den.example"]), {
testNames: ["app-smoke"],
withLlmVision: true,
local: false,
daytona: true,
publish: false,
dryRun: false,
force: false,
help: false,
den: "https://den.example",
});
assert.deepEqual(parseArgs(["--publish", "--pr", "42", "--test-run", "latest", "--dry-run", "--force"]), {
testNames: [],
withLlmVision: false,
local: false,
daytona: false,
publish: true,
dryRun: true,
force: true,
help: false,
pr: "42",
testRun: "latest",
});
});
test("parseArgs validates values, exclusivity, and unknown flags", () => {
assert.throws(() => parseArgs(["--den"]), /--den requires a value/);
assert.throws(() => parseArgs(["--publish", "--dry-run", "app-smoke"]), /mutually exclusive with test names/);
assert.throws(() => parseArgs(["--publish", "--pr", "1", "--den", "x"]), /mutually exclusive with --den/);
assert.throws(() => parseArgs(["app-smoke", "--local", "--daytona"]), /--local is mutually exclusive with --daytona/);
assert.throws(() => parseArgs(["app-smoke", "--local", "--den", "https:\/\/den.example"]), /--local is mutually exclusive with --den/);
assert.throws(() => parseArgs(["--unknown"]), /Unknown flag: --unknown/);
});
test("explicit local placement removes inherited remote provisioning inputs", () => {
const options = parseArgs(["app-smoke", "--local"]);
const childEnv = resolveRunEnvironment(options, {
PATH: "/bin",
OPENWORK_EVAL_DAYTONA: "1",
OPENWORK_EVAL_DAYTONA_SANDBOX: "desktop-sandbox",
OPENWORK_EVAL_DAYTONA_SANDBOX_ID: "legacy-sandbox",
OPENWORK_EVAL_DAYTONA_DEN_SANDBOX: "den-sandbox",
OPENWORK_EVAL_DAYTONA_DESKTOP_SANDBOX: "prepared-desktop",
OPENWORK_EVAL_DEN_API_URL: "https://den-api.example.test",
OPENWORK_EVAL_DEN_WEB_URL: "https://den.example.test",
});
assert.deepEqual(childEnv, { PATH: "/bin" });
});
test("explicit Daytona and attached Den placement retain their existing behavior", () => {
const daytona = resolveRunEnvironment(parseArgs(["app-smoke", "--daytona"]), {
OPENWORK_EVAL_DEN_API_URL: "https://attached.example.test",
});
assert.equal(daytona.OPENWORK_EVAL_DAYTONA, "1");
assert.equal(daytona.OPENWORK_EVAL_DEN_API_URL, "https://attached.example.test");
const attached = resolveRunEnvironment(parseArgs(["app-smoke", "--den", "https://den.example.test"]), {});
assert.equal(attached.OPENWORK_EVAL_DEN_API_URL, "https://den.example.test");
});
test("automatic placement preserves the caller environment", () => {
const ambient = {
OPENWORK_EVAL_DAYTONA: "1",
OPENWORK_EVAL_DEN_API_URL: "https://den.example.test",
};
assert.deepEqual(resolveRunEnvironment(parseArgs(["app-smoke"]), ambient), ambient);
});
test("verdict and exit mapping covers failed, incomplete, and passed runs", () => {
const failed = verdictFor({ failed: 1, skipped: 0 });
assert.equal(failed, "failed");
assert.equal(exitCodeFor(failed, { named: true }), 1);
const incomplete = verdictFor({ failed: 0, skipped: 1 });
assert.equal(incomplete, "incomplete");
assert.equal(exitCodeFor(incomplete, { named: true }), 2);
assert.equal(exitCodeFor(incomplete, { named: false }), 0);
const passed = verdictFor({ failed: 0, skipped: 0 });
assert.equal(passed, "passed");
assert.equal(exitCodeFor(passed, { named: true }), 0);
});
test("summarize reads counts and skipped test details", () => {
assert.deepEqual(summarize({
numPassedTests: 1,
numFailedTests: 0,
numPendingTests: 1,
testResults: [{
name: "/repo/evals/specs/app-smoke.e2e.test.ts",
assertionResults: [
{ status: "passed", title: "runs" },
{ status: "pending", title: "needs provider" },
],
}],
}), {
passed: 1,
failed: 0,
skipped: 1,
skips: [{ file: "app-smoke.e2e.test.ts", title: "needs provider" }],
});
});
test("worldSnapshotsSince returns only snapshots written during the run, newest first", async () => {
const directory = await mkdtemp(join(tmpdir(), "openwork-world-snapshots-"));
try {
await writeFile(join(directory, "old.json"), "{}\n");
await utimes(join(directory, "old.json"), new Date(0), new Date(0));
const startTime = Date.now();
await writeFile(join(directory, "recent.json"), "{}\n");
await writeFile(join(directory, "newer.json"), "{}\n");
await utimes(join(directory, "recent.json"), new Date(startTime + 1_000), new Date(startTime + 1_000));
await utimes(join(directory, "newer.json"), new Date(startTime + 2_000), new Date(startTime + 2_000));
await writeFile(join(directory, "ignored.txt"), "not a snapshot\n");
assert.deepEqual(worldSnapshotsSince(startTime, directory), [
join(directory, "newer.json"),
join(directory, "recent.json"),
]);
} finally {
await rm(directory, { recursive: true, force: true });
}
});