Files
ZYZ/game-server/test/chat.test.ts
2021-03-11 17:27:37 +08:00

383 lines
14 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { DEFAULT_MSG_PER_PAGE, MSG_TYPE, ON_PRIVATE_MSG_ROUTE, ON_GROUP_MSG_ROUTE, CHANNEL_PREFIX, DEBUG_MAGIC_WORD, STATUS, HERO_GROW_MAX, ABI_STAGE } 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 XIAHOUQINGYI_HID = 53;
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);
}
// function testHeroPush(pinusClient: PinusWSClient, pinusClientT: PinusWSClient, hid: number, route: string, routeParam: object, done: Mocha.Done) {
// 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 }, (cleanUpRes) => {
// if (cleanUpRes.code !== STATUS.HERO_NOT_FIND.code) {
// checkSuccessResponse(cleanUpRes, false);
// }
// pinusClient.request(route, routeParam, (composeRes) => {
// checkSuccessResponse(composeRes);
// setTimeout(() => {
// expect(msgReceiveCnt).to.be.equal(2);
// done();
// }, 1000);
// });
// });
// }
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_PRIVATE_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.targetRoleId).to.be.a('string');
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() {
function checkChatInfos(roleInfo) {
const chatInfos = roleInfo.recentPrivateChats;
if (!chatInfos) {
console.warn(`用户${roleInfo.roleName}没有最近的私聊信息`);
return;
}
for (let chatInfo of chatInfos) {
expect(chatInfo.targetRoleId).to.be.a('string');
expect(chatInfo.targetRoleName).to.be.a('string');
expect(Date.parse(chatInfo.lastChatTime)).to.be.a('number');
expect(Date.parse(chatInfo.lastReadTime)).to.be.a('number');
expect(chatInfo.unreadCnt).to.be.a('number');
}
}
checkChatInfos(roleInfo);
checkChatInfos(roleInfoT);
});
it('最近群聊的消息', function() {
function checkMsgs(msgs, roleName) {
expect(msgs).to.be.an('array');
if (msgs.length === 0) {
console.warn(`用户${roleName}缺少群消息`);
}
for (let msg of msgs) {
expect(msg.roleId).to.be.a('string');
expect(msg.roleName).to.be.a('string');
expect(msg.content).to.be.a('string');
expect(msg.roomId).to.be.a('string');
}
}
function checkAllGroupMsgs(roleInfo) {
checkMsgs(roleInfo.sysMsgs, roleInfo.roleName);
checkMsgs(roleInfo.worldMsgs, roleInfo.roleName);
checkMsgs(roleInfo.guildMsgs, roleInfo.roleName);
}
checkAllGroupMsgs(roleInfo);
checkAllGroupMsgs(roleInfoT);
});
it('测试系统频道橙将合成消息', function(done) {
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);
});
});
});
it('测试系统频道升六星消息', function(done) {
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: XIAHOUQINGYI_HID }, (cleanUpRes) => {
if (cleanUpRes.code !== STATUS.HERO_NOT_FIND.code) {
checkSuccessResponse(cleanUpRes, false);
}
pinusClient.request('role.heroHandler.compose', { hid: XIAHOUQINGYI_HID }, (composeRes) => {
checkSuccessResponse(composeRes);
for (let i = 2; i <= HERO_GROW_MAX.STAR; i++) {
for (let j = 0; j < ABI_STAGE.END; j++) {
setTimeout(() => {
pinusClient.request('role.heroHandler.starUp', {hid: XIAHOUQINGYI_HID, star: i, starStage: j}, (starUpRes) => {
if (starUpRes.code === STATUS.ROLE_STAR_REACH_MAX.code) {
expect(msgReceiveCnt).to.be.equal(2);
done();
} else {
checkSuccessResponse(starUpRes);
}
});
}, 50 * (i - 2) * ABI_STAGE.END + 50 * j);
}
}
});
});
});
it('测试系统频道升品消息', function(done) {
let msgReceiveCnt = 0;
function checkHeroInfoRes(res) {
checkSuccessResponse(res);
checkHeroInfoStr(res.data.content);
msgReceiveCnt += 1;
}
pinusClientT.on(ON_GROUP_MSG_ROUTE, (res) => {
checkHeroInfoRes(res);
});
pinusClient.on(ON_GROUP_MSG_ROUTE, (res) => {
checkHeroInfoRes(res);
});
pinusClient.request('role.heroHandler.testCleanUp', { magicWord: DEBUG_MAGIC_WORD, hid: XIAHOUQINGYI_HID }, (cleanUpRes) => {
if (cleanUpRes.code !== STATUS.HERO_NOT_FIND.code) {
checkSuccessResponse(cleanUpRes, false);
}
pinusClient.request('role.heroHandler.compose', { hid: XIAHOUQINGYI_HID }, (composeRes) => {
checkSuccessResponse(composeRes);
for (let i = 2; i <= HERO_GROW_MAX.STAR; i++) {
for (let j = 0; j < ABI_STAGE.END; j++) {
setTimeout(() => {
if (i === HERO_GROW_MAX.STAR && j > 0) {
} else {
pinusClient.request('role.heroHandler.starUp', {hid: XIAHOUQINGYI_HID, star: i, starStage: j}, (starUpRes) => {
if (starUpRes.code === STATUS.ROLE_STAR_REACH_MAX.code) {
expect(msgReceiveCnt).to.be.equal(2);
msgReceiveCnt = 0;
pinusClient.request('role.heroHandler.qualityUp', {hid: XIAHOUQINGYI_HID, quality: 2}, (qualityUpRes) => {
checkSuccessResponse(qualityUpRes);
setTimeout(() => {
expect(msgReceiveCnt).to.be.equal(2);
done();
}, 1000);
});
} else {
checkSuccessResponse(starUpRes);
}
});
}
}, 50 * (i - 2) * ABI_STAGE.END + 50 * j); // 50ms 为间隔,避免并发导致的连续升星失败
}
}
});
});
});
it('测试世界频道消息', function(done) {
testGroupMsg(pinusClient, roleInfo, pinusClientT, CHANNEL_PREFIX.WORLD, roleInfo.serverId, done);
});
it('测试军团频道消息', function(done) {
testGroupMsg(pinusClient, roleInfo, pinusClientT, CHANNEL_PREFIX.GUILD, roleInfo.guildCode, done);
});
it('测试军团通知修改推送', function(done) {
const newNotice = new Date().toLocaleDateString();
let msgReceiveCnt = 0;
function checkNoticeRes(res) {
checkSuccessResponse(res);
expect(res.data.content).to.be.equal(newNotice);
msgReceiveCnt += 1;
}
pinusClientT.on(ON_GROUP_MSG_ROUTE, (res) => {
checkNoticeRes(res);
});
pinusClient.on(ON_GROUP_MSG_ROUTE, (res) => {
checkNoticeRes(res);
});
pinusClient.request('battle.guildHandler.getMyGuildInfo', { }, (res) => {
checkSuccessResponse(res);
expect(res.data).to.have.deep.property('hasGuild').that.is.an('boolean');
if(res.data.hasGuild) {
expect(res.data).to.have.deep.property('code').that.is.an('string');
expect(res.data).to.have.deep.property('name').that.is.an('string');
expect(res.data).to.have.deep.property('notice').that.is.an('string');
expect(res.data).to.have.deep.property('introduce').that.is.an('string');
expect(res.data).to.have.deep.property('ceLimit').that.is.an('number');
expect(res.data).to.have.deep.property('isAuto').that.is.an('boolean');
const { code, name, notice, introduce, ceLimit, isAuto } = res.data;
pinusClient.request('battle.guildHandler.setGuildInfo', { code, name, notice: newNotice, introduce, ceLimit, isAuto }, (setRes) => {
checkSuccessResponse(setRes);
expect(setRes.data.notice).to.be.equal(newNotice);
setTimeout(() => {
expect(msgReceiveCnt).to.be.equal(2);
done();
}, 50);
});
}
});
});
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(() => {
pinusClientT.request('chat.chatHandler.readPrivateMessage', {targetRoleId: roleInfo.roleId}, (res) => {
checkSuccessResponse(res);
expect(res.data).to.be.an('object');
expect(res.data.targetRoleId).to.be.equal(roleInfo.roleId);
expect(Date.parse(res.data.lastReadTime)).to.be.above(Date.parse(res.data.lastChatTime));
expect(res.data.unreadCnt).to.be.equal(0);
done();
});
}, 1000);
});
it('举报消息', function(done) {
pinusClient.request('chat.chatHandler.accuse', {targetRoleId: roleInfoT.roleId, targetMsgCode: 'test', reason: 1}, (res) => {
checkSuccessResponse(res);
expect(res.data).to.be.an('object');
expect(res.data.roleId).to.be.equal(roleInfo.roleId);
expect(res.data.targetRoleId).to.be.equal(roleInfoT.roleId);
expect(res.data.targetMsgCode).to.be.equal('test');
done();
});
});
});