|
@@ -1,5 +1,10 @@
|
|
|
-import { assertEquals } from 'test-deps';
|
|
|
|
|
-import Controller from 'if/controllers/controller.class.ts';
|
|
|
|
|
|
|
+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 () => {
|
|
Deno.test('Controller class', async () => {
|
|
|
const mockHandler = (req: Request) => new Response('Hello, world!');
|
|
const mockHandler = (req: Request) => new Response('Hello, world!');
|
|
@@ -8,11 +13,11 @@ Deno.test('Controller class', async () => {
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// Test that the handler was stored correctly
|
|
// Test that the handler was stored correctly
|
|
|
- assertEquals(controller.handlers['/_GET'], mockHandler);
|
|
|
|
|
|
|
+ assert(controller.hasHandler('/', 'GET'));
|
|
|
|
|
|
|
|
// Test the response method
|
|
// Test the response method
|
|
|
const req = new Request('http://localhost/');
|
|
const req = new Request('http://localhost/');
|
|
|
- const res = Controller.response(req, 'Hello, world!');
|
|
|
|
|
|
|
+ const res = controller.response(req, 'Hello, world!');
|
|
|
assertEquals(res.status, 200);
|
|
assertEquals(res.status, 200);
|
|
|
assertEquals(
|
|
assertEquals(
|
|
|
new TextDecoder().decode(new Uint8Array(await res.arrayBuffer())),
|
|
new TextDecoder().decode(new Uint8Array(await res.arrayBuffer())),
|
|
@@ -20,7 +25,71 @@ Deno.test('Controller class', async () => {
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
// Test the responseJSON method
|
|
// Test the responseJSON method
|
|
|
- const jsonRes = Controller.responseJSON(req, { message: 'Hello, world!' });
|
|
|
|
|
|
|
+ const jsonRes = controller.responseJSON(req, { message: 'Hello, world!' });
|
|
|
assertEquals(jsonRes.status, 200);
|
|
assertEquals(jsonRes.status, 200);
|
|
|
assertEquals(await jsonRes.json(), { message: 'Hello, world!' });
|
|
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);
|
|
|
|
|
+ },
|
|
|
|
|
+});
|