Skip to content
52 linesCodeBlameRaw
1import { test } from "node:test";
2import assert from "node:assert/strict";
3
4import {
5 DEFAULT_PAGE,
6 MAX_BODY,
7 MAX_PAGE,
8 isTypingFrame,
9 messageBody,
10 meterDay,
11 pageOf,
12 pageSize,
13} from "./messages.ts";
14
15test("a message needs something in it, and not too much", () => {
16 assert.deepEqual(messageBody("hello \n"), { ok: true, body: "hello" });
17 assert.equal(messageBody(" ").ok, false);
18 assert.equal(messageBody(undefined).ok, false);
19 // A card can stand alone.
20 assert.deepEqual(messageBody("", true), { ok: true, body: "" });
21 assert.equal(messageBody("x".repeat(MAX_BODY)).ok, true);
22 assert.equal(messageBody("x".repeat(MAX_BODY + 1)).ok, false);
23});
24
25test("a page holds the default, or what was asked within limits", () => {
26 assert.equal(pageSize(null), DEFAULT_PAGE);
27 assert.equal(pageSize(10), 10);
28 assert.equal(pageSize(0), 1);
29 assert.equal(pageSize(10_000), MAX_PAGE);
30 assert.equal(pageSize("20"), DEFAULT_PAGE);
31});
32
33test("a page read one past its size says where to read on from", () => {
34 const rows = ["m5", "m4", "m3"].map((id) => ({ id }));
35 assert.deepEqual(pageOf(rows, 2), { rows: rows.slice(0, 2), older: "m4" });
36 assert.deepEqual(pageOf(rows, 3), { rows, older: null });
37 assert.deepEqual(pageOf([], 3), { rows: [], older: null });
38});
39
40test("the meter counts by UTC day", () => {
41 assert.equal(meterDay("2026-10-08T23:59:59.999Z"), "2026-10-08");
42});
43
44test("a socket frame says typing in this channel, or is ignored", () => {
45 assert.equal(isTypingFrame('{"type":"typing"}', "chn_1"), true);
46 assert.equal(isTypingFrame('{"type":"typing","channel_id":"chn_1"}', "chn_1"), true);
47 assert.equal(isTypingFrame('{"type":"typing","channel_id":"chn_2"}', "chn_1"), false);
48 assert.equal(isTypingFrame('{"type":"post","body":"hi"}', "chn_1"), false);
49 assert.equal(isTypingFrame("typing", "chn_1"), false);
50 assert.equal(isTypingFrame("null", "chn_1"), false);
51 assert.equal(isTypingFrame(new ArrayBuffer(4), "chn_1"), false);
52});