2.3 KiB
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 不访问企微。
验证覆盖:
- 仅许可
XuKe启用时,update 精确发送user_list=[XuKe]和department_list=[],随后 GET 校验并保存真实返回范围。 - GET 仍含旧医助或非空部门时失败,保留失败原因、原已确认版本和重试计划;本地下线状态保持不变。
- 接口异常保留原已确认远端快照及重试退避。
- 活跃租约不会被抢占或误报已同步;GET 期间版本变化、租约过期或被新工作接管均返回 pending;旧工作不能覆盖新快照。
- 重算不会把过期租约、未应用版本或残留部门误置为已同步。
- 显式重试可修复旧 pending、失败退避以及开关未变化的状态,并准确返回 synced / pending / failed / blocked。
- 实际批量下线两个旧医助后,真实队列服务仅同步 XuKe;重复选择已下线医助仍会重新排队。
- 实际单独下线遇到活跃工作时返回 pending,过期后可重试完成。
- 单独和批量下线都保持至少一名可用医助;空可用范围不会向企微发送空列表。
- 已分配共享操作人可重试自己的方案;无关账号被拒绝;删除中或删除失败的方案不会被同步操作复活。
最终运行已删除测试数据库、关闭临时 MySQL 进程并移除临时 datadir。未访问线上企微,也未验证真实租户接口权限或实际远端数据;该报告证明本地同步与状态机回归通过。