feat(M01): PLAN 3-4 복사해서 만들기 화면 — 별칭 꼴 식 편집·표 바꾸기·로직 부르기 갈래·시험 계산·저장
- 새 M01_MasterData_UI_LogicLab_Copy.ts — [본떠 만들기] → GET /logic/formula(별칭 폼) 편집 → 표 바꾸기 모달(소요량·계수 검색) · 로직 부르기 그대로/같이 복사 갈래 · 식 줄 고치기·덧줄 더하기 → POST /logic/formula/preview 로 되돌린 실제 식을 buildCalc 로 재사용해 시험 계산 → POST /logic/formula/save 로 자체 로직(GX) 저장 · afterSave 로 LogicLab 이 새 키를 바로 엶 - 서버: POST /logic/formula/preview 새로 더함(저장 없이 별칭만 원문으로 되돌림) · 계약 7장 반영 - LogicLab.ts 는 「본떠 만들기」 단추 한 줄만 붙임(정본 로직 화면·New 화면은 안 건드림) - ORCA 로 13-4-1 을 본떠 저장 — 안 고치면 79,279.668 로 원본과 같음 · 석공 줄 곱 2배로 고치면 131,716.728 로 바뀜 확인 · 시험 흔적(GX000001·로직_자체.json·키대장 GX 번호) 지움·되돌림 - 시험 `test_m01_copy.py` 에 미리보기 시험 둘 더함 · M01 시험 130 통과 · typecheck 통과
This commit is contained in:
@@ -182,6 +182,43 @@ def test_별칭_원문이_부르기가_아니면_막는다(client: TestClient) -
|
||||
assert "찾기" in str(got["detail"])
|
||||
|
||||
|
||||
def test_미리보기는_저장_없이_원문으로_되돌린_로직만_준다(client: TestClient) -> None:
|
||||
"""3-4 화면의 [시험 계산] 이 쓰는 길 — `/calc` 의 `row`+`file` 로 그대로 넣어 씀."""
|
||||
inputs = _inputs(STACK)
|
||||
was = _sums(client, STACK, inputs)
|
||||
|
||||
view = _get(client, "/api/m01/logic/formula", key=STACK)
|
||||
before_keys = _get(client, "/api/m01/logics")["logics"]
|
||||
preview = _post(
|
||||
client, "/api/m01/logic/formula/preview", {"로직": view["로직"], "별칭": view["별칭"]}
|
||||
)
|
||||
resolved = preview["logic"]["호표"][0]["수량"]
|
||||
assert resolved == "찾기(QF000421, 뒷길이=뒷길이, 돌=돌, 쌓기=쌓기).석공 * (1 + 증가율 / 100)"
|
||||
after_keys = _get(client, "/api/m01/logics")["logics"]
|
||||
assert after_keys == before_keys # 아무것도 저장 안 함
|
||||
|
||||
calc = _post(
|
||||
client,
|
||||
"/api/m01/calc",
|
||||
{"key": STACK, "inputs": inputs, "row": preview["logic"], "file": view["file"]},
|
||||
)
|
||||
assert calc["ok"], calc
|
||||
assert Decimal(str(calc["sums"]["계"])) == Decimal(str(was["계"]))
|
||||
|
||||
|
||||
def test_미리보기도_별칭_원문이_부르기가_아니면_막는다(client: TestClient) -> None:
|
||||
view = _get(client, "/api/m01/logic/formula", key=STACK)
|
||||
marks = [{**one} for one in view["별칭"]]
|
||||
marks[0]["원문"] = "아무거나"
|
||||
got = _post(
|
||||
client,
|
||||
"/api/m01/logic/formula/preview",
|
||||
{"로직": view["로직"], "별칭": marks},
|
||||
want=400,
|
||||
)
|
||||
assert "찾기" in str(got["detail"])
|
||||
|
||||
|
||||
def test_정본_로직은_이_길로도_안_바뀐다(client: TestClient) -> None:
|
||||
"""저장은 늘 새 자체 로직(`GX`) — 본뜬 원본 파일은 판본까지 그대로."""
|
||||
before = _get(client, "/api/m01/logic", key=STACK)
|
||||
|
||||
Reference in New Issue
Block a user