test: add RankTracker test

main
spacemeowx2 2022-10-28 21:32:54 +08:00
parent 9f383ae76c
commit 1d0f095ad7
2 changed files with 127 additions and 5 deletions

View File

@ -1,7 +1,129 @@
import { RankTracker } from "./RankTracker.ts";
import { assertEquals } from "../dev_deps.ts";
import { BattleListNode } from "./types.ts";
import { base64 } from "../deps.ts";
import { gameId } from "./utils.ts";
Deno.test("RankTracker", () => {
const tracker = new RankTracker();
assertEquals(tracker, new RankTracker());
const INIT_STATE = {
gameId: await gameId(genId(0)),
rank: "B-",
rankPoint: 100,
};
class TestRankTracker extends RankTracker {
testGet() {
const { state, deltaMap } = this;
return {
state,
deltaMap,
};
}
}
function genId(id: number): string {
return base64.encode(
`VsHistoryDetail-asdf:asdf:20220101T${
id.toString().padStart(6, "0")
}_------------------------------------`,
);
}
function genOpenWins(
{ startId, count, udemae }: {
startId: number;
count: number;
udemae: string;
},
) {
const result: BattleListNode[] = [];
let id = startId;
for (let i = 0; i < count; i++) {
result.push({
id: genId(id),
udemae,
judgement: "WIN",
bankaraMatch: {
earnedUdemaePoint: 8,
},
nextHistoryDetail: null,
previousHistoryDetail: null,
});
id += 1;
}
return result;
}
Deno.test("RankTracker", async () => {
const tracker = new TestRankTracker(INIT_STATE);
assertEquals(tracker.testGet(), {
state: INIT_STATE,
deltaMap: new Map(),
});
const finalState = await tracker.updateState([{
bankaraMatchChallenge: null,
historyDetails: {
nodes: [...genOpenWins({
startId: 0,
count: 19,
udemae: "B-",
})].reverse(),
},
}]);
assertEquals(tracker.testGet().state, INIT_STATE);
assertEquals(finalState, {
gameId: await gameId(genId(18)),
rank: "B-",
rankPoint: 244,
});
assertEquals(await tracker.getRankStateById(genId(1)), {
gameId: await gameId(genId(1)),
rank: "B-",
rankPoint: 108,
});
assertEquals(await tracker.getRankStateById(genId(17)), {
gameId: await gameId(genId(17)),
rank: "B-",
rankPoint: 236,
});
tracker.setState(finalState);
assertEquals(tracker.testGet().state, finalState);
// history goes too far
const finalState2 = await tracker.updateState([{
bankaraMatchChallenge: null,
historyDetails: {
nodes: [...genOpenWins({
startId: 30,
count: 1,
udemae: "B-",
})].reverse(),
},
}]);
assertEquals(finalState2, undefined);
await tracker.updateState([{
bankaraMatchChallenge: null,
historyDetails: {
nodes: [...genOpenWins({
startId: 0,
count: 30,
udemae: "B-",
})].reverse(),
},
}]);
assertEquals(await tracker.getRankStateById(genId(29)), {
gameId: await gameId(genId(29)),
rank: "B-",
rankPoint: 332,
});
});

View File

@ -143,9 +143,9 @@ const battleTime = (id: string) => {
*/
export class RankTracker {
// key: privous game id
deltaMap: Map<string, Delta> = new Map();
protected deltaMap: Map<string, Delta> = new Map();
constructor(private state: RankState | undefined) {}
constructor(protected state: RankState | undefined) {}
async getRankStateById(id: string): Promise<RankState | undefined> {
if (!this.state) {