import { DEFAULT_MSG_PER_PAGE, MSG_TYPE, ON_MSG_ROUTE, ON_GROUP_MSG_ROUTE, CHANNEL_PREFIX, DEBUG_MAGIC_WORD, STATUS } from './../app/consts'; import { Client } from './Client'; import 'mocha'; import { PinusWSClient } from 'pinus-robot-plugin'; import { expect } from 'chai'; import { checkSuccessResponse } from './CheckPatten'; const TEXT_MSG = {type: MSG_TYPE.TEXT, content: 'hello world'} const LVBU_HID = 44; const LVBU_PIECE_ID = 21044; function sendPrivateMessageParm(targetRoleInfo, msg) { const { roleId: targetRoleId, roleName: targetRoleName } = targetRoleInfo; const result = {targetRoleId, targetRoleName, ...msg}; return result; } function sendGroupMessageParm(channel, channelId, msg) { const result = {channel, channelId, ...msg}; return result; } function checkGroupMsg(msg, roleId, roomId, content) { expect(msg.roleId).to.equal(roleId); expect(msg.content).to.equal(content); expect(msg.roomId).to.equal(roomId); } function checkHeroInfoStr(content: string) { expect(content).to.be.a('string'); const heroInfo = JSON.parse(content); expect(heroInfo).to.be.an('object'); const { roleId, roleName, hero } = heroInfo; expect(roleId).to.be.a('string'); expect(roleName).to.be.a('string'); const { hid, seqId, hName } = hero; expect(hid).to.be.a('number'); expect(seqId).to.be.a('number'); expect(hName).to.be.a('string'); } function testGroupMsg(pinusClient: PinusWSClient, roleInfo: any, pinusClientT: PinusWSClient, channel: string, channelId: string, done: Mocha.Done) { let msgReceiveCnt = 0; const roomId = `${channel}_${channelId}`; pinusClientT.on(ON_GROUP_MSG_ROUTE, (res) => { checkSuccessResponse(res); checkGroupMsg(res.data, roleInfo.roleId, roomId, TEXT_MSG.content); msgReceiveCnt += 1; }); pinusClient.on(ON_GROUP_MSG_ROUTE, (res) => { checkSuccessResponse(res); checkGroupMsg(res.data, roleInfo.roleId, roomId, TEXT_MSG.content); msgReceiveCnt += 1; }); setTimeout(() => { pinusClient.request('chat.chatHandler.sendGroupMessage', sendGroupMessageParm(channel, channelId, TEXT_MSG), (res) => { checkSuccessResponse(res, false); setTimeout(() => { expect(msgReceiveCnt).to.be.equal(2); done(); }, 1000); }); }, 100); } describe('聊天测试', function() { let pinusClient: PinusWSClient; let pinusClientT: PinusWSClient; // 用做测试队友 let roleInfo; let roleInfoT; beforeEach(function(done) { const c = new Client(); const cT = new Client('13121622738'); const timer = setInterval(() => { if (c.client && cT.client) { pinusClient = c.client; roleInfo = c.roleInfo; pinusClientT = cT.client; roleInfoT = cT.roleInfo; clearInterval(timer); done(); } }, 500); }); afterEach(function(done) { pinusClient.disconnect(); pinusClientT.disconnect(); // disconnect 后等待 500ms,供服务器清理环境、退出频道等 setTimeout(() => { done(); }, 500); }); it('两个玩家互相发送', function(done) { pinusClientT.on(ON_MSG_ROUTE, (msg) => { checkSuccessResponse(msg); expect(msg.data.content).to.equal(TEXT_MSG.content); done(); }); pinusClient.request('chat.chatHandler.sendPrivateMessage', sendPrivateMessageParm(roleInfoT, TEXT_MSG), (res) => { checkSuccessResponse(res); expect(res.data.content).to.equal(TEXT_MSG.content); }); }); it('获取私聊历史消息', function(done) { for (let i = 0; i < DEFAULT_MSG_PER_PAGE; i++) { pinusClient.request('chat.chatHandler.sendPrivateMessage', sendPrivateMessageParm(roleInfoT, TEXT_MSG), (res) => { checkSuccessResponse(res); expect(res.data.content).to.equal(TEXT_MSG.content); }); } setTimeout(() => { pinusClient.request('chat.chatHandler.getPrivateMessage', {targetRoleId: roleInfoT.roleId}, (res) => { checkSuccessResponse(res); expect(res.data.msgs).to.be.an('array'); expect(res.data.msgs.length).to.be.equal(DEFAULT_MSG_PER_PAGE); res.data.msgs.forEach(msg => { expect(msg.content).to.equal(TEXT_MSG.content); }); done(); }) }, 1000); }); it('测试系统频道橙将合成消息', function(done) { const roomId = `${CHANNEL_PREFIX.SYS}_${roleInfo.serverId}`; let msgReceiveCnt = 0; pinusClientT.on(ON_GROUP_MSG_ROUTE, (res) => { checkSuccessResponse(res); checkHeroInfoStr(res.data.content); msgReceiveCnt += 1; }); pinusClient.on(ON_GROUP_MSG_ROUTE, (res) => { checkSuccessResponse(res); checkHeroInfoStr(res.data.content); msgReceiveCnt += 1; }); pinusClient.request('role.heroHandler.testCleanUp', { magicWord: DEBUG_MAGIC_WORD, hid: LVBU_HID }, (cleanUpRes) => { if (cleanUpRes.code !== STATUS.HERO_NOT_FIND.code) { checkSuccessResponse(cleanUpRes, false); } pinusClient.request('role.heroHandler.compose', { hid: LVBU_HID }, (composeRes) => { checkSuccessResponse(composeRes); setTimeout(() => { expect(msgReceiveCnt).to.be.equal(2); done(); }, 1000); }); }); }); // TODO: 升品推送测试 it('测试系统频道升品消息', function(done) { done(); }); it('测试世界频道消息', function(done) { testGroupMsg(pinusClient, roleInfo, pinusClientT, CHANNEL_PREFIX.WORLD, roleInfo.serverId, done); }); });