test(M02): 화면 시나리오 43-6 도면 표 선 색 — orca eval 한 번 · 놓기 → 저장 JSON 선 색 · 되돌림 (43-6)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UoSr2sqvYtBf1dtQdus88s
This commit is contained in:
2026-10-05 00:33:02 +09:00
co-authored by Claude Opus 5.5
parent b1dbd9c3cb
commit 848f8bbc93
@@ -0,0 +1,67 @@
/* 43-6 도면 표 선 색(흠 E2) — orca eval 한 번에 도는 시나리오(읽기만 · 저장 안 함).
* 시작 화면: M02 · 시스템 관리자 · 구조물 도면 상세(마스터 item1 · CAD 열림 · 보기 전용 아님).
* 하는 일: 면적산출 범위 → 표 변환(POST …/area/item1/table · 답에 lineColor 없음) → CAD 에 place-table →
* 커서 옮김 → 누름(놓기) → save-request 로 CAD 도면 JSON 받음 → Ctrl+Z 로 되돌림.
* 기대: 변환 답 lineColor 없음(answerHasColor false) · 놓인 표 1 · 저장 JSON 표 lineColor = "#fff" ·
* lineWidth 1 · id 있음 · 되돌린 뒤 표 수 = 시작 수.
*/
(async () => {
const W = (t) => new Promise((r) => setTimeout(r, t));
const f = document.querySelector("iframe");
const w = f.contentWindow;
const cad = w.__aisloCad;
const before = cad.entities().filter((e) => e.type === "Table").length;
const area = await (
await fetch("/api/m02/layers/system/templates/area/item1", { credentials: "include" })
).json();
const sheet = area.문서.시트[0].id;
const got = await (
await fetch("/api/m02/layers/system/area/item1/table", {
method: "POST",
credentials: "include",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ 시트: sheet, 범위: "A1:B2", 글자크기: 2.5 }),
})
).json();
const entity = got.표;
w.postMessage({ type: "aislo:b08:place-table", entity, link: "T43" }, location.origin);
await W(600);
const c = f.contentDocument.querySelector("canvas");
const r = c.getBoundingClientRect();
const at = { bubbles: true, button: 0, clientX: r.left + 320, clientY: r.top + 260 };
c.dispatchEvent(new MouseEvent("mousemove", at));
await W(window.__hold ?? 300); // 사진 찍을 때는 __hold 를 늘림
c.dispatchEvent(new MouseEvent("mousedown", at));
c.dispatchEvent(new MouseEvent("mouseup", at));
await W(500);
const placed = cad.entities().filter((e) => e.type === "Table").length - before;
let saved = null;
const take = (e) => {
if (e.data && e.data.type === "aislo:b08:save-response") saved = e.data.drawing;
};
window.addEventListener("message", take);
w.postMessage({ type: "aislo:b08:save-request" }, location.origin);
await W(1000);
window.removeEventListener("message", take);
const table = (saved?.entities ?? []).find(
(e) => e.type === "Table" && e.shapeData?.style?.연결 === "T43",
);
f.contentDocument.body.dispatchEvent(
new KeyboardEvent("keydown", {
key: "z",
code: "KeyZ",
ctrlKey: true,
bubbles: true,
cancelable: true,
}),
);
await W(400);
return JSON.stringify({
answerHasColor: "lineColor" in entity,
placed,
lineColor: table?.lineColor ?? null,
lineWidth: table?.lineWidth ?? null,
hasId: !!table?.id,
afterUndo: cad.entities().filter((e) => e.type === "Table").length === before,
});
})();