2.7 KiB
2.7 KiB
IM 归档行为测试交付
新增 server/tests/ImChatArchiveTest.php,直接加载实际 DiagnosisLogic、ImRoamMessagePager 和 ImChatSyncSession。只替换模型、Db、Cache、时钟和腾讯服务传输层;没有改动业务实现。
覆盖
- 同患者新旧诊单读取同一归档,返回当前授权诊单 ID;其他患者和历史错误
patient_id对应的异常账号记录不会混入。 - callback 的
MsgTime/MsgKey与 roam 的MsgTimeStamp/MsgRandom/MsgKey生成同一 canonical ID,重复到达不重复归档、不改变原诊单归属。 - callback 必须有整数
SendMsgResult;发送失败跳过,缺失或非法类型抛错。 - 旧
seq_random_from键只在患者、双向账号、时间都一致时兼容。其他患者、错误账号或不同时间的旧键碰撞不会覆盖原记录,也不会压掉正确的新消息。 - 多元素消息保存 text/image/file 完整顺序并读回
parts;匹配的旧截断消息修复内容但保留旧键和原始诊单;重复修复幂等,其他患者不变,修复写库失败向上传播。 - current 范围只使用当前管理员账号;token 精确绑定 admin/diagnosis/patient。换登录人、换诊单、换患者、非法或过期 token 都无法请求腾讯云或修改缓存进度。
- 医生侧和患者侧分别完整分页,共享相同扫描下界并交换 operator/peer;共享消息幂等,患者侧独有记录仍入库。
- 只有所有页面持久化且双方视角都成功,才写该医生/患者的完整 checkpoint;值为扫描开始时间。首次下界为 0,下次双方使用完整 checkpoint 减 120 秒。
- 医生侧或患者侧失败都保留旧 checkpoint;医生侧失败仍尝试患者侧,下一轮从原下界补拉并去重。
- 单页数据库失败不推进缓存游标,不写完成 checkpoint,原 token 可以原游标重试。81 条消息跨两个 SQL 批次时,第二批失败不会发布完成状态,下一轮补齐且不重复第一批 80 条。
- callback 和 CLI 同步均不吞写库错误;纯 Session 的双侧切换、其他会话继续处理、失败可见及归档失败传播也有独立断言。
运行结果
php server/tests/ImChatArchiveTest.php
IM_CHAT_ARCHIVE_TEST_OK
php -l server/tests/ImChatArchiveTest.php
No syntax errors detected
测试不会初始化 ThinkPHP 应用环境。模型和 SQL 使用严格内存替身,意外表、SQL 及更新字段会失败;腾讯服务只消费预置响应,没有网络能力。未访问业务数据库、未执行迁移、未产生真实回调或消息。
本测试验证业务方法与分页/持久化边界,不替代真实 MySQL 部署验收。未发现需要额外修改的业务问题,未提交。