"""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