Files
zyt/artifacts/wecom-member-sync/backend-tests.md
T
2026-09-09 12:18:17 +08:00

2.3 KiB

企微成员范围同步回归验证

2026-09-09 验证通过:24 个场景,52 个断言,0 失败

  • 测试:server/tests/WecomPromotionMemberSyncTest.php
  • 启动脚本:artifacts/wecom-member-sync/run-backend-tests.ps1
  • 完整输出:artifacts/wecom-member-sync/backend-test-output.log
  • 环境:PHP 8.2.9、独立 MySQL 5.7.26、真实 Think ORM 与事务。

运行命令(仓库根目录):

& ./artifacts/wecom-member-sync/run-backend-tests.ps1

启动脚本使用随机空闲回环端口、--no-defaults 和独立临时 datadir;测试另建随机 wecom_member_test_* 数据库。测试仅加载 vendor、框架辅助函数、未初始化的 think\App 及显式测试 DB 配置,不读取业务数据库配置或 .env。测试使用部署 SQL 中的真实建表定义,API fake 不访问企微。

验证覆盖:

  1. 仅许可 XuKe 启用时,update 精确发送 user_list=[XuKe]department_list=[],随后 GET 校验并保存真实返回范围。
  2. GET 仍含旧医助或非空部门时失败,保留失败原因、原已确认版本和重试计划;本地下线状态保持不变。
  3. 接口异常保留原已确认远端快照及重试退避。
  4. 活跃租约不会被抢占或误报已同步;GET 期间版本变化、租约过期或被新工作接管均返回 pending;旧工作不能覆盖新快照。
  5. 重算不会把过期租约、未应用版本或残留部门误置为已同步。
  6. 显式重试可修复旧 pending、失败退避以及开关未变化的状态,并准确返回 synced / pending / failed / blocked。
  7. 实际批量下线两个旧医助后,真实队列服务仅同步 XuKe;重复选择已下线医助仍会重新排队。
  8. 实际单独下线遇到活跃工作时返回 pending,过期后可重试完成。
  9. 单独和批量下线都保持至少一名可用医助;空可用范围不会向企微发送空列表。
  10. 已分配共享操作人可重试自己的方案;无关账号被拒绝;删除中或删除失败的方案不会被同步操作复活。

最终运行已删除测试数据库、关闭临时 MySQL 进程并移除临时 datadir。未访问线上企微,也未验证真实租户接口权限或实际远端数据;该报告证明本地同步与状态机回归通过。