import { AuthRoleManager, UserRoleFlag, WorkMode, CertStatus } from '../src/core/auth/auth-role.manager'; describe('AuthRoleManager (TDD 测试套件: 用户与大神双身份平滑切换)', () => { let roleManager: AuthRoleManager; beforeEach(() => { roleManager = new AuthRoleManager(); }); describe('1. 玩家与大神身份校验', () => { it('普通注册用户默认仅具备玩家身份', () => { const user = roleManager.registerUser({ openid: 'wx_123456', nickname: '新手玩家' }); expect(user.roleFlags).toBe(UserRoleFlag.PLAYER); expect(user.currentMode).toBe(WorkMode.PLAYER); }); it('普通玩家尝试直接切换至大神接单模式应被拒绝', () => { const user = roleManager.registerUser({ openid: 'wx_123456', nickname: '新手玩家' }); expect(() => { roleManager.switchMode(user.id, WorkMode.EXPERT); }).toThrow('尚未开通或通过大神认证,无法切换至接单模式'); }); }); describe('2. 认证开通与双身份平滑切换', () => { it('完成实名认证审核通过后,赋予双身份并允许自由切换', () => { const user = roleManager.registerUser({ openid: 'wx_expert_001', nickname: '电竞大神' }); // 提交实名认证 roleManager.submitExpertCert(user.id, { realName: '张三', idCardNo: '520100...' }); expect(roleManager.getCertStatus(user.id)).toBe(CertStatus.PENDING); // 后台审核通过 roleManager.approveExpertCert(user.id); expect(roleManager.getCertStatus(user.id)).toBe(CertStatus.APPROVED); // 检查角色位图已升级为 BOTH (玩家+大神) const updatedUser = roleManager.getUser(user.id); expect(updatedUser.roleFlags).toBe(UserRoleFlag.PLAYER | UserRoleFlag.EXPERT); // 切换至大神模式 roleManager.switchMode(user.id, WorkMode.EXPERT); expect(roleManager.getUser(user.id).currentMode).toBe(WorkMode.EXPERT); // 一键切回玩家模式 roleManager.switchMode(user.id, WorkMode.PLAYER); expect(roleManager.getUser(user.id).currentMode).toBe(WorkMode.PLAYER); }); }); });