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' }, }); }); });