| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- 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<string, string>,
- ): 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);
- },
- });
|