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, ); });