/** * Unit tests for the running-state status line helper (js/running-status.js). */ import { test, describe } from 'node:test'; import assert from 'node:assert/strict'; import { formatRunningStatus, RUNNING_STATUS_STAGES, RUNNING_STATUS_TICK_MS } from '../js/running-status.js'; describe('formatRunningStatus', () => { test('starts with the neutral line shown at submit time', () => { assert.equal(formatRunningStatus(0), 'Searching Confluence…'); assert.equal(formatRunningStatus(19_999), 'Searching Confluence…'); }); test('advances through the playful stages at their boundaries', () => { assert.equal(formatRunningStatus(20_000), 'Rummaging through the wiki…'); assert.equal(formatRunningStatus(59_999), 'Rummaging through the wiki…'); assert.equal(formatRunningStatus(60_000), "Reading everything so you don't have to…"); assert.equal(formatRunningStatus(120_000), 'Turning pages faster than a human could…'); assert.equal(formatRunningStatus(240_000), 'Lost in Confluence, found three more tabs…'); assert.equal(formatRunningStatus(420_000), 'Has anyone updated this page since 2019? Checking…'); assert.equal(formatRunningStatus(660_000), 'Still at it. If time runs out, it answers with what it found…'); }); test('stays on the last line past the protocol deadline', () => { assert.equal(formatRunningStatus(900_000), RUNNING_STATUS_STAGES.at(-1).text); assert.equal(formatRunningStatus(3_600_000), RUNNING_STATUS_STAGES.at(-1).text); }); test('treats negative, NaN and non-number input as just started', () => { assert.equal(formatRunningStatus(-5), 'Searching Confluence…'); assert.equal(formatRunningStatus(NaN), 'Searching Confluence…'); assert.equal(formatRunningStatus(undefined), 'Searching Confluence…'); }); test('stages are strictly increasing and start at zero', () => { assert.equal(RUNNING_STATUS_STAGES[0].fromMs, 0); for (let i = 1; i < RUNNING_STATUS_STAGES.length; i++) { assert.ok(RUNNING_STATUS_STAGES[i].fromMs > RUNNING_STATUS_STAGES[i - 1].fromMs); } assert.ok(RUNNING_STATUS_TICK_MS < RUNNING_STATUS_STAGES[1].fromMs, 'first change must be reachable by the ticker'); }); });