Skip to content

test: 补齐 PR #107 引入的 7 个文件的测试覆盖 #111

@ylytdeng

Description

@ylytdeng

背景

PR #107 (commit b986413) 合并了 5649 行新代码 + 13 个新文件,但 `tests/` 下只新增了 1 个测试 `tests/test_wxwork_crypto.py`,覆盖率严重不足。

缺测试的文件

文件 行数 应覆盖的核心逻辑
`decrypt_sns.py` 272 V1/V2/XOR 解密分发、`_safe_dirname`、format detect
`export_sns.py` 820 `_parse_timeline_xml` (含 XXE 防护 e5e2269)、`_match_local_cache` mtime±72h 窗口、AES 对齐
`export_messages.py` 713 `MSG_TYPES` 映射、SQL 表名白名单校验、CSV/HTML/JSON 三种格式输出、sender 解析
`export_wxwork_messages.py` 745 `decode_content` (protobuf 字符串嗅探)、`_name_from_conversation_id` (S:/R: 前缀)、_looks_like_plain_text 启发式
`decrypt_wxwork_db.py` 176 key 加载 (`wxwork_keys.json` / `--key` 两种路径)、plain SQLite 跳过逻辑
`voice_to_mp3.py` 133 SILK 解码、ffmpeg 调用错误处理
`batch_decrypt_images.py` 181 已复用 `decode_image.decode_all_dats` ✓ 但 CLI 参数解析无测试

最低限度的测试范围(优先级排序)

P0:safety / 已发现 bug 守护

  • `export_sns._parse_timeline_xml` XXE 防护回归(DOCTYPE / ENTITY 应被拒)
  • `aligned_aes_block_size` 三处调用的等价性(已在 e5e2269 commit message 验证,但应该写成单测)
  • `wxwork_keys.json` 落盘后 `os.stat().st_mode & 0o777 == 0o600` (POSIX 平台跳过 Windows)

P1:核心解码路径

  • `decode_content` 对已知 protobuf payload 能解出明文
  • `_name_from_conversation_id` S:xxxxx → '某某' 映射正确(fixture 用合成 user.db)
  • `MSG_TYPES` 跟 `mcp_server._MSG_TYPE_MAP` 不漂移(同 key 同值)

P2:CLI 输入边界

  • `batch_decrypt_images` --force / 默认跳过已存在 / 无 key 时 V2 skipped_no_key
  • `voice_to_mp3` ffmpeg 不在 PATH 时给友好错误

Acceptance

  • 7 个新 test 文件(每个对应一个 source 文件)
  • 每个 test 文件至少 3 个 case
  • `pytest tests/ -q` 通过数 ≥ 220 (现在 185)

相关

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions