fix(M02): 보낸 표 놓기 전 탭을 바꾸면 그 장에 다시 놓기 · 저장 뒤 지금 장 미저장 표시 지움(82-3)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NPJGtfXo6GMbcpiboQC4uK
This commit is contained in:
2026-10-08 13:05:17 +09:00
co-authored by Claude Opus 5.5
parent 4e18bca4e4
commit 52cd7e46cb
2 changed files with 55 additions and 12 deletions
+23 -4
View File
@@ -103,13 +103,14 @@ const tabsMod = load("ui_template/cad_host/cad_host_tabs.ts", { "@ui/ui_template
// ⑤ M02 여러 장 — 가짜 CAD(requestSave = 지금 실린 도면 + 편집)
const cadLoads = [];
const ev = [];
let inCad = null;
const fakeCad = {
element: node("div"),
beginLoading() {},
load: (drawing, meta, frameEdit, fields, extra) => (cadLoads.push(extra.recoveryScope), (inCad = drawing)),
load: (drawing, meta, frameEdit, fields, extra) => (ev.push("load"), cadLoads.push(extra.recoveryScope), (inCad = drawing)),
requestSave: async () => ({ drawing: inCad, quantityTable: null }),
placeTable() {},
placeTable: (entity, link) => ev.push("place " + link),
updateTable: async () => 1,
destroy() {},
};
@@ -142,6 +143,18 @@ const tabsMod = load("ui_template/cad_host/cad_host_tabs.ts", { "@ui/ui_template
const third = bar.kids.find((k) => k.dataset.tabId && k.dataset.active === "true").dataset.tabId;
await bar.kids.find((k) => k.dataset.tabId === "#1").on.click();
await new Promise((r) => setTimeout(r, 5));
// 보낸 표를 놓기 전에 탭을 바꾸면 그 장에서 다시 놓기(싣기 뒤) · 놓은 뒤에는 안 걺
const tabNodes = () => bar.kids.filter((k) => k.dataset.tabId);
ev.length = 0;
sheets.placeTable(table("T9"), "T9");
await tabNodes()[1].on.click();
await new Promise((r) => setTimeout(r, 5));
out.replace = ev.slice();
inCad = { ...inCad, entities: [...inCad.entities, table("T9")] }; // 놓음
ev.length = 0;
await tabNodes()[0].on.click();
await new Promise((r) => setTimeout(r, 5));
out.placedOnce = ev.slice();
out.updated = await sheets.updateTable("T2", [[{ text: "새" }]]);
const got = await sheets.getDoc();
out.m02 = {
@@ -210,15 +223,21 @@ def test_B07_목록에서_연_도면이_탭_미저장_편집_지킴():
def test_여러_장_문서_장_도번_백업_칸(got):
m02 = got["m02"]
assert m02["first"] == 2
assert m02["more"] == [["단면", 1], ["3장", 1]]
assert m02["more"] == [["단면", 2], ["3장", 1]] # 단면에 T9 표를 놓음
assert m02["newId"] is True and m02["active"] == ""
assert m02["scopes"][0] == "m02:system:rv" and m02["scopes"][1].startswith("m02:system:rv#s")
assert m02["number"] == "SD-1-3"
q = "/api/m02/structure-frame?number="
assert m02["frames"] == [q + "SD-1", q + "SD-1-3"] # 장 도번마다 한 번(1장은 다시 안 받음)
# 장 도번마다 한 번(같은 도번은 다시 안 받음)
assert m02["frames"] == [q + "SD-1", q + "SD-1-3", q + "SD-1-2"]
assert m02["dirty"] is True # 장 더함 = 저장 안 한 고침
def test_놓기_전_탭을_바꾸면_그_장에_다시_놓기(got):
assert got["replace"] == ["place T9", "load", "place T9"] # 싣기 뒤에 다시
assert got["placedOnce"] == ["load"]
def test_안_실린_장_표도_갈음(got):
assert got["updated"] == 2 # 받아 둔 둘째 장 1 + 실린 장(가짜 CAD) 1
assert got["m02"]["t2"] == "새"