Files
Aislo/resources/tester/test_est_forms_library.py
T
eomsangdonandClaude Opus 5.5 26a18a1709 feat(est-test): 원가계산서 사용자 양식 등록·목록·열기
- 서버 보관함 data/forms.json 에 원가계산서 양식 등록·삭제·목록
- 양식 열기·파일 내려받기/불러오기, 금액 제외하고 열 때 다시 계산

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 19:24:21 +09:00

57 lines
2.5 KiB
Python

"""EST 테스트 앱 사용자 양식 보관함(원본 양식목록 등록·삭제·열기)."""
import json
import subprocess
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
def node(script: str, *args: str):
out = subprocess.check_output(["node", "-e", script, *args], cwd=ROOT)
return json.loads(out.decode("utf-8"))
def test_store_saves_replaces_lists_and_deletes(tmp_path):
result = node(
"""
const f = require('./tools/est-test/forms-store.cjs'), dir = process.argv[1];
const errors = [];
const t = (fn) => { try { fn(); errors.push('ok'); } catch (e) { errors.push(e.message.slice(0, 6)); } };
f.save(dir, { kind: 'wonga', name: '회사 기본', data: [{ Name: 'a' }] });
f.save(dir, { kind: 'wonga', name: '회사 기본', data: [{ Name: 'b' }] });
f.save(dir, { kind: 'document', name: '표지', form: 1, data: 'x' });
const listed = f.read(dir).map((x) => [x.kind, x.name, x.data]);
t(() => f.save(dir, { kind: 'bad', name: 'x', data: 1 }));
t(() => f.save(dir, { kind: 'wonga', name: ' ', data: 1 }));
t(() => f.save(dir, { kind: 'wonga', name: 'x' }));
t(() => f.remove(dir, 'wonga', '없는 양식'));
f.remove(dir, 'wonga', '회사 기본');
process.stdout.write(JSON.stringify({ listed, errors, left: f.read(dir).map((x) => x.name) }));
""",
str(tmp_path),
)
assert result["listed"] == [["wonga", "회사 기본", [{"Name": "b"}]], ["document", "표지", "x"]]
assert [e[:5] for e in result["errors"]] == ["양식 종류", "양식 이름", "양식 내용", "지울 양식"]
assert result["left"] == ["표지"]
def test_template_drops_amounts_and_rejects_bad_rows():
result = node(
"""
const fs = require('fs'), vm = require('vm');
const ctx = vm.createContext({ structuredClone });
vm.runInContext(fs.readFileSync('tools/est-test/native-forms-library.js', 'utf8'), ctx);
const out = vm.runInContext(`(() => {
const rows = EstFormsLibrary.strip([{ Gubun: 'N', Name: '직접 노무비', Cost: 100, VSusic: 'N' }]);
const errors = [];
for (const bad of [[], null, [1]]) { try { EstFormsLibrary.validRows(bad); } catch (e) { errors.push(e.message.slice(0, 9)); } }
return { rows, errors, other: EstFormsLibrary.handle('other', {}, null) };
})()`, ctx);
process.stdout.write(JSON.stringify(out));
"""
)
assert result["rows"] == [{"Gubun": "N", "Name": "직접 노무비", "VSusic": "N"}]
assert len(result["errors"]) == 3
assert result["other"] is False