Files
ridebus-status/test/server.test.mjs
2026-10-13 02:24:39 +03:00

24 lines
1.5 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import { loadConfig } from '../server/config.mjs';
import { createStatusServer } from '../server/index.mjs';
test('public HTTP API is read-only, uncached, strict on ranges and isolated from demo data', async () => {
const config = loadConfig({ STATUS_DB_PATH: ':memory:', PORT: '0', HOST: '127.0.0.1' });
const app = await createStatusServer(config, { monitorEnabled: false });
try {
await new Promise((resolve, reject) => { app.server.once('error', reject); app.server.listen(0, '127.0.0.1', resolve); });
const origin = `http://127.0.0.1:${app.server.address().port}`;
const response = await fetch(`${origin}/api/status?range=30`);
assert.equal(response.status, 200); assert.equal(response.headers.get('cache-control'), 'no-store');
const live = await response.json(); assert.equal(live.overall, 'unknown'); assert.equal(live.demo, false);
assert.equal((await fetch(`${origin}/api/status?range=31`)).status, 400);
assert.equal((await fetch(`${origin}/api/status`, { method: 'POST' })).status, 405);
assert.equal((await fetch(`${origin}/api/private`)).status, 404);
assert.equal((await (await fetch(`${origin}/api/status?demo=1`)).json()).demo, true);
assert.equal((await (await fetch(`${origin}/api/status`)).json()).services[0].checks, 0);
assert.equal((await fetch(`${origin}/healthz`)).status, 200);
assert.equal((await fetch(`${origin}/../.env`)).status, 404);
} finally { await app.close(); }
});