53 行
2.1 KiB
TypeScript
53 行
2.1 KiB
TypeScript
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);
|
|
});
|
|
});
|
|
});
|