test: 集成测试改用真 LLDAP 容器;修复两处物化缺陷

- 集成测试重构:syncer e2e/materialize、ldaplib 读路径、lldapgql 全改用本地
  LLDAP 容器(LDAP 3890 / GraphQL /api/graphql 17170),删旧 OpenLDAP 断言
- 修复 1:ActiveUsers 不填 DepartmentIDs(存于关系表),BuildFromMirror 拿到空成员;
  新增 ActiveUsersWithDepts,物化 plan 用之
- 修复 2:deleted 用户重新可见后不回 active,无法重建;RevertToActive 纳入 deleted,
  快照 reconcile 对其置回 active + 作废 token
- 关键安全回归单测保留并配变异验证:未确认不删、非受管不删、admin 永不移出、
  删除最后阶段、绝不碰密码。全量单测+vet+集成全绿
This commit is contained in:
2026-09-29 23:53:24 +08:00
parent 126e52a6ed
commit 0fffdd5ccb
7 changed files with 459 additions and 789 deletions
+2 -2
View File
@@ -175,11 +175,11 @@ func TestStateMachine(t *testing.T) {
if err := st.ToPendingConfirm("alice"); err == nil {
t.Errorf("deleted 状态的用户应无法转 pending_confirm,却成功了")
}
// deleted 后 revert 不应生效(已物理删除,不能回退,交给「重建」处理)。
// 已删除用户重新在飞书可见:revert 置回 active(重新入职/重建)。
if err := st.RevertToActive("alice"); err != nil {
t.Fatalf("RevertToActive 不应报错: %v", err)
}
assertState(t, st, "alice", StateDeleted)
assertState(t, st, "alice", StateActive)
// 双确认流程内可回退(重新入职)。
if err := st.ReplaceMirror(&MirrorSnapshot{