38 lines
1.3 KiB
JavaScript
38 lines
1.3 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { openDb } from '../src/db.mjs';
|
|
import { createAppServer } from '../src/server/index.mjs';
|
|
|
|
async function startTestServer() {
|
|
const db = openDb(':memory:');
|
|
const jobs = { subscribe: () => null, activeJobs: () => [] };
|
|
const whatsapp = {
|
|
getStatus: () => ({ state: 'READY', connected: true }),
|
|
sendText: async () => { throw new Error('sendText nao deveria ser chamado'); }
|
|
};
|
|
const server = createAppServer({ db, jobs, whatsapp });
|
|
await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve));
|
|
const baseUrl = `http://127.0.0.1:${server.address().port}`;
|
|
const close = async () => {
|
|
await new Promise((resolve) => server.close(resolve));
|
|
db.close();
|
|
};
|
|
return { server, baseUrl, close };
|
|
}
|
|
|
|
test('health endpoint is public and does not expose secrets', async () => {
|
|
const { server, baseUrl, close } = await startTestServer();
|
|
try {
|
|
const res = await fetch(`${baseUrl}/api/health`);
|
|
assert.equal(res.status, 200);
|
|
const body = await res.json();
|
|
assert.equal(body.ok, true);
|
|
assert.ok(body.app);
|
|
assert.ok(body.database);
|
|
assert.ok(body.whatsapp);
|
|
assert.doesNotMatch(JSON.stringify(body), /token|password|secret|cookie/i);
|
|
} finally {
|
|
await close(server);
|
|
}
|
|
});
|