Files
ZYZ/game-server/test/gvgBattle.test.ts
2023-09-20 20:05:00 +08:00

350 lines
11 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 { DEBUG_MAGIC_WORD } from '../../shared/consts';
import { GVGTeamType } from './../../shared/db/GVGTeam';
import { GVGUserDataType } from './../../shared/db/GVGUserData';
import { LineupHero } from './../../shared/domain/roleField/hero';
import { Client } from './Client';
import 'mocha';
import { PinusWSClient } from 'pinus-robot-plugin';
import { expect } from 'chai';
import { checkSuccessResponse } from './CheckPatten';
import { GVGHeroInfo } from '../../shared/domain/dbGeneral';
describe('gvg激战期测试', function () {
let pinusClient: PinusWSClient;
let roleInfo;
before(function (done) {
const c = new Client();
const timer = setInterval(() => {
if (c.client && c.roleInfo) {
pinusClient = c.client;
roleInfo = c.roleInfo;
clearInterval(timer);
done();
}
}, 500);
});
after(function (done) {
pinusClient.disconnect();
// disconnect 后等待 500ms供服务器清理环境、退出频道等
setTimeout(() => {
done();
}, 500);
});
// 测试保存队伍
it.skip('测试保存队伍', function (done) {
const lineup : LineupHero[] = [
{
actorId: 1, // 武将
dataId: 2, // 出兵表上的位置
order: 3, // 行动
}
];
pinusClient.request('guild.gvgBattleHandler.saveTeam', {
index: 1,
head: 1,
frame: 1,
spine: 1,
lineup,
}, (data) => {
checkSuccessResponse(data);
// 检查返回值中的 teams
expect(data.data.teams).to.be.an('array');
done();
});
});
// 测试获取城池信息
it.skip('测试获取城池信息', function (done) {
const cityId = 1;
// 通过测试接口尝试创建城市
// pinusClient.request('guild.gvgBattleHandler.createCity', {
// cityId, magicWord: DEBUG_MAGIC_WORD
// }, (data) => {
// checkSuccessResponse(data);
// checkCity(data.data.city);
pinusClient.request('guild.gvgBattleHandler.getCity', {
cityId,
}, (data) => {
checkSuccessResponse(data);
// 检查返回值中的 city
expect(data.data.cityId).to.be.a('number');
expect(data.data.guardLeague).to.be.an('object');
expect(data.data.guardLeague.leagueCode).to.be.a('string');
expect(data.data.guardLeague.name).to.be.a('string');
expect(data.data.guardLeague.icon).to.be.a('number');
expect(data.data.guardStartTime).to.be.a('number');
expect(data.data.startTime).to.be.a('number');
expect(data.data.endTime).to.be.a('number');
expect(data.data.ourTeamCnt).to.be.a('number');
expect(data.data.oppTeamCnt).to.be.a('number');
done();
});
// });
});
// 进入城池
it.skip('进入城池', function (done) {
const cityId = 1;
pinusClient.request('guild.gvgBattleHandler.enterCity', {
cityId,
}, (data) => {
checkSuccessResponse(data);
// 检查 city 中的属性类型是否合法
expect(data.data.cityId).to.be.a('number');
expect(data.data.ranks).to.be.an('array');
expect(data.data.recs).to.be.an('array');
expect(data.data.teams).to.be.an('array');
data.data.teams.forEach((team) => {
checkTeam(team);
});
done();
});
});
// 离开城池
it.skip('离开城池', function (done) {
pinusClient.request('guild.gvgBattleHandler.leaveCity', {}, (data) => {
checkSuccessResponse(data);
done();
});
});
// 开始移动
it.skip('开始移动', function (done) {
const cityId = 1;
const areaId = 1;
const teamCode = '';
pinusClient.request('guild.gvgBattleHandler.startMove', {
cityId,
areaId,
teamCode,
}, (data) => {
checkSuccessResponse(data);
setTimeout(() => {
// 停止移动
it.skip('停止移动', function (done) {
pinusClient.request('guild.gvgBattleHandler.stopMove', {}, (data) => {
checkSuccessResponse(data);
expect(data.data.areaId).to.be.a('number');
expect(data.data.cityId).to.be.a('number');
checkTeam(data.data.curTeam);
// players
expect(data.data.players).to.be.an('array');
data.data.players.forEach((player) => {
checkPlayer(player);
});
done();
});
});
}, 2000);
});
});
// 队伍入驻积分点
it.skip('队伍入驻积分点', function (done) {
const cityId = 1;
const areaId = 1;
const pointId = 1;
const teamCode = '';
pinusClient.request('guild.gvgBattleHandler.teamSettle', {
cityId,
areaId,
teamCode,
pointId,
}, (data) => {
checkSuccessResponse(data);
checkTeam(data.data.curTeam);
done();
});
});
// 队伍离开积分点
it.skip('队伍离开积分点', function (done) {
pinusClient.request('guild.gvgBattleHandler.teamLeave', {}, (data) => {
checkSuccessResponse(data);
done();
});
});
function battle(teamCode: string, oppoTeamCode: string, isSuccess: boolean, done) {
pinusClient.request('guild.gvgBattleHandler.battleStart', {
teamCode,
oppoTeamCode,
}, (data) => {
checkSuccessResponse(data);
const { battleCode } = data.data;
expect(battleCode).to.be.a('string');
setTimeout(() => {
// 队伍结束攻击 battleEnd
it.skip('队伍结束攻击', function (done) {
pinusClient.request('guild.gvgBattleHandler.battleEnd', {
battleCode,
isSuccess,
}, (data) => {
checkSuccessResponse(data);
if (isSuccess) {
checkLeagueGoods(data.data.leagueGoods);
}
done();
});
});
}, 5000);
});
}
// 队伍开始攻击且获胜
it.skip('队伍开始攻击且获胜', function (done) {
const teamCode = '';
const oppoTeamCode = '';
battle(teamCode, oppoTeamCode, true, done);
});
// 队伍开始攻击且失败
it.skip('队伍开始攻击且失败', function (done) {
const teamCode = '';
const oppoTeamCode = '';
battle(teamCode, oppoTeamCode, false, done);
});
function useItem(itemId: number, teamCode: string, done) {
pinusClient.request('guild.gvgBattleHandler.useItem', {
itemId,
teamCode,
}, (data) => {
checkSuccessResponse(data);
checkTeam(data.data.team);
done();
});
}
// 使用道具
// ! 不同道具添加多个测试用例
it.skip('使用道具', function (done) {
const itemId = 1;
const teamCode = '';
useItem(itemId, teamCode, done);
});
// 复活队伍
it.skip('复活队伍', function (done) {
const teamCode = '';
pinusClient.request('guild.gvgBattleHandler.reviveTeam', {}, (data) => {
checkSuccessResponse(data);
checkTeam(data.data.team);
done();
});
});
// 获取战报 getRecs
// ! 战报具体内容未检查
it.skip('获取战报', function (done) {
const type = 1;
pinusClient.request('guild.gvgBattleHandler.getRecs', {
type,
}, (data) => {
checkSuccessResponse(data);
expect(data.data.recs).to.be.an('array');
done();
});
});
// 获取概况
it.skip('获取概况', function (done) {
pinusClient.request('guild.gvgBattleHandler.getOverview', {}, (data) => {
checkSuccessResponse(data);
expect(data.data.cities).to.be.an('array');
data.data.cities.forEach((city) => {
checkCity(city);
});
done();
});
});
// 获取区域上的队伍 getAreaTeams
it.skip('获取区域上的队伍', function (done) {
const cityId = 1;
const areaIds = [1, 2, 3];
pinusClient.request('guild.gvgBattleHandler.getAreaTeams', {
cityId,
areaIds,
}, (data) => {
checkSuccessResponse(data);
expect(data.data.teams).to.be.an('array');
data.data.teams.forEach((team) => {
checkTeam(team);
});
done();
});
});
})
// 检查城市数据是否合法
export function checkCity(city) {
expect(city).to.be.an('object');
expect(city.cityId).to.be.a('number');
expect(city.configId).to.be.a('number');
expect(city.userCnt).to.be.a('number');
expect(city.teamCnt).to.be.a('number');
if (city.guardLeague) {
expect(city.guardLeague).to.be.a('string');
expect(city.guardLeagueName).to.be.a('string');
}
}
// 检查队伍数据是否合法
export function checkTeam(team: GVGTeamType) {
expect(team).to.be.an('object');
expect(team.teamCode).to.be.a('string');
expect(team.leagueCode).to.be.a('string');
expect(team.areaId).to.be.a('number');
expect(team.cityId).to.be.a('number');
expect(team.head).to.be.a('number');
expect(team.frame).to.be.a('number');
expect(team.spine).to.be.a('number');
expect(team.durability).to.be.a('number');
expect(team.restartTime).to.be.a('number');
expect(team.attackTime).to.be.a('number');
expect(team.startMoveTime).to.be.a('number');
expect(team.stopMoveTime).to.be.a('number');
expect(team.defenseTime).to.be.a('number');
checkLineup(team.lineup);
}
// 检查阵容数据是否合法
export function checkLineup(lineup: GVGHeroInfo[]) {
expect(lineup).to.be.an('array');
// 循环检查阵容数据是否合法
lineup.forEach((hero) => {
expect(hero.actorId).to.be.a('number');
expect(hero.dataId).to.be.a('number');
});
}
// 检查玩家数据是否合法
// ! 不完整
export function checkPlayer(user: GVGUserDataType) {
expect(user).to.be.an('object');
expect(user.roleId).to.be.a('string');
expect(user.leagueCode).to.be.a('string');
expect(user.configId).to.be.a('string');
expect(user.active).to.be.a('number');
// expect(user.receivedLv).to.be.a('number');
expect(user.receiveCurrencyTime).to.be.a('number');
}
// check leagueGoods
export function checkLeagueGoods(leagueGoods) {
expect(leagueGoods).to.be.an('array');
leagueGoods.forEach((good) => {
expect(good).to.be.an('object');
expect(good.itemType).to.be.a('number');
expect(good.id).to.be.a('number');
expect(good.count).to.be.a('number');
});
}