Files
Auto-Finance/tests
wandering 7e900ebdea fix(requisition): 模板三级解析,空白模板入库,产物只写会话 artifacts
历史清洗删掉了根目录两份 低值易耗品申购*.xls——它们其实是**已填写的真实申购单**
(半导体型号、单价、项目名都在),不是模板;同时旧实现「项目根 glob 取名字最大者」会把
上一次生成的产物当模板,所以一并修掉:

- 新增 resolve_requisition_template():REQUISITION_TEMPLATE 环境变量 → templates/ → 项目根(兼容旧位置);
  环境变量指向不存在的文件时告警并继续回退,不静默失败
- 入库 templates/低值易耗品申购.xls 空白件(由旧文件删掉第 3 行起的全部内容得到,UsedRange 只剩 2 行:
  标题 + 表头;真实采购明细不进仓库)
- generate_requisition 默认输出改为 <会话>/artifacts/低值易耗品申购<ts>.xls,不再写模板旁边
- mcp/tools/documents.py 的 _find_template 改为复用同一解析函数,避免两处规则漂移
- 模块 docstring 与 CLI help 里 src/web/uploads 的过时示例改为 cases/
- tests:5 个纯单测覆盖解析优先级(env 优先 / templates 胜过根目录 / 根目录取最新 /
  env 指向不存在的文件时回退 / 全都没有时返回 None),不依赖 COM

验证:真实 Excel COM 端到端 2 项 → 产物 UsedRange 5 行(标题/表头/2 明细/合计),第 6 行起为空,
无旧明细残留;fill_requisition_excel 原本就会先删第 3 行起内容,这条也实测确认过。
门禁:ruff / format --check / mypy src / deptry 全绿,pytest 112 passed,mcp_smoke 17 工具。
2026-10-19 23:57:44 +08:00
..
2026-06-09 16:25:20 +08:00
2026-06-09 16:25:20 +08:00

last_reviewed
last_reviewed
2026-10-19

tests — 单元测试

pytest 运行(make test 带覆盖率)。当前 107 例。

文件 覆盖范围
test_config.py 配置加载:默认值、文件覆盖、环境变量优先级
test_invoice.py 发票常量、差旅判定、批量分类
test_matcher.py 金额匹配:容差、一对一、一对多贪心、未匹配、CSV 汇总构造
test_mcp_analysis.py MCP 分析工具:缓存分组、凑额复核、业务约束违反、无发票场景、save_info 剥离多余字段、
草稿不落盘、rules_get 形状、info_skeleton 与规则同源、骨架填满即通过
test_requisition.py 申购明细:品名清洗、规格猜测、发票号去重、关键词排除、项目名取值链与回退

不进单测的部分

  • Office COM(申购单):需要本机装有 Excel,改动后用真实生成验证(约 2-5 秒,产物单元格肉眼确认)
  • Playwright 填报:需要真实财务系统账号,手工验证
  • MCP wire 层:用 make mcp-smoke(真起 stdio 子进程握手、列工具、调一次 case_list)

测试不碰 cases/ 真实目录,一律用 tmp_path 造会话。