92 lines
3.0 KiB
TypeScript
92 lines
3.0 KiB
TypeScript
import { execFileSync } from "node:child_process";
|
|
import { mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
import { tmpdir } from "node:os";
|
|
import path from "node:path";
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
function writeCandidatePayload(dir: string) {
|
|
const inputPath = path.join(dir, "review-eval-candidates.json");
|
|
writeFileSync(
|
|
inputPath,
|
|
JSON.stringify({
|
|
summary: {},
|
|
candidates: [
|
|
{
|
|
id: "review-2026-07-08T15-02-39-765Z-152",
|
|
savedAt: "2026-07-08T15:02:39.765Z",
|
|
reason: "automatic:parser-notes:p1:r2c3",
|
|
resolution: "1920x1080",
|
|
ocr: {
|
|
"artifact-name": "Pristine Plume of the Blessed",
|
|
"artifact-slot": "Plume of Death",
|
|
"artifact-main-stat-label": "ATK",
|
|
"artifact-level": "+20",
|
|
"artifact-substats": "- Energy Recharge+10.4%",
|
|
},
|
|
},
|
|
],
|
|
}),
|
|
"utf8",
|
|
);
|
|
return inputPath;
|
|
}
|
|
|
|
describe("prepare confirmed review case script", () => {
|
|
it("creates a confirmed corpus snippet from a candidate and explicit labels", () => {
|
|
const dir = mkdtempSync(path.join(tmpdir(), "gaa-confirmed-review-"));
|
|
try {
|
|
const inputPath = writeCandidatePayload(dir);
|
|
const expectPath = path.join(dir, "expect.json");
|
|
const outputPath = path.join(dir, "snippet.ts");
|
|
writeFileSync(
|
|
expectPath,
|
|
`\uFEFF${JSON.stringify({
|
|
name: "Pristine Plume of the Blessed",
|
|
slot: "Plume of Death",
|
|
level: 20,
|
|
mainStat: "ATK",
|
|
setName: "Silken Moon's Serenade",
|
|
})}`,
|
|
"utf8",
|
|
);
|
|
|
|
execFileSync(
|
|
"node",
|
|
[
|
|
"scripts/prepare-confirmed-review-case.cjs",
|
|
`--input=${inputPath}`,
|
|
"--candidate=review-2026-07-08T15-02-39-765Z-152",
|
|
`--expect-file=${expectPath}`,
|
|
`--out=${outputPath}`,
|
|
],
|
|
{ cwd: process.cwd(), stdio: "pipe" },
|
|
);
|
|
|
|
const snippet = readFileSync(outputPath, "utf8");
|
|
expect(snippet).toContain("confirmed: true");
|
|
expect(snippet).toContain("Pristine Plume of the Blessed");
|
|
expect(snippet).toContain('"artifact-name": "Pristine Plume of the Blessed"');
|
|
expect(snippet).toContain("sourceCandidate=review-2026-07-08T15-02-39-765Z-152");
|
|
expect(snippet).not.toContain("confirmed: false");
|
|
} finally {
|
|
rmSync(dir, { recursive: true, force: true });
|
|
}
|
|
});
|
|
|
|
it("rejects missing explicit labels", () => {
|
|
const dir = mkdtempSync(path.join(tmpdir(), "gaa-confirmed-review-"));
|
|
try {
|
|
const inputPath = writeCandidatePayload(dir);
|
|
expect(() =>
|
|
execFileSync(
|
|
"node",
|
|
["scripts/prepare-confirmed-review-case.cjs", `--input=${inputPath}`, "--candidate=review-2026-07-08T15-02-39-765Z-152"],
|
|
{ cwd: process.cwd(), stdio: "pipe" },
|
|
),
|
|
).toThrow();
|
|
} finally {
|
|
rmSync(dir, { recursive: true, force: true });
|
|
}
|
|
});
|
|
});
|