41 lines
1.4 KiB
JavaScript
41 lines
1.4 KiB
JavaScript
import { afterEach, describe, expect, it } from 'vitest';
|
|
import { contentSecurityPolicy, createServer } from '../src/app.js';
|
|
|
|
describe('GET /api/health', () => {
|
|
/** @type {import('@hapi/hapi').Server | undefined} */
|
|
let server;
|
|
|
|
afterEach(async () => {
|
|
await server?.stop();
|
|
});
|
|
|
|
it('returns ok and an ISO time', async () => {
|
|
server = await createServer();
|
|
const response = await server.inject({ method: 'GET', url: '/api/health' });
|
|
|
|
expect(response.statusCode).toBe(200);
|
|
const body =
|
|
/** @type {{ status: string, time: string, checks: { database: string, storage: string } }} */ (
|
|
response.result
|
|
);
|
|
expect(body.status).toBe('ok');
|
|
expect(body.checks).toEqual({ database: 'ok', storage: 'skipped' });
|
|
expect(response.headers['content-security-policy']).toBe(contentSecurityPolicy('/api/health'));
|
|
expect(contentSecurityPolicy('/api/dev/files/agreement.pdf')).toBe(
|
|
"default-src 'none'; frame-ancestors 'self'",
|
|
);
|
|
expect(response.headers['x-request-id']).toBeTruthy();
|
|
expect(Number.isNaN(Date.parse(body.time))).toBe(false);
|
|
});
|
|
|
|
it('returns a JSON error for an unknown route', async () => {
|
|
server = await createServer();
|
|
const response = await server.inject({ method: 'GET', url: '/api/missing' });
|
|
|
|
expect(response.statusCode).toBe(404);
|
|
expect(response.result).toEqual({
|
|
error: { code: 'NOT_FOUND', message: 'Not Found' },
|
|
});
|
|
});
|
|
});
|