diff --git a/packages/health/test/HealthManager.spec.ts b/packages/health/test/HealthManager.spec.ts index 4126a42f..c70104e7 100644 --- a/packages/health/test/HealthManager.spec.ts +++ b/packages/health/test/HealthManager.spec.ts @@ -3,7 +3,7 @@ import { describe, expect, it } from 'vitest'; import { HEALTH_MANAGERS } from './fixtures'; -describe('services/LocalWorker', () => +describe('HealthManager', () => { describe('.isHealthy()', () => { diff --git a/packages/middleware/test/MiddlewareManager.spec.ts b/packages/middleware/test/MiddlewareManager.spec.ts new file mode 100644 index 00000000..3a927919 --- /dev/null +++ b/packages/middleware/test/MiddlewareManager.spec.ts @@ -0,0 +1,27 @@ + +import { describe, expect, it } from 'vitest'; + +import { Request, RunModes, Version } from '@jitar/execution'; + +import { MIDDLEWARE_MANAGERS } from './fixtures'; + +describe('MiddlewareManager', () => +{ + describe('.handle(fqn, version, args, headers', () => + { + it('should execute the middleware in the correct order', async () => + { + const args = new Map(); + const headers = new Map(); + + const request = new Request('test', new Version(1, 0, 0), args, headers, RunModes.NORMAL); + const response = await MIDDLEWARE_MANAGERS.DEFAULT.handle(request); + + expect(response.result).toBe('123'); + expect(headers.get('first')).toBe('yes'); + expect(headers.get('second')).toBe('yes'); + expect(headers.get('third')).toBe('yes'); + expect(headers.get('last')).toBe('3'); // The last middleware to be called is the last one added + }); + }); +}); diff --git a/packages/middleware/test/fixtures/index.ts b/packages/middleware/test/fixtures/index.ts new file mode 100644 index 00000000..74f1711f --- /dev/null +++ b/packages/middleware/test/fixtures/index.ts @@ -0,0 +1,3 @@ + +export * from './middlewares.fixture'; +export * from './middlewareManagers.fixture'; diff --git a/packages/middleware/test/fixtures/middlewareManagers.fixture.ts b/packages/middleware/test/fixtures/middlewareManagers.fixture.ts new file mode 100644 index 00000000..0599879c --- /dev/null +++ b/packages/middleware/test/fixtures/middlewareManagers.fixture.ts @@ -0,0 +1,14 @@ + +import MiddlewareManager from '../../src/middlewareManager'; + +import { MIDDLEWARES } from './middlewares.fixture'; + +const manager = new MiddlewareManager(); +manager.addMiddleware(MIDDLEWARES.FIRST); +manager.addMiddleware(MIDDLEWARES.SECOND); +manager.addMiddleware(MIDDLEWARES.THIRD); + +export const MIDDLEWARE_MANAGERS = +{ + DEFAULT: manager +}; diff --git a/packages/middleware/test/fixtures/middlewares.fixture.ts b/packages/middleware/test/fixtures/middlewares.fixture.ts new file mode 100644 index 00000000..9a7f59c0 --- /dev/null +++ b/packages/middleware/test/fixtures/middlewares.fixture.ts @@ -0,0 +1,53 @@ + +import { Request, Response, StatusCodes } from '@jitar/execution'; + +import Middleware from '../../src/interfaces/Middleware'; + +class FirstMiddleware implements Middleware +{ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async handle(request: Request, next: () => Promise): Promise + { + request.setHeader('first', 'yes'); + request.setHeader('last', '1'); + + const response = await next(); + response.result = '1' + response.result; + + return response; + } +} + +class SecondMiddleware implements Middleware +{ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async handle(request: Request, next: () => Promise): Promise + { + request.setHeader('second', 'yes'); + request.setHeader('last', '2'); + + const response = await next(); + response.result = '2' + response.result; + + return response; + } +} + +class ThirdMiddleware implements Middleware +{ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async handle(request: Request, next: () => Promise): Promise + { + request.setHeader('third', 'yes'); + request.setHeader('last', '3'); + + return new Response(StatusCodes.OK, '3'); + } +} + +export const MIDDLEWARES = +{ + FIRST: new FirstMiddleware(), + SECOND: new SecondMiddleware(), + THIRD: new ThirdMiddleware() +};