import assert from "node:assert/strict"; import test from "node:test"; import { extractApprovalListMetadata } from "../src/approval-metadata.js"; test("approval metadata normalizes official instance identity, time, amount, and summary", () => { const metadata = extractApprovalListMetadata({ originatorUserName: "测试用户丁", originatorUserId: "user-bin", originatorDeptName: "销售部", createTime: 1_786_179_600_000, formComponentValues: [ { name: "报销金额", value: "¥4,812.00" }, { name: "报销事由", value: "客户现场出差" }, { name: "银行卡号", value: "6222000012345678" }, ], }); assert.deepEqual(metadata, { applicantName: "测试用户丁", applicantUserId: "user-bin", applicantDepartment: "销售部", submittedAt: new Date(1_786_179_600_000).toISOString(), amount: 4812, currency: "CNY", summary: "客户现场出差", }); assert.doesNotMatch(JSON.stringify(metadata), /6222000012345678/); }); test("approval metadata falls back to todo form summaries and chooses total amount", () => { const metadata = extractApprovalListMetadata({ forms: [ { title: "发起人", content: "测试用户戊" }, { title: "部门", content: "产品部" }, { title: "单项费用", content: "100" }, { title: "合计金额", content: "USD 1,234.50" }, { title: "申请原因", content: "采购测试设备" }, ], }); assert.equal(metadata.applicantName, "测试用户戊"); assert.equal(metadata.applicantDepartment, "产品部"); assert.equal(metadata.amount, 1234.5); assert.equal(metadata.currency, "USD"); assert.equal(metadata.summary, "采购测试设备"); }); test("approval metadata can derive the applicant from a standard DingTalk title", () => { assert.equal( extractApprovalListMetadata({ title: "测试用户甲提交的通用费用报销_北极大" }).applicantName, "测试用户甲", ); });