Files
hockey_new/tests/program_log_frontend.cjs

44 lines
2.3 KiB
JavaScript

"use strict";
const assert = require("node:assert/strict");
const { buildQuery, formatTimestamp, LatestRequest } = require("../hockey_data/static/program-log.js");
// A typed local date range overrides preset=week instead of silently narrowing it.
let query = new URLSearchParams(buildQuery({ preset: "week", date_from: "2026-09-20", date_to: "2026-10-10", sort: "asc" }));
assert.equal(query.has("preset"), false);
assert.equal(query.get("date_from"), "2026-09-20");
assert.equal(query.get("date_to"), "2026-10-10");
assert.equal(query.get("sort"), "asc");
assert.equal(query.get("limit"), "100");
query = new URLSearchParams(buildQuery({ preset: "week", q: "HTTP 500 & game_id=other + русский", actor: "user/name" }, { cursor: "row+200/last" }));
assert.equal(query.get("q"), "HTTP 500 & game_id=other + русский");
assert.equal(query.has("game_id"), false);
assert.equal(query.get("actor"), "user/name");
assert.equal(query.get("cursor"), "row+200/last");
assert.equal(query.get("preset"), "week");
// Export covers the selected filtered period, not only the current page.
query = new URLSearchParams(buildQuery({ preset: "month", category: "mapping", game_id: "902918", level: "ERROR" }, { cursor: "page3", download: "jsonl" }));
assert.equal(query.get("format"), "jsonl");
assert.equal(query.get("category"), "mapping");
assert.equal(query.get("game_id"), "902918");
assert.equal(query.get("level"), "ERROR");
assert.equal(query.has("cursor"), false);
assert.equal(query.has("limit"), false);
assert.equal(formatTimestamp("2026-10-20T22:17:02Z"), "21.10.2026, 01:17:02");
assert.equal(formatTimestamp("invalid"), "—");
// The previous response stays obsolete even when a transport ignores cancellation.
const latest = new LatestRequest();
const first = latest.begin();
const second = latest.begin();
assert.equal(first.signal.aborted, true);
assert.equal(latest.current(first.sequence), false);
assert.equal(latest.current(second.sequence), true);
latest.cancel();
assert.equal(second.signal.aborted, true);
assert.equal(latest.current(second.sequence), false);
const third = latest.begin();
assert.equal(third.signal.aborted, false);
assert.equal(latest.current(third.sequence), true);
console.log("Program journal frontend: dates, export filters, escaping, timezone and stale-response guards passed.");