Add player leaderboard and homepage preview
This commit is contained in:
41
tests/leaderboard.test.ts
Normal file
41
tests/leaderboard.test.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
import { test } from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
import { leaderboardFilters, leaderboardHref } from "../shared/leaderboard";
|
||||
|
||||
test("leaderboard filters constrain malformed and repeated query parameters", () => {
|
||||
assert.deepEqual(
|
||||
leaderboardFilters({ difficulty: "hard", q: " Alex ", page: "3" }),
|
||||
{ difficulty: "hard", search: "Alex", page: 3 },
|
||||
);
|
||||
for (const page of ["-4", "0", "Infinity", "2.5", "no", ["2", "3"]]) {
|
||||
assert.equal(leaderboardFilters({ page }).page, 1);
|
||||
}
|
||||
assert.equal(
|
||||
leaderboardFilters({ difficulty: ["hard", "easy"] }).difficulty,
|
||||
"all",
|
||||
);
|
||||
assert.equal(
|
||||
leaderboardFilters({ difficulty: "creative" }).difficulty,
|
||||
"all",
|
||||
);
|
||||
assert.equal(
|
||||
leaderboardFilters({ q: "x".repeat(100), page: "2000000" }).search.length,
|
||||
64,
|
||||
);
|
||||
assert.equal(leaderboardFilters({ page: "2000000" }).page, 1_000_000);
|
||||
});
|
||||
|
||||
test("leaderboard navigation preserves and encodes player searches", () => {
|
||||
const link = new URL(
|
||||
leaderboardHref("normal", "Alex & %_", 3),
|
||||
"https://minegeo.test",
|
||||
);
|
||||
assert.equal(link.searchParams.get("difficulty"), "normal");
|
||||
assert.equal(link.searchParams.get("q"), "Alex & %_");
|
||||
assert.equal(link.searchParams.get("page"), "3");
|
||||
assert.equal(leaderboardHref("all"), "/leaderboard");
|
||||
assert.equal(
|
||||
new URL(leaderboardHref("easy", "Alex"), link).searchParams.has("page"),
|
||||
false,
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user