import { assert, assertEquals } from 'test-deps'; import { HTTPStatus } from 'deps'; import Controller, { ControllerHandler, } from 'if/controllers/controller.class.ts'; import { Logger } from 'infra/logger.ts'; Deno.test('Controller class', async () => { const mockHandler = (req: Request) => new Response('Hello, world!'); const controller = new Controller({ '/_GET': mockHandler, }); // Test that the handler was stored correctly assert(controller.hasHandler('/', 'GET')); // Test the response method const req = new Request('http://localhost/'); const res = controller.response(req, 'Hello, world!'); assertEquals(res.status, 200); assertEquals( new TextDecoder().decode(new Uint8Array(await res.arrayBuffer())), 'Hello, world!', ); // Test the responseJSON method const jsonRes = controller.responseJSON(req, { message: 'Hello, world!' }); assertEquals(jsonRes.status, 200); assertEquals(await jsonRes.json(), { message: 'Hello, world!' }); }); Deno.test('Controller class error handling', async () => { const error = new Error('Test error'); const errorHandler = ( req: Request, error?: string, headers?: Record, ): Response => { return controller.response(req, error ?? 'Unknown error', { status: HTTPStatus.InternalServerError, }); }; const controller = new Controller({ '/_GET': errorHandler, }); // Test that the handler was stored correctly assert(controller.hasHandler('/', 'GET')); // Test the error response method const req = new Request('http://localhost/'); const handler = controller.getHandler('/', 'GET'); if (handler) { const res = await handler(req, error.message); assertEquals(res.status, HTTPStatus.InternalServerError); assertEquals( new TextDecoder().decode(new Uint8Array(await res.arrayBuffer())), error.message, ); } else { assert(false, 'Handler not found'); } }); Deno.test({ name: 'Controller should log debug message for health check user agent', fn: async () => { let logger = Logger.getInstance('test'); const userAgent = Deno.env.get('DOCKER_USER_AGENT') ?? ''; console.log(userAgent); const req = new Request('http://localhost', { method: 'GET', headers: new Headers({ 'User-Agent': userAgent, }), }); const handler: ControllerHandler = (req: Request) => { return controller.response(req, 'Hello, World!'); }; const controller = new Controller({ '/_GET': handler }, logger); const response = await controller.getHandler('/', 'GET')(req); // Check if the expected debug message was logged const debugMessage = logger.getMessages().find((message) => message.startsWith('[DEBUG] ') && message.endsWith(`(${userAgent})`) ); assert(debugMessage !== undefined, 'Expected debug message was not logged'); assertEquals(response.status, 200); }, });