feat: preserve flatness suite measurement outputs
This commit is contained in:
62
server/flatnessSuiteBackfill.test.ts
Normal file
62
server/flatnessSuiteBackfill.test.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import {
|
||||
executePlans,
|
||||
mergeMeasurements,
|
||||
type BackfillPlan,
|
||||
} from "../scripts/backfill-flatness-suite-measurements";
|
||||
|
||||
function plan(id: number): BackfillPlan {
|
||||
return {
|
||||
row: { id, taskId: 24, measurements: [], resultData: { kind: "plugin", marker: "kept" } } as BackfillPlan["row"],
|
||||
resultJsonPath: `/tmp/${id}/result.json`,
|
||||
originalResultJson: { status: "completed", extra: { module: "contour_batch" } },
|
||||
measurements: [{
|
||||
name: "任务11 · 车钩面板的平整度",
|
||||
value: null,
|
||||
unit: "mm",
|
||||
toleranceLabel: "0.5mm",
|
||||
status: "fail",
|
||||
passLabel: "成功",
|
||||
warningLabel: "部分成功",
|
||||
failLabel: "失败",
|
||||
}],
|
||||
};
|
||||
}
|
||||
|
||||
describe("flatness-suite 历史回填", () => {
|
||||
it("dry-run 不调用持久化", async () => {
|
||||
const persist = vi.fn(async () => true);
|
||||
const summary = await executePlans([plan(234)], false, persist);
|
||||
expect(persist).not.toHaveBeenCalled();
|
||||
expect(summary).toEqual({ planned: 1, applied: 0, skipped: 1, failed: 0 });
|
||||
});
|
||||
|
||||
it("apply 由持久化层守卫实现幂等", async () => {
|
||||
const applied = new Set<number>();
|
||||
const persist = vi.fn(async (item: BackfillPlan) => {
|
||||
if (applied.has(item.row.id)) return false;
|
||||
applied.add(item.row.id);
|
||||
return true;
|
||||
});
|
||||
expect((await executePlans([plan(234)], true, persist)).applied).toBe(1);
|
||||
const second = await executePlans([plan(234)], true, persist);
|
||||
expect(second.applied).toBe(0);
|
||||
expect(second.skipped).toBe(1);
|
||||
});
|
||||
|
||||
it("异常记录不阻断其他记录", async () => {
|
||||
const persist = vi.fn(async (item: BackfillPlan) => {
|
||||
if (item.row.id === 1) throw new Error("bad excel");
|
||||
return true;
|
||||
});
|
||||
const summary = await executePlans([plan(1), plan(2)], true, persist);
|
||||
expect(summary).toEqual({ planned: 2, applied: 1, skipped: 0, failed: 1 });
|
||||
});
|
||||
|
||||
it("扩展字段完整进入 resultData 且保留已有字段", () => {
|
||||
const item = plan(234);
|
||||
const merged = mergeMeasurements(item.row.resultData, item.measurements);
|
||||
expect(merged.marker).toBe("kept");
|
||||
expect(merged.measurements).toEqual(item.measurements);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user