Add community content reports, map bans, and appeals
This commit is contained in:
68
tests/moderation.test.ts
Normal file
68
tests/moderation.test.ts
Normal file
@@ -0,0 +1,68 @@
|
||||
import { test } from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
import { contributionCutoff, reportSchema } from "../shared/moderation";
|
||||
|
||||
const datasetId = "11111111-1111-4111-8111-111111111111";
|
||||
const sessionId = "22222222-2222-4222-8222-222222222222";
|
||||
const report = {
|
||||
datasetId,
|
||||
target: "map",
|
||||
category: "broken",
|
||||
reason: "Terrain is missing from the map.",
|
||||
};
|
||||
test("reports require an unambiguous target and a meaningful explanation", () => {
|
||||
assert.equal(reportSchema.parse(report).target, "map");
|
||||
for (const change of [
|
||||
{ datasetId: undefined },
|
||||
{ sessionId },
|
||||
{ target: "panorama" },
|
||||
{ reason: " " },
|
||||
{ category: "unknown" },
|
||||
])
|
||||
assert.equal(
|
||||
reportSchema.safeParse({ ...report, ...change }).success,
|
||||
false,
|
||||
);
|
||||
assert.equal(
|
||||
reportSchema.parse({ ...report, reason: " Terrain is missing. " }).reason,
|
||||
"Terrain is missing.",
|
||||
);
|
||||
});
|
||||
test("panorama reports identify the played session and round without client-provided location IDs", () => {
|
||||
const panorama = {
|
||||
...report,
|
||||
datasetId: undefined,
|
||||
sessionId,
|
||||
target: "panorama",
|
||||
round: 3,
|
||||
};
|
||||
assert.equal(reportSchema.safeParse(panorama).success, true);
|
||||
for (const round of [undefined, -1, 5, 0.5])
|
||||
assert.equal(reportSchema.safeParse({ ...panorama, round }).success, false);
|
||||
});
|
||||
test("evidence links allow only HTTP and HTTPS", () => {
|
||||
for (const evidenceUrl of [
|
||||
"https://example.com/proof",
|
||||
"http://example.com/proof",
|
||||
])
|
||||
assert.equal(
|
||||
reportSchema.safeParse({ ...report, evidenceUrl }).success,
|
||||
true,
|
||||
);
|
||||
for (const evidenceUrl of [
|
||||
"javascript:alert(1)",
|
||||
"data:text/html,test",
|
||||
"file:///secret",
|
||||
"ftp://example.com",
|
||||
])
|
||||
assert.equal(
|
||||
reportSchema.safeParse({ ...report, evidenceUrl }).success,
|
||||
false,
|
||||
);
|
||||
});
|
||||
test("contribution list cutoff is exactly five days and crosses month boundaries", () => {
|
||||
assert.equal(
|
||||
contributionCutoff(Date.parse("2026-10-03T12:34:56Z")),
|
||||
"2026-09-28T12:34:56.000Z",
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user