文件
shanghaipeiwan/server/tests/auth-role.spec.ts

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);
});
});
});