"""decode_image.decode_all_dats() batch CLI 行为测试。 覆盖: - 路径扫描:glob 命中 attach///Img/*.dat - 路径解析:chat_hash / YYYY-MM 提取,_t / _h 后缀移除归并到原图 basename - 幂等性:目标 basename 已存在(任何扩展名)时跳过;--force 强制重解 - 原子写:写到 tmp 再 os.replace;失败/异常路径不留 .tmp - V2 无 key:计入 skipped_no_key 而非 failed - 错误隔离:单文件异常不阻塞批次;返回失败计数 decrypt_dat_file 用 mock 隔离(避免依赖真实加密图片);is_v2_format 单独覆盖真实 magic 检测路径。 """ import os import struct import tempfile import unittest from contextlib import redirect_stderr import io from unittest.mock import patch import decode_image def _write(path, data): os.makedirs(os.path.dirname(path), exist_ok=True) with open(path, "wb") as f: f.write(data) def _v2_magic_bytes(): # 仅用于让 is_v2_format() 返回 True return decode_image.V2_MAGIC_FULL + struct.pack("