24 lines
1.5 KiB
JavaScript
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(); }
|
|
});
|