import { test } from '@japa/runner' import type { HttpContext } from '@adonisjs/core/http' import { FileNotFoundException } from '#exceptions/file_manager_exceptions' import { PageRouteConflictException } from '#exceptions/web_manager_exceptions' function captureContext() { const captured: { status?: number; body?: unknown } = {} const response = { status(code: number) { captured.status = code return response }, send(body: unknown) { captured.body = body }, } return { captured, ctx: { response } as unknown as HttpContext } } test.group('API exceptions', () => { test('page manager exceptions self-render as message and code', async ({ assert }) => { const { captured, ctx } = captureContext() const error = new PageRouteConflictException('en', 'about') await error.handle(error, ctx) assert.equal(captured.status, 409) assert.deepEqual(captured.body, { message: 'A page already uses /en/about', code: 'E_PAGE_ROUTE_CONFLICT', }) }) test('file manager exceptions self-render as message and code', async ({ assert }) => { const { captured, ctx } = captureContext() const error = new FileNotFoundException() await error.handle(error, ctx) assert.equal(captured.status, 404) assert.deepEqual(captured.body, { message: 'File not found', code: 'E_FILE_NOT_FOUND' }) }) })