- [저장] = 이동 없이 고친 탭(●) + 지금 탭 저장 · 고친 것 없으면 요청 0 · 저장 뒤 단계 색 다시 읽음 - [초기화] = danger-ghost · 맨 오른쪽 · 물음 → 오버레이 → POST design-drawings/reset → CAD 자동백업(도면마다) 지움 → 다시 읽음 - [>] = 지금 길 그대로(고친 것 없으면 저장 요청 없이 이동) - 새 시험 test_298_2_b07_buttons · test_280_5_b07_settings 줄 자리 고쳐 씀 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
95 lines
3.2 KiB
Python
95 lines
3.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""298-2 B07 좌측 아래 단추 줄 [?] [<] [>] [저장] [초기화].
|
|
|
|
못박는 것
|
|
- 줄 차례 — [도각 편집] = 윗줄 · 아래 줄(help-row) = [저장] [초기화](앞 [?] [<] [>] 는 공용) ·
|
|
[초기화] = danger-ghost(B05 · B06 과 같은 꼴) · 맨 오른쪽.
|
|
- [저장] = 이동 없이 고친 탭 저장 · 고친 것 없으면 요청 0 · 저장 뒤 단계 색 다시 읽음.
|
|
- [초기화] = 물음 → 오버레이 → POST reset → CAD 자동백업(도면마다) 지움 → 다시 읽음 ·
|
|
[취소] = 요청 0 · 실패 = 머묾(다시 읽음 없음) · 도각 편집 중 = 막음.
|
|
- 창구 = `POST /projects/{id}/design-drawings/reset` 본문 없음.
|
|
|
|
Node 헬퍼 `helper_298_2_b07_buttons.cjs` 가 저장 묶음을 돌림.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import os
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
HERE = os.path.dirname(os.path.abspath(__file__))
|
|
B07 = Path(HERE).parents[1] / "B07_DesignDetail"
|
|
|
|
|
|
def _read(name: str) -> str:
|
|
return (B07 / name).read_text(encoding="utf-8").replace("\r\n", "\n")
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def out():
|
|
proc = subprocess.run(
|
|
["node", os.path.join(HERE, "helper_298_2_b07_buttons.cjs")],
|
|
capture_output=True,
|
|
text=True,
|
|
encoding="utf-8",
|
|
timeout=60,
|
|
)
|
|
assert proc.returncode == 0, proc.stderr
|
|
return json.loads(proc.stdout)
|
|
|
|
|
|
def test_줄_차례_꼴():
|
|
page = _read("B07_DesignDetail_UI_Page.ts")
|
|
assert "frameRow.append(frameEditor.button);" in page
|
|
assert "actionRow.dataset.helpRow" in page
|
|
assert "actionRow.append(saveButton, resetButton);" in page
|
|
assert "actions.append(frameEditor.banner, frameRow, actionRow);" in page
|
|
reset = page[page.index("const resetButton = createButton({") :]
|
|
reset = reset[: reset.index("});")]
|
|
assert 'label: L("Common_Btn_Reset")' in reset
|
|
assert 'variant: "danger-ghost"' in reset
|
|
assert "resetDrawings(store)" in reset
|
|
save = page[page.index("const saveButton = createButton({") :]
|
|
save = save[: save.index("});")]
|
|
assert 'label: L("Common_Btn_Save")' in save
|
|
assert "saveDrawingsNow(store, refreshStages)" in save
|
|
assert "layout.setStages(state.stages)" in page
|
|
assert len(page.splitlines()) <= 700
|
|
|
|
|
|
def test_창구():
|
|
api = _read("B07_DesignDetail_Api_Fetch.ts")
|
|
block = api[api.index("export function resetDesignDrawings") :]
|
|
block = block[: block.index("}\n")]
|
|
assert "/projects/${projectId}/design-drawings/reset" in block
|
|
assert '{ method: "POST" }' in block
|
|
assert "body" not in block
|
|
|
|
|
|
def test_저장(out):
|
|
assert out["saveNone"] == {"calls": ["toast:info"], "saved": 0}
|
|
assert out["saveEdited"] == {
|
|
"calls": ["overlay+", "confirm:cross_s1", "overlay-", "toast:success"],
|
|
"saved": 1,
|
|
}
|
|
|
|
|
|
def test_초기화(out):
|
|
assert out["reset"] == [
|
|
"ask",
|
|
"overlay+",
|
|
"reset:p1",
|
|
"drop:OPEN_WEB_CAD__RECOVERY__cover",
|
|
"drop:OPEN_WEB_CAD__RECOVERY__cross_s1",
|
|
"toast:success",
|
|
"reload",
|
|
"overlay-",
|
|
]
|
|
assert out["resetCancel"] == ["ask"]
|
|
assert out["resetFail"] == ["ask", "overlay+", "reset:p1", "toast:error", "overlay-"]
|
|
assert out["resetFrame"] == ["toast:warning"]
|