mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-05-25 13:03:59 -05:00
99 lines
2.8 KiB
TypeScript
99 lines
2.8 KiB
TypeScript
import { describe, expect, test } from "vitest";
|
|
import {
|
|
fillWithNullTillPowerOfTwo,
|
|
groupNumberToLetters,
|
|
validateBadgeReceivers,
|
|
} from "./tournament-bracket-utils";
|
|
|
|
const powerOfTwoParamsToResults: [
|
|
amountOfTeams: number,
|
|
expectedNullCount: number,
|
|
][] = [
|
|
[32, 0],
|
|
[16, 0],
|
|
[8, 0],
|
|
[31, 1],
|
|
[0, 0],
|
|
[17, 15],
|
|
];
|
|
|
|
describe("fillWithNullTillPowerOfTwo()", () => {
|
|
for (const [amountOfTeams, expectedNullCount] of powerOfTwoParamsToResults) {
|
|
test(`amountOfTeams=${amountOfTeams} -> ${expectedNullCount}`, () => {
|
|
expect(
|
|
fillWithNullTillPowerOfTwo(Array(amountOfTeams).fill("team")).filter(
|
|
(x) => x === null,
|
|
).length,
|
|
).toBe(expectedNullCount);
|
|
});
|
|
}
|
|
});
|
|
|
|
const groupNumberToLettersParamsToResult = [
|
|
{ groupNumber: 1, expected: "A" },
|
|
{ groupNumber: 26, expected: "Z" },
|
|
{ groupNumber: 27, expected: "AA" },
|
|
{ groupNumber: 52, expected: "AZ" },
|
|
{ groupNumber: 53, expected: "BA" },
|
|
{ groupNumber: 702, expected: "ZZ" },
|
|
{ groupNumber: 703, expected: "AAA" },
|
|
];
|
|
|
|
describe("groupNumberToLetters()", () => {
|
|
for (const { groupNumber, expected } of groupNumberToLettersParamsToResult) {
|
|
test(`groupNumber=${groupNumber} -> ${expected}`, () => {
|
|
expect(groupNumberToLetters(groupNumber)).toBe(expected);
|
|
});
|
|
}
|
|
});
|
|
|
|
describe("validateNewBadgeOwners", () => {
|
|
const badges = [{ id: 1 }, { id: 2 }];
|
|
|
|
test("returns BADGE_NOT_ASSIGNED if a badge has no owner", () => {
|
|
const badgeReceivers = [
|
|
{ badgeId: 1, userIds: [10], tournamentTeamId: 100 },
|
|
];
|
|
expect(validateBadgeReceivers({ badgeReceivers, badges })).toBe(
|
|
"BADGE_NOT_ASSIGNED",
|
|
);
|
|
});
|
|
|
|
test("returns BADGE_NOT_ASSIGNED if a badge owner has empty userIds", () => {
|
|
const badgeReceivers = [
|
|
{ badgeId: 1, userIds: [], tournamentTeamId: 100 },
|
|
{ badgeId: 2, userIds: [20], tournamentTeamId: 101 },
|
|
];
|
|
expect(validateBadgeReceivers({ badgeReceivers, badges })).toBe(
|
|
"BADGE_NOT_ASSIGNED",
|
|
);
|
|
});
|
|
|
|
test("returns DUPLICATE_TOURNAMENT_TEAM_ID if tournamentTeamId is duplicated", () => {
|
|
const badgeReceivers = [
|
|
{ badgeId: 1, userIds: [10], tournamentTeamId: 100 },
|
|
{ badgeId: 2, userIds: [20], tournamentTeamId: 100 },
|
|
];
|
|
expect(validateBadgeReceivers({ badgeReceivers, badges })).toBe(
|
|
"DUPLICATE_TOURNAMENT_TEAM_ID",
|
|
);
|
|
});
|
|
|
|
test("returns BADGE_NOT_FOUND if some receiver has a badge not from the tournament", () => {
|
|
const badgeReceivers = [
|
|
{ badgeId: 1, userIds: [10], tournamentTeamId: 100 },
|
|
];
|
|
expect(
|
|
validateBadgeReceivers({ badgeReceivers, badges: [{ id: 2 }] }),
|
|
).toBe("BADGE_NOT_FOUND");
|
|
});
|
|
|
|
test("returns null if all badges are assigned and tournamentTeamIds are unique", () => {
|
|
const badgeReceivers = [
|
|
{ badgeId: 1, userIds: [10], tournamentTeamId: 100 },
|
|
{ badgeId: 2, userIds: [20], tournamentTeamId: 101 },
|
|
];
|
|
expect(validateBadgeReceivers({ badgeReceivers, badges })).toBeNull();
|
|
});
|
|
});
|