2022-10-28 05:07:18 -04:00
|
|
|
import { RankTracker } from "./RankTracker.ts";
|
|
|
|
|
import { assertEquals } from "../dev_deps.ts";
|
2022-10-28 09:32:54 -04:00
|
|
|
import { BattleListNode } from "./types.ts";
|
|
|
|
|
import { base64 } from "../deps.ts";
|
|
|
|
|
import { gameId } from "./utils.ts";
|
2022-10-28 05:07:18 -04:00
|
|
|
|
2022-10-28 09:32:54 -04:00
|
|
|
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,
|
|
|
|
|
});
|
2022-10-28 05:07:18 -04:00
|
|
|
});
|