Files
Aislo/resources/tester/helper_298_2_b07_buttons.cjs
T
eomsangdonandClaude Sonnet 5.5 c05a4ba798 test(508-1b 옛 헬퍼 공용 불러오기 7/7): 헬퍼 8 곳 loadTs 베낌 걷고 makeLoader 로
- 헬퍼 동작 그대로(풀이 함수 본문은 옮겨 담음) · 제품 코드 안 고침
- 확인: 이 묶음 헬퍼를 쓰는 시험 70 개 전 70 통과 → 후 70 통과 (시험별 junit 대조 · 어긋남 0)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 17:30:35 +09:00

107 lines
3.4 KiB
JavaScript

/* 298-2 B07 좌측 [저장] · [초기화] 헬퍼 — `_UI_Save` 의 saveDrawingsNow · resetDrawings 를 Node 로 돌려
* 부른 차례(물음 · 오버레이 · 창구 · 자동백업 지움 · 다시 읽음)를 표준출력 JSON 한 벌로.
* TS 는 그 자리에서 트랜스파일 · 서버 길 · 알림 · 물음은 기록용 가짜.
*/
const fs = require("fs");
const path = require("path");
const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const B07 = path.join(__dirname, "..", "..", "B07_DesignDetail");
const calls = [];
let answer = true;
let failReset = false;
const STUBS = {
"@ui/ui_template_elements": {
showToast: (message, kind) => calls.push(["toast", kind]),
showLoadingOverlay: () => calls.push(["overlay+"]),
hideLoadingOverlay: () => calls.push(["overlay-"]),
showConfirmDialog: async () => (calls.push(["ask"]), answer),
},
"./B07_DesignDetail_Api_Fetch": {
confirmDesignDrawing: async (projectId, id) => calls.push(["confirm", id]),
invalidateDesignDrawing: async () => calls.push(["invalidate"]),
resetDesignDrawings: async (projectId) => {
calls.push(["reset", projectId]);
if (failReset) throw new Error("서버 오류");
return { status: "success", released: 1, cleared: [], provisional: 0 };
},
},
};
const storage = new Map();
global.localStorage = {
removeItem: (key) => (calls.push(["drop", key]), storage.delete(key)),
};
global.location = { reload: () => calls.push(["reload"]) };
global.document = { querySelectorAll: () => [] };
const { loadTs } = makeLoader({
root: path.join(__dirname, "..", ".."),
cache: false,
requireFor: (full) => {
return (r) => STUBS[r] ?? {};
},
});
const Save = loadTs(path.join(B07, "B07_DesignDetail_UI_Save.ts"));
const storeOf = (over = {}) => {
let dirty = !!over.cadDirty;
const tab = { id: "cross_s1", dirty };
return {
projectId: "p1",
drawings: [
{ id: "cover", kind: "cover", label: "표지", confirmed: false },
{ id: "cross_s1", kind: "cross", label: "횡단 1", confirmed: false },
],
tabs: {
tabs: () => [tab],
active: () => tab,
markClean: (t) => ((t ?? tab).dirty = false),
anyDirty: () => tab.dirty,
},
current: () => ({ id: "cross_s1", kind: "cross", label: "횡단 1", confirmed: false }),
cadDirty: () => dirty,
setCadClean: () => (dirty = false),
requestCad: async () => ({ drawing: {}, quantityTable: null }),
isFrameEditing: () => !!over.frame,
forget: () => undefined,
reload: async () => undefined,
};
};
const take = () => calls.splice(0).map((c) => c.join(":"));
(async () => {
const out = {};
let saved = 0;
const onSaved = () => saved++;
await Save.saveDrawingsNow(storeOf(), onSaved);
out.saveNone = { calls: take(), saved };
await Save.saveDrawingsNow(storeOf({ cadDirty: true }), onSaved);
out.saveEdited = { calls: take(), saved };
await Save.resetDrawings(storeOf({ cadDirty: true }));
out.reset = take();
answer = false;
await Save.resetDrawings(storeOf());
answer = true;
out.resetCancel = take();
failReset = true;
await Save.resetDrawings(storeOf());
failReset = false;
out.resetFail = take();
await Save.resetDrawings(storeOf({ frame: true }));
out.resetFrame = take();
process.stdout.write(JSON.stringify(out));
})().catch((error) => {
process.stderr.write(String(error && error.stack ? error.stack : error));
process.exit(1);
});