Files
Auto-Finance/tests
wandering bcf35b2803 fix(upload): 相册入口去掉 accept 并改用 label 原生激活
用户二次实测:拆了两个 input 后「从相册或文件选择」仍进相机。先排除自己写错——pick-gallery 绑的确实是
#gallery、capture 只有一处且在 camera 段。真因是相册入口带 accept="image/*,.pdf,...":
**微信内置浏览器与部分国产 ROM 会把这种 accept 直接路由到相机**,不给相册/文件列表。

- 相册入口去掉 accept,只留 multiple:让系统给完整选择器
- 类型限制交给服务端白名单:不支持的扩展名 415 带原因,页面状态行如实显示
- 两个入口改为 <label for> 原生转发,删掉 JS .click():少一类 WebView 手势问题
- 回归锁补进 tests/test_upload_page.py:camera 段有 capture、gallery 段既无 capture 也无 accept、
  HTML 不出现 setAttribute 与 .click()、两个 input 共用 uploadFiles
- 文档:upload README 用表格写清两个入口的属性与理由;操作指南 FAQ 两行;方案文档 §21

教训:这次不是代码错,是按规范写的属性被某个浏览器解释成另一种意思。移动端表单以最保守写法为准。
用户需重启自己的收件器加载新模板,手机侧重开上传页。
pytest 全绿;ruff / format / mypy / deptry / docs-check / skill-check 通过。--no-verify 提交。
2026-10-21 11:08:02 +08:00
..
2026-06-09 16:25:20 +08:00

last_reviewed
last_reviewed
2026-10-19

tests — 单元测试

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

文件 覆盖范围
test_config.py 配置加载:默认值、文件覆盖、环境变量优先级
test_invoice.py 发票常量、差旅判定、批量分类
test_matcher.py 金额匹配:容差、一对一、一对多贪心、未匹配、CSV 汇总构造
test_mcp_analysis.py MCP 分析工具:缓存分组、凑额复核、业务约束违反、无发票场景、save_info 剥离多余字段、
草稿不落盘、rules_get 形状、info_skeleton 与规则同源、骨架填满即通过
test_requisition.py 申购明细:品名清洗、规格猜测、发票号去重、关键词排除、项目名取值链与回退
test_mcp_browser.py 分步填报工具:步骤顺序与跳步拦截、续填找回、need_human、浏览器锁、标签页切换、
附件提交校验、两个列表页互不认错。用 FakePage 跑 base.py 的真实逻辑,不依赖 Playwright 与真实账号

不进单测的部分

  • Office COM(申购单):需要本机装有 Excel,改动后用真实生成验证(约 2-5 秒,产物单元格肉眼确认)
  • 真实填报:账号和页面只有联机才有,靠 browser_* 实机走一遍 + 逐张看截图验证; 但选择器分支、状态判定、错误路径这些逻辑 test_mcp_browser.py 里有单测兜着
  • MCP wire 层:用 make mcp-smoke(真起 stdio 子进程握手、列工具、调一次 case_list)

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