mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-05-06 05:07:36 -05:00
94 lines
2.2 KiB
TypeScript
94 lines
2.2 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, test } from "vitest";
|
|
import { db } from "~/db/sql";
|
|
import { dbReset } from "~/utils/Test";
|
|
import * as XRankPlacementRepository from "./XRankPlacementRepository.server";
|
|
|
|
let placementCounter = 0;
|
|
|
|
const createSplatoonPlayer = async (splId: string) => {
|
|
const result = await db
|
|
.insertInto("SplatoonPlayer")
|
|
.values({ splId })
|
|
.returning("id")
|
|
.executeTakeFirstOrThrow();
|
|
|
|
return result.id;
|
|
};
|
|
|
|
const createXRankPlacement = async ({
|
|
playerId,
|
|
power,
|
|
}: {
|
|
playerId: number;
|
|
power: number;
|
|
}) => {
|
|
placementCounter++;
|
|
|
|
await db
|
|
.insertInto("XRankPlacement")
|
|
.values({
|
|
playerId,
|
|
power,
|
|
badges: "[]",
|
|
bannerSplId: 1,
|
|
mode: "SZ",
|
|
month: 1,
|
|
year: 2024,
|
|
name: "Test Player",
|
|
nameDiscriminator: "0000",
|
|
rank: placementCounter,
|
|
region: "WEST",
|
|
title: "Test",
|
|
weaponSplId: 0,
|
|
})
|
|
.execute();
|
|
};
|
|
|
|
describe("refreshAllPeakXp", () => {
|
|
beforeEach(() => {
|
|
placementCounter = 0;
|
|
dbReset();
|
|
});
|
|
|
|
afterEach(() => {
|
|
dbReset();
|
|
});
|
|
|
|
test("sets peakXp to max power for each player", async () => {
|
|
const player1Id = await createSplatoonPlayer("player1");
|
|
const player2Id = await createSplatoonPlayer("player2");
|
|
|
|
await createXRankPlacement({ playerId: player1Id, power: 2500 });
|
|
await createXRankPlacement({ playerId: player1Id, power: 2700 });
|
|
await createXRankPlacement({ playerId: player1Id, power: 2600 });
|
|
|
|
await createXRankPlacement({ playerId: player2Id, power: 3000 });
|
|
await createXRankPlacement({ playerId: player2Id, power: 2800 });
|
|
|
|
await XRankPlacementRepository.refreshAllPeakXp();
|
|
|
|
const players = await db
|
|
.selectFrom("SplatoonPlayer")
|
|
.select(["id", "peakXp"])
|
|
.orderBy("id", "asc")
|
|
.execute();
|
|
|
|
expect(players[0].peakXp).toBe(2700);
|
|
expect(players[1].peakXp).toBe(3000);
|
|
});
|
|
|
|
test("sets peakXp to null for player with no placements", async () => {
|
|
const playerId = await createSplatoonPlayer("player1");
|
|
|
|
await XRankPlacementRepository.refreshAllPeakXp();
|
|
|
|
const player = await db
|
|
.selectFrom("SplatoonPlayer")
|
|
.select("peakXp")
|
|
.where("id", "=", playerId)
|
|
.executeTakeFirstOrThrow();
|
|
|
|
expect(player.peakXp).toBeNull();
|
|
});
|
|
});
|